EXCEL——VBA字典實現(xiàn)查找多列的重復(fù)項

animal-3239706_640.jpg

顧得貓寧,各位親愛的讀者。今天我們來講一講VBA編程中一個重要的知識點——字典。為了更好的讓大家理解字典是什么意思,我整理了網(wǎng)上一位大??偨Y(jié)的字典相關(guān)知識,特此給大家轉(zhuǎn)載過來,希望大家有所收獲。

  • 字典相關(guān)知識解析(通俗易懂,更是精華)
  1. 定義字典
    Set d = CreateObject("Scripting.Dictionary")

  2. 呼之即來,揮之即去

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;麻子=“”

  1. 將字典里的東西變成數(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)=“”

  1. 查找字典中有沒有這個人
    s=d.Exists(“張三”) 's=True 有的
    s=d.Exists(“彭希遴”) 's=False 沒有

  2. 清空數(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é)果如下:


3月-20-2018 20-20-36.gif

希望能幫到大家~

~如果對本文有疑問,請聯(lián)系作者哦
animal-3239706_640.jpg

~
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容