绑定dictionary 给定关键字不再字典中_【Excel VBA】使用字典快速对数据去重

哈罗,我是星光,话说数据去重复一直是数据整理过程中常见的问题之一,Excel解决方法有【删除重复项】、【高级筛选】、【数据透视表】、SQL语句、VBA的字典和集合等等……各有所长也各有所短。 说正事儿……今天和大家分享的方法是VBA的字典法……。 举个栗子。 如下图所示,A列是一些数据,可能存在重复值,需要在C列得出不重复值,并告知不重复值的个数。 f7c6cc3478a5fe5fd05d5f0afe4dc4df.png 代码如下:
Sub Mydistinct()    'vba编程学习与实践~看见星光    Dim d As Object, arr, brr, i&, k&, s$    Set d = CreateObject("scripting.dictionary")    '后期引用字典    'd.CompareMode = vbTextCompare    '不区分字母大小写    arr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).Row)    '数据源装入数组arr    ReDim brr(1 To UBound(arr), 1 To 1)    '声明一个数组brr放结果。    For i = 2 To UBound(arr)    '标题行不要,从第2行开始遍历        s = arr(i, 1)        '强制将数据转换成字符串类型,原因见小贴士        If Not d.exists(s) Then            d(s) = ""            '如果字典中不存在s,则作为关键字装入字典            k = k + 1            '累加个数            brr(k, 1) = arr(i, 1)            '装入结果数组        End If    Next    [c:c].ClearContents    [c1] = "结果"    With [c2].Resize(k, 1)        .NumberFormat = "@"        '设置文本格式,防止某些文本数值变形        .Value = brr    End With    MsgBox "一共为你提取了:" & k & "个不重复值。"    Set d = Nothing    '释放字典End Sub
 运算结果: 7dfcb1b91d4e369bff5e8138bb7f1466.png 小贴士: 1, 该段代码区分字母大小写,即A和a并不重复,如果需要不区分字母大小写,解除代码中下面语句的注释块。
d.CompareMode = vbTextCompare
2, 代码中有一句s = arr(i, 1),意思是将数据类型转换为字符串变量s。之所以这么操作,是因为字典关键字认为数值和文本型数值是不相等的,举个例子,如下图,数值123和文本123,字典认为并不重复。 8dcca291694838e1542ae31b5c0fde75.png
另外,即便数据区域的数值不存在文本型数值,也建议将之强制转换为字符串类型。 举个例子,点击【阅读原文】可以获取一个示例文件,该示例文件的A列存在大量重复数值,但不论【删除重复项】还是【高级筛选】,均不能准确数据去重,如果不将数值类型转换为字符串,字典同样也不能准确去重,不信,你就测试看看呗~ 握爪,致安,下期见~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值