Microsoft VBA Excel 单元格 重复元素 去重

(VBA基础)Excel中数据去重的处理 目标是在第一列中查找并记录不重复的值,并将它们存储在第二列中。这样,第二列将包含第一列中的唯一值,按升序排序。 阅读详情

问题场景

简述:

单元格显示:N/A,A54,N/A,B12,R6,A55,去掉重复的元素。

参考:excel表格同一单元格里剔除重复词怎么做?


代码描述

第一步:
在较旧的 Excel 版本中,没有直接的函数可以用来去除字符串中的重复元素。一种解决办法是使用 VBA 来创建一个自定义函数,该函数可以接受一个字符串并返回一个去除了重复项的字符串。

Function UniqueList(inputStr As String, delimiter As String) As String
    Dim dictionary As Object
    Set dictionary = CreateObject("Scripting.Dictionary")
    Dim part As Variant
    Dim parts() As String
    
    parts = Split(inputStr, delimiter)
    
    For Each part In parts
        If Trim(part) <> "" And Not dictionary.Exists(Trim(part)) Then
            dictionary.Add Trim(part), Trim(part)
        End If
    Next part
    
    UniqueList = Join(dictionary.Items, delimiter)
End Function

例如,如果想要处理单元格 A1 中的字符串 N/A,A54,N/A,B12,R6,A55,可以在另一个单元格中使用以下公式:

=UniqueList(A1, ",")

这将返回 N/A,A54,B12,R6,A55。

第二步:
通过这个函数,我们得到的单元格值可能为"1,2,3"、“5,1,3”、“A33,9”,也就是会存在数字乱序、数字和字母乱序,我们想得到"1,2,3"、“1,3,5”、“9,A33”,也就是数字从小到大排列,数字排在字母前面。

首先是修改 UniqueList 函数以返回一个数组而不是字符串。然后,创建一个新的函数来对这个数组进行排序。

首先是更新后的 UniqueList 函数:

Function UniqueList(inputStr As String, delimiter As String) As Variant
    Dim dictionary As Object
    Set dictionary = CreateObject("Scripting.Dictionary")
    Dim part As Variant
    Dim parts() As String
    
    parts = Split(inputStr, delimiter)
    
    For Each part In parts
        If Trim(part) <> "" And Not dictionary.Exists(Trim(part)) Then
            dictionary.Add Trim(part), Trim(part)
        End If
    Next part
    
    UniqueList = dictionary.Items ' 返回数组而非字符串
End Function

接下来是自定义排序函数,创建一个 SortMixedData 函数来处理数字和字母的混合数组:

Function SortMixedData(arr As Variant) As String
    Dim i As Long, j As Long
    Dim temp As String
    
    ' 数字和字母分开排序
    For i = LBound(arr) To UBound(arr) - 1
        For j = i + 1 To UBound(arr)
            If IsNumeric(arr(i)) And IsNumeric(arr(j)) Then
                If Val(arr(i)) > Val(arr(j)) Then
                    temp = arr(i)
                    arr(i) = arr(j)
                    arr(j) = temp
                End If
            ElseIf IsNumeric(arr(i)) And Not IsNumeric(arr(j)) Then
                ' 保持数字在字母前
            ElseIf Not IsNumeric(arr(i)) And IsNumeric(arr(j)) Then
                temp = arr(i)
                arr(i) = arr(j)
                arr(j) = temp
            ElseIf StrComp(arr(i), arr(j), vbTextCompare) > 0 Then
                temp = arr(i)
                arr(i) = arr(j)
                arr(j) = temp
            End If
        Next j
    Next i
    
    ' 将排序后的数组转换回字符串
    SortMixedData = Join(arr, ",")
End Function

在 Excel 单元格中使用这两个函数来获取排序后的唯一值列表:

=SortMixedData(UniqueList(A1, ","))
VBA中使用字典对数据去重 整个过程重新组织了数据,将重复的键合并为一个,以便更好地呈现和对数据去重。 阅读详情

相关推荐

Excel VBA 巧用自定义函数进行数组去重

本文提供两种从数组中删除重复项的方法(自定义函数)供同学参考!

←か淡定☆ ヾ 的博客 2562

Excel VBA VBA去重复的几种方法

VBA去重复典型有两种方法: ① 整数数值型数据,可以直接使用数组下标去重复 ② 通用方法:字典去重复 Sub RecSortTest() arr = Array(5, 4, 2, 1, 5, 8, 7, 2, 7, 9, 3, 6, "22", "23", "221", 22, 23, 221, "a", "z", "c") '测试数组 ' arr = WorksheetFunct

ChristopherChen的博客 2万+

基于STM32的简易电压、频率、占空比测量仪

