Excel VBA 8.5获取唯一值,听说你喜欢用字典
获取唯一值,听说你喜欢用字典
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
再之前我们分享获取数据唯一值的时候,很多的小伙伴都觉得其他的方式都不算是最简单的,觉得用字典是最简单的方法,其实这个问题也没有绝对的定论,不过本着学习的心态,我们这里也来分享下通过字典的方式来获取数据唯一值的方法,继续扩展下我们的方法库
场景说明
这里我们还是利用之前的数据源,昨天我们是通过了集合的方式来得到唯一值的,今天我们来通过字典的方式,这里我们先来学习下如何通过单列的唯一值的方式。主要掌握了单列的唯一值的获取的方法,后面根据多列来或获取唯一值就很容易理解了。
代码区
Sub dan()
Dim rng As Range, arr, zd As Object, arr1
Set zd = CreateObject("scripting.dictionary")
Set rng = Application.InputBox("请选择数据区", "数据区", , , , , , 8)
arr = rng
k = 0
For i = 1 To UBound(arr)
If Not zd.Exists(arr(i, 1)) Then
zd.Add arr(i, 1), 1
End If
Next i
arr1 = zd.keys()
CountN = zd.Count
Range("E2").Resize(CountN, 1) = WorksheetFunction.Transpose(arr1)
End Sub
来看看代码的效果。
这里我们要实现的效果是获取A列,也就是性名列的唯一值,一起来看看
为了更好的展示效果,我们这里讲昨天学习过的集合的方式也一起进行效果的展示,可以看到得出的结果是一样的
代码解析
一起来分析下今天的代码
我们今天使用的是字典,这里我们就来大致的说下字典。
字典就和我们现在使用的汉语词典是一样的,每个汉字只会出现一次,利用字典的这个特点,我们也可以去获取唯一值
不过字典在使用之前一定要声明,所以这里我们需要先申明一个字典
Set zd = CreateObject("scripting.dictionary")
有了字典之后,我们就可以往字典中添加内容了,而字典里面的内容需要两个部分,一个就是键,一个就是值,合起来统称键值对
就好比字典中,一个汉字,他就是键,而汉字的解释,他就是他对应的值,这样大家应该比较好理解了。
那么如何添加呢?
zd.Add arr(i, 1), 1
是不是所有的数据都可以直接添加上去呢?不是的,因为字典的唯一性,如果你添加的数据有重复的话,那么就会报错的,这个时候我们其实可以利用错误的处理,忽略错误,不断的添加下去的;不过为了后续内容的展开,这里我们利用判断是存在的方式来进行
If Not zd.Exists(arr(i, 1)) Then
如果不存在字典中,才会去添加,如果已经存在的话,就不会再次添加了。
依照上面的动图,大家也可以看到,如果键是一样的,那么他是会跳过添加这个步骤的。
然后当全部的数据都添加完成之后,我们就可以通过
arr1 = zd.keys()
获得字典的数据所有的键,这里我们只需要键的唯一值,并不需要键所对应的值的内容,所以只需要keys(),如果想要获得对应的键值的内容,只需要将keys换成items就可以了。
后面就是数组的转置了,这里在经过了之前工作簿,工作表两大系列的学习之后,相信大家应该都非常的熟悉了
==========================
本节课的案例源码已经上传,需要的小伙伴后台私信“8-5-S2”,希望大家多支持~~,多多关注 ~ ~
好了,明晚21:00,准时再见!
因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。