最近寫了一些小功能,對(duì)字典有了進(jìn)一步的理解,太強(qiáng)大了! 個(gè)人最近用過的字典應(yīng)用有這么幾個(gè),,寫下來防止自己忘~同時(shí)方便大家 一,、查找重復(fù)行 【原理】利用字典的exist方法,將數(shù)據(jù)加入字典時(shí)判斷一下,,如果已經(jīng)存在,,就說明當(dāng)前數(shù)據(jù)為重復(fù)數(shù)據(jù),,應(yīng)該刪除 【示例代碼】 Sub chongfu() '查重
Dim i As Long
Dim endline As Long '定義工作表長度變量
endline = Sheet3.Range("A30000").End(xlUp).Row '獲取工作表Sheet3有數(shù)據(jù)的最后一行行號(hào)
Set d = CreateObject("scripting.dictionary") '設(shè)定字典d
For i = endline To Step - '從最后一行開始,,依次把各個(gè)字段拼接到一起(注意,,這里我的需求是這幾個(gè)字段拼在一起的字符串不允許重復(fù),,因此我先拼接再判重)
'把所有字符串拼接到數(shù)組里
If Sheet3.Cells(i, ) <> "" Then '判斷該行是否為空
If IsError(Sheet3.Cells(i, )) = False Then '如果關(guān)鍵單元格不是#N/A,,則進(jìn)入字典設(shè)置
x = Sheet3.Cells(i, ) '******************設(shè)置賦給字典的變量,即需要去重的單元格!*******************
If Not d.Exists(x) Then '判斷是否重復(fù)
d(x) = x '如果不重復(fù),,則把x定為item
Else
Sheet3.Rows(i & ":" & i).Delete Shift:=xlUp '如果字典中已有對(duì)應(yīng)的item,,則該行重復(fù),刪除重復(fù)的行
End If
End If
End If
Next
End Sub 【效果展示】 二,、查找關(guān)鍵字 【原理】最常見的應(yīng)用,,根據(jù)key來查找對(duì)應(yīng)的item 【示例代碼】 Sub DicFind() '查找編號(hào)對(duì)應(yīng)的數(shù)據(jù)
endline = Sheet3.Range("E100000").End(xlUp).Row '獲取待匹配的數(shù)據(jù)區(qū)域長度
Set d = CreateObject("Scripting.Dictionary") '設(shè)置字典d
Arr = Sheet3.Range("A2:B26975") '獲得字典數(shù)據(jù)
For i = To UBound(Arr) '設(shè)置sheet3 A列為字典關(guān)鍵字key,B列為字典關(guān)鍵字對(duì)應(yīng)的值(item)
If Arr(i, ) <> "" Then '當(dāng)A列不為空時(shí),,將item裝入數(shù)組
x = Arr(i, ) '想以哪一列為關(guān)鍵字查找結(jié)果,,就把x設(shè)置成哪一列的單元格
d(x) = Arr(i, )
Else
Exit For 'A列為空時(shí),退出for循環(huán)
End If
Next
Brr = Sheet3.Range("$E$2:$F$" & endline) '將待查找的數(shù)據(jù)放入數(shù)組
For j = To UBound(Brr)
x = Brr(j, ) '將E列的編號(hào)設(shè)為key
If d.Exists(x) Then '如果字典中有對(duì)應(yīng)的item,,則將item寫入數(shù)組brr
Brr(j, ) = d(x) '把查找到的item寫入brr,,這里對(duì)應(yīng)F列
End If
Next
Sheet3.Range("$E$2:$F$" & endline) = Brr '將匹配好的數(shù)據(jù)寫回單元格
End Sub 【效果展示】 建設(shè)中。,。,。,。。,。之后想起來就更新~
|