任务详解:我们需要实现三个功能: 第一个是测频率的功能,输入信号为频率为1kHz~10kHz的三种波形(方波、三角波、正弦波),这也是我们最常见的三种波形。幅度是不需要测量的,所以先不关心幅度。 第二个是电压报警功能,当输入信号的幅度超过15V时,我们需要报警(这里我用了一个红色LED当报警器,有条件的还可以加个蜂鸣器)并且把此时的信号幅度显示在OLED屏幕上。 第三个是通信方式的要求,需要有串口通信功能。 第四个是计算占空比的任务,这个任务的输入是幅度为1V~10V、频率为20Hz ~1kHz的方波,需要

weixin_43469377的博客 7254

VBA数组去重:用字典的去重的多种方法 + 数组去重方法2种方法

1 用字典的方法去重 方法1,用字典去重 dict1(I) = "" 方法2,用字典去重 + 统计次数 dict2(I) = dict2(I) + 1 方法3,用字典报重复,但没去重复 If Not dict3.exists(I) Then Sub test_dict1() Dim dict1 As Object Set dict1 = CreateObject("sc...

奔跑的犀牛先生 2万+

图的一些基本知识:图,邻居,度矩阵,邻接矩阵

目录前言图(graph)邻居(neighborhood)度矩阵(degree)邻接矩阵(adjacency)参考文献 前言       本文介绍了一些图论的基础知识,包括图的表示、邻接矩阵、度矩阵等(边不带权值的情况),本文中某些图片或者知识的参考/来源已列于本文最后。 图(graph)       图用G=(V, E)表示,V中元素为...

luzaijiaoxia0618的博客 6万+

树莓派4B保姆级教程:从零配置Python虚拟环境到PySide2开发全流程(含避坑指南)

本文提供树莓派4B上配置Python虚拟环境及PySide2 GUI开发的完整教程。针对armv7l架构的特殊性,详细讲解了从系统准备、虚拟环境创建到PySide2安装的避坑指南,并重点解决了跨平台UI文件处理等常见难题,帮助开发者构建稳定高效的开发环境。

9q8w7e6r5的博客 823

excel去重复

http://club.excelhome.net/thread-888978-2-1.html 以下是楼主的方法1: Sub 矩形1_Click()     i = Range("A65536").End(xlUp).Row     For s = 1 To i         For ss = i To s + 1 Step -1

threshold1980的专栏 825

JS逆向-7881游戏平台Lb-Sign参数和Lb-Timestamp参数

本文是该专栏的第79篇,后面会持续分享python爬虫干货知识。本文以7881游戏平台为例,通过JS逆向获取它的lb-sign参数和lb-timestamp参数生成规律。针对lb-sign和lb-timestamp两个参数具体的“逆向”思路逻辑,笔者将在本文进行详细说明,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,跟着笔者直接往下看正文部分。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 1221

Excel通过VBA脚本去除重复数据行并保存

需要灵活控制去重逻辑(如保留最后一次出现的重复项)时。:先筛选数据再复制到新工作表,最后在新表中去重。永远不要省略变量类型声明(如直接写。),这会导致VBA默认使用。,但显式声明更安全。

qq_59256973的博客 1612

Azure AI-102 认证全攻略: (二十八) 设置 Azure AI 服务 API

在本文中,您学习了如何通过 Azure 门户设置和管理 Azure AI 服务,以及如何通过编程方式访问这些服务。在这篇文章中,我们将深入探讨如何设置 Azure AI 服务,特别是如何通过 Azure API 来进行编程访问,以实现自动化和集成。通过本篇文章的学习,您不仅能够顺利完成 Azure AI-102 认证中的 API 配置和集成内容,还能高效地管理和优化 Azure AI 服务,构建稳定、可靠的 AI 应用。在成功设置并测试了 API 后,接下来要管理和维护您的 Azure AI 服务。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1448

Kubernetes 集群升级与备份恢复:从 1.24 到 1.30 的平滑升级实战

详解 Kubernetes 集群版本升级流程(kubeadm 方式),包括前置检查、组件逐个升级、节点排水与恢复,同时演示 etcd 备份与集群灾难恢复方案。

kaixin110a的博客 36

excel vba 去除重复字段的代码

以下是一个使用 VBA 去除重复字段的代码: Sub RemoveDuplicates() Dim lRow As Long Dim lCol As Long Dim i As Long Dim j As Long Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ...

weixin_35756637的博客 443

AI: 机器学习的模型是如何训练的?(在试错中学习)

一句话理解机器学习一般训练过程 :通过有标签样本来调整(学习)并确定所有权重Weights和偏差Bias的理想值。 训练的目标:最小化损失函数 (损失函数下面马上会介绍) 机器学习算法在训练过程中,做的就是:检查多个样本并尝试找出可最大限度地减少损失的模型;目标就是将损失(Loss)最小化 在这里插入图片描述 上图就是一般模型训练的一般过程(试错过程),其中 模型: 将一个或多个特征作为输入,然后返回一个预测 (y’) 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型,如下公式

HowieXue 薛永浩的博客 3万+

excel vba 去重

需求:把A列的不重复的值放在B列。 1.vba脚本: Option Explicit Sub quchong() Dim i, m As Integer i = 1 m = 1 Do While Cells(i, "a") <> Empty And Cells(i, "a") <> "" If InStr(1, Cells(i, "a"), "类型", 1) = 0 And InStr(1, Cells(m, "b"), C

weixin_40459875的博客 3302

Buck电源设计常见的一些问题(一)半桥栅极驱动芯片共性失效问题

半桥驱动芯片主要用在器件可应用于电信,数据通信,便携式存储或更低电压系统中的电源转换器,半桥、全桥、推挽、同步降压,正激变换器和同步整流器等方面。当然难免会遇到不少问题。基本上我们在产品开发的过程中都遇到过栅极驱动芯片坏掉的情况,所以找了一些资料,学习学习。也查找查找原因。

小幽余生不加糖 2371

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VBA中一维数组去重

【代码】VBA中一维数组去重。

zhangdabai1的博客 949

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

EXCEL单元格内重复数据去重

工作上经常遇到需要处理的 excel 数据,比如某一单元格中有许多重复值。当然,上述代码中可以根据你数据分隔符不同,自由更改。示例,原单元格数据为:张三,李四,李四,王五。去重后单元格数据变为:张三,李四,王五。

wendyfe的博客 664

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VBA一列中找出重复数据

【代码】VBA一列中找出重复数据。

weixin_41716390的博客 4483

excel函数去重_【Excel VBA】使用字典快速对数据去重

原标题:【Excel VBA】使用字典快速对数据去重数据去重复一直是数据整理过程中常见的问题之一,Excel解决方法有【删除重复项】、【高级筛选】、【数据透视表】、SQL语句、VBA的字典和集合等等……各有所长也各有所短。可能还有小伙伴说还有函数……那啥……坦白说,“去重”一直都是函数最大的硬伤之一,虽然数组公式可以实现,但那些数组公式的适应性、可操作性和运算效率都是渣渣的一匹。说来也是奇怪……绝...

weixin_32090653的博客 2122

VBA单列去重

【代码】VBA单列去重。

豪情云天博客,分享经典好用代码,和工具,感谢大家的关注和支持! 628

VBA-字典与数组实现去重

在实际操作中有太多的数据需要去重仅保留一条记录,在这里自己写了两个函数,测试OK,需要可以自己稍微改动就可以使用啦。 1.两个数据源合并,仅取第一次出现的数据,具体代码如下,因为注释比较详细,在这里就不过多的说明,需要注意一点的是,我这里使用的数据,去重列是第二列,所以我将字典转换成数组时,是将数组的第2列等于字典的key值,为保持数据结构一致,方便循环操作。 '合并去重,将数据源1和数据源2合并去重保存在数组里,arr0是用来指定去重列和保留列,使用时仅限在两个数组结构一致的情况下使用。 Funct

oyq的博客 3675

Excel.VBA 快速删除重复记录

Excel.VBA 快速删除重复记录 日常工作中的工作表中经常会有重复记录,清除这些重复记录是一个繁琐的工作,即使在排序之后再进行手工筛选,也经常会出现遗漏,而使用VBA代码就可以快速准确地删除重复记录。 待处理数据如下: 列1列2111223233536 功能实现步骤如下: 1、快捷键Alt+F11打开VBA界面,打开"插入"菜单,插入模块,输入如下代码: Sub RemoveD

yihui8的专栏 1万+

两种实用方法删除 Excel 重复行:Python + VBA

Excel 去重实用指南(Python/VBA) 本文提供两种高效删除 Excel 重复行的方法: Python(pandas):适合批量处理、复杂逻辑,支持多列组合去重(代码示例包含保留首/末条记录功能) VBA 宏:无需安装,快速操作(附完整代码及修改说明) 对比建议: 日常临时处理用 VBA(Alt+F11粘贴代码即可) 批量/自动化任务用 Python(处理百万级数据更优) 两种方法均提供完整代码模板,可根据实际需求调整列组合、保留规则等参数。2026年最新验证有效,适用于各类办公场景。

likuolei的博客 656

使用二维数组和字典去重,VBA对应转换Excel工作表行、列数据

使用二维数组和字典去重,VBA对应转换Excel工作表行、列数据

BeijixingVBA的博客 1228

VBA 利用字典去重

Sub 利用字典去重() Dim aOld, aNew, Dic '声明数组、字典 Dim i As Long Dim sOld, sNew As String '声明字符串 Set Dic = CreateObject("scripting.dictionary") '创建字典 sOld = "a b c 1 2 1 a c d" '旧字符 aOl...

风转砂的博客 7369

Microsoft VBA Excel 去重小工具

啦啦啦

RandPython的博客 814
上一篇: Microsoft VBA Excel 规律的Text文件转工作表Sheet
下一篇: Microsoft VBA Excel 去重小工具
偷心伊普西隆
博客等级 码龄7年 511粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值