Excel VBA 8.5获取唯一值,听说你喜欢用字典

获取唯一值,听说你喜欢用字典


点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


再之前我们分享获取数据唯一值的时候,很多的小伙伴都觉得其他的方式都不算是最简单的,觉得用字典是最简单的方法,其实这个问题也没有绝对的定论,不过本着学习的心态,我们这里也来分享下通过字典的方式来获取数据唯一值的方法,继续扩展下我们的方法库

场景说明

这里我们还是利用之前的数据源,昨天我们是通过了集合的方式来得到唯一值的,今天我们来通过字典的方式,这里我们先来学习下如何通过单列的唯一值的方式。主要掌握了单列的唯一值的获取的方法,后面根据多列来或获取唯一值就很容易理解了。

代码区

Sub dan()Dim rng As Range, arr, zd As Object, arr1Set zd = CreateObject("scripting.dictionary")Set rng = Application.InputBox("请选择数据区", "数据区", , , , , , 8)arr = rngk = 0For i = 1 To UBound(arr) If Not zd.Exists(arr(i, 1)) Then zd.Add arr(i, 1), 1 End IfNext iarr1 = zd.keys()CountN = zd.CountRange("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,准时再见!

因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。

(0)

相关推荐