
顧得貓寧,各位親愛的讀者。今天我們來講一講VBA編程中一個重要的知識點——字典。為了更好的讓大家理解字典是什么意思,我整理了網(wǎng)上一位大??偨Y(jié)的字典相關(guān)知識,特此給大家轉(zhuǎn)載過來,希望大家有所收獲。
- 字典相關(guān)知識解析(通俗易懂,更是精華)
定義字典
Set d = CreateObject("Scripting.Dictionary")呼之即來,揮之即去
d("張三“)=1 '相當(dāng)于給字典賦值,張三過來(沒有就生成)拿個1站一邊去
d("李四”)=2 '相當(dāng)于給字典賦值,李四過來(沒有就生成)拿個2站一邊去
d("李四”)=3 '相當(dāng)于改變值,字典中已經(jīng)有李四了,李四跑過來,丟下2換個3站一邊去
注:這時字典中有兩個人的存在,張三=1 和 李四=3,相當(dāng)于實現(xiàn)了去重復(fù)的功能
s=d("張三") 's=1 即叫了聲張三,張三就告訴你他拿的是1
s=d("李四") 's=3 即叫了聲李四,李四就告訴你他拿的是3
s=d("麻子") 's="" 沒有找到麻子怎么辦呢,字典里就自動生成一個麻子d("麻子") =“”,告訴你他手上是空的
注:這時字典中有三個人的存在,張三=1 ; 李四=3;麻子=“”
- 將字典里的東西變成數(shù)組
arr= d.Keys '把名字的集合按先來后到的原則放到一維數(shù)組里 arr(0)=“張三” ; arr(1)=“李四” ; arr(2)=“麻子”
arr1=d.Items '把名字對應(yīng)的值的集合按先來后到的原則放到一維數(shù)組里 arr1(0)=“1” ; arr1(1)=“3” ; arr1(2)=“”
查找字典中有沒有這個人
s=d.Exists(“張三”) 's=True 有的
s=d.Exists(“彭希遴”) 's=False 沒有清空數(shù)組
d.RemoveAll
注:上文出處為http://club.excelhome.net/thread-926188-1-1.html本文只做學(xué)習(xí)轉(zhuǎn)載使用,如侵必刪,有異議請聯(lián)系作者
-
下面我們找個具體的例子來運用一下
比如下面兩列數(shù)據(jù),我們要通過VBA代碼來實現(xiàn)將兩列都重復(fù)的行高亮出來。這個時候應(yīng)該怎么辦呢?
image.png
我們通過字典就可以實現(xiàn)解決這個問題,下面我們看一下代碼:
Sub 雙列查找重復(fù)項()
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
在上面的代碼中,首先,我們創(chuàng)建了一個字典
Set d = CreateObject("scripting.dictionary")
然后Application.ScreenUpdating = False是為了讓代碼運行更快速。
下面這一行是對字典中進行賦值,當(dāng)沒有重復(fù)值的時候,賦值都為1,而當(dāng)有重復(fù)值的時候,值就會大于1
For j = 2 To UBound(arr)
d(arr(j, 1) & arr(j, 2)) = 1 + d(arr(j, 1) & arr(j, 2))
Next
最后,再次對字典的值進行遍歷并條件判斷,即可判斷哪些是重復(fù)的值,其對應(yīng)的行的單元格高亮即可
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
最后得到的結(jié)果如下:

希望能幫到大家~

~
