顾得猫宁,各位亲爱的读者。今天我们来讲一讲VBA编程中一个重要的知识点——字典。为了更好的让大家理解字典是什么意思,我整理了网上一位大牛总结的字典相关知识,特此给大家转载过来,希望大家有所收获。
- 字典相关知识解析(通俗易懂,更是精华)
定义字典
Set d = CreateObject("Scripting.Dictionary")呼之即来,挥之即去
d("张三“)=1 '相当于给字典赋值,张三过来(没有就生成)拿个1站一边去
d("李四”)=2 '相当于给字典赋值,李四过来(没有就生成)拿个2站一边去
d("李四”)=3 '相当于改变值,字典中已经有李四了,李四跑过来,丢下2换个3站一边去
注:这时字典中有两个人的存在,张三=1 和 李四=3,相当于实现了去重复的功能
s=d("张三") 's=1 即叫了声张三,张三就告诉你他拿的是1
s=d("李四") 's=3 即叫了声李四,李四就告诉你他拿的是3
s=d("麻子") 's="" 没有找到麻子怎么办呢,字典里就自动生成一个麻子d("麻子") =“”,告诉你他手上是空的
注:这时字典中有三个人的存在,张三=1 ; 李四=3;麻子=“”
- 将字典里的东西变成数组
arr= d.Keys '把名字的集合按先来后到的原则放到一维数组里 arr(0)=“张三” ; arr(1)=“李四” ; arr(2)=“麻子”
arr1=d.Items '把名字对应的值的集合按先来后到的原则放到一维数组里 arr1(0)=“1” ; arr1(1)=“3” ; arr1(2)=“”
查找字典中有没有这个人
s=d.Exists(“张三”) 's=True 有的
s=d.Exists(“彭希遴”) 's=False 没有清空数组
d.RemoveAll
注:上文出处为http://club.excelhome.net/thread-926188-1-1.html本文只做学习转载使用,如侵必删,有异议请联系作者
-
下面我们找个具体的例子来运用一下
比如下面两列数据,我们要通过VBA代码来实现将两列都重复的行高亮出来。这个时候应该怎么办呢?
我们通过字典就可以实现解决这个问题,下面我们看一下代码:
Sub 双列查找重复项()
arr = [a1].CurrentRegion
Set d = CreateObject("scripting.dictionary")
Application.ScreenUpdating = False
For j = 2 To UBound(arr)
d(arr(j, 1) & arr(j, 2)) = 1 + d(arr(j, 1) & arr(j, 2))
Next
For j = 2 To UBound(arr)
If (d(arr(j, 1) & arr(j, 2))) > 1 Then
Cells(j, 1).Resize(1, 2).Interior.ColorIndex = 3
End If
Next
Application.ScreenUpdating = True
End Sub
在上面的代码中,首先,我们创建了一个字典
Set d = CreateObject("scripting.dictionary")
然后Application.ScreenUpdating = False
是为了让代码运行更快速。
下面这一行是对字典中进行赋值,当没有重复值的时候,赋值都为1,而当有重复值的时候,值就会大于1
For j = 2 To UBound(arr)
d(arr(j, 1) & arr(j, 2)) = 1 + d(arr(j, 1) & arr(j, 2))
Next
最后,再次对字典的值进行遍历并条件判断,即可判断哪些是重复的值,其对应的行的单元格高亮即可
For j = 2 To UBound(arr)
If (d(arr(j, 1) & arr(j, 2))) > 1 Then
Cells(j, 1).Resize(1, 2).Interior.ColorIndex = 3
End If
Next
最后得到的结果如下:
希望能帮到大家~
~