VBA 字典使用小結:關鍵字循環

一、字典的基本知識

字典是一種封裝有屬性和方法的對象,簡單理解:字典其實就是一些“鍵-值”對。

字典相當於一個多行二列的二維數組或單元格數據區域。

字典數據結構有兩個很重要的特性:

I key(鍵)不允許重複。當給字典元素賦值時,不存在key時可以新建,存在key時可以更新值。

II 數據元素通過key進行索引,我們知道,數據是通過下標進行索引的,所以順序很重要。而字典是通過key進行索引的,所以不考慮元素順序。通過key進行索引,在特定的場合,有它的優勢所在。

應用場合:

1、對一列數據提取唯一值;

2、進行分類彙總;

3、多條件複雜彙總等。

二、聲明字典

VBA中創建字典有兩種方法:

2.1 引用聲明(前期綁定)

在VBE菜單中,選擇“工具-引用”,在彈出的對話框中選擇中邊的“瀏覽”,此時會打開Windows系統的驅動目錄(C:\Windows\System32),然後找到scrrun.dll,確定確定返回就行了。

添加引用後,就可以像定義其它變量一樣聲明使用字典了。

Sub test()

Shell ('Regsvr32 C:\Windows\System32\Scrrun.dll') 'Dos 下運行註冊DLL

'Toos -> References -> Microsoft Scripting Runtime 'VBE中工具、引用

Dim dic As New Dictionary '前期綁定後就可以直接定義字典類型變量並初始化

For i = 1 To 10

dic(i) = i * 10

Next

t1 = dic.keys(2) '然後就可以直接讀取第3個字典元素的關鍵詞(注意字典數組下標是0開始)

t2 = dic.Items(2) '同樣可以直接讀取第3個字典元素的項目內容(注意字典數組下標是0開始)

End Sub

2.2 直接聲明(後期綁定)

Dim d As Object

Set d = CreateObject("Scripting.Dictionary")

注:前期綁定的好處是:在代碼編寫過程中,可以直觀的看到對象的屬性,方法等。

       後期綁定的好處是:代碼簡單明瞭。

三、 字典的方法

字典有6個成員方法:Add、Exists、Keys、Items、Remove、RemoveAll。使用方法如下:

3.1 Add  用於添加內容到字典中。

方法一:d.Add key, item  第一個參數爲鍵,第二個參數爲鍵對應的值。如d.Add '優秀', 80

方法二:d(key) = item  直接賦值的方式來把內容添加到字典中,如:dic('及格') = 60

'Add [key/item] if key is new

'如果key不存在則直接加入[key/item]

dic('及格') = 70

'Cover [item] if key is exists without Err

'如果key存在則覆蓋更新item 且不產生key存在的錯誤提示

'因此本質上,用這個方法給字典賦值、比使用 Dic.Add, item 更好!

'如需要對key存在進行錯誤處理,可使用Dic.Exists(key)方法,更加靈活。

3.2 Exists()  用於判斷指定的關鍵詞是否存在於字典(的鍵)中。

d.Exists(key)   如果存在,返回True,否則返回False。通常會在向字典中添加條目的時候使用,即先判斷字典中是否已存在這個記錄,如果不存在則新增,否則進行其它的操作。

3.3 Keys()

d.Keys()  獲取字典所有的鍵,返回類型是數組(數組下標從0開始)。

字典使用for each next結構進行遍歷時,返回的是key。

For Each di In d'也可以寫成For Each di In d.keys

k = k + 1

Cells(k, 15) = dic(di)

Next

3.4 Items()

d.Items() 獲取字典所有的值,返回類型是數組。

3.5 Remove()

d.Remove(key) 從字典中移除一個條目,是通過鍵來指定的。

如果指定的鍵不存在,會發生錯誤。

3.6 RemoveAll

d.RemoveAll 清空字典。

 

四、 字典的屬性

字典有4個屬性:Count、Key、Item、ConpareMode。

4.1 Count

用於統計字典中鍵-值對的數量。也可以簡單理解爲統計字典中鍵的個數。

常用在字典遍歷時配合循環使用,如:

For i = 0 To d.Count - 1

4.2 Key

用於更改字典中已有的鍵。如:

d.Key('apple') = 'Orange'

如果指定的鍵不存在,則會產生錯誤。

4.3 Item

用於寫入或讀取字典中指定鍵的值,如果指定的鍵不存在,則會新增。如:

'讀取

Debug.Print d.Item('apple')

'寫入

d.Item('apple') = 10

4.4 CompareMode

當用字符串做爲key時是否區分大小寫,如 Dic.CompareMode=1不區分大小寫,Dic.CompareMode=0區分大小寫

默認不寫是區分的。

Sub test10()

Dim dic

Set dic = CreateObject('Scripting.Dictionary')

dic.Add 'D', 0

dic.Add 'd', 0

'因爲默認的是區域大小寫的,所以不報錯

End Sub

Sub test11() '不區分大小寫,

Dim dic

Set dic = CreateObject('Scripting.Dictionary') '後期綁定引用字典對象

dic.CompareMode = 1

dic.Add 'D', 0

dic.Add 'd', 0

'上面的代碼報錯了,因爲dic.CompareMode = 1不區分大小寫,所以

'你裝後大寫的D之後,再裝小寫的d,重裝了,報錯

End Sub

五 、總結一下:字典元素的添加、訪問

任何語言的複合數據類型,做爲一種數據元素容器,都要考慮數據元素的增、查、刪、改,並用適當的成員方法封裝起來。

5.1 字典元素的添加

d.Add 'a', 'example1'

d.Add 'b', 9

'd.Add 'b', 7 'add重複key會報錯

d('b') = 7 '這樣會直接覆蓋,不會報錯

'd.Item('b') = 7 '與上者相同

d('c') = 'example2'

5.2 字典元素值通過key的訪問

Cells(1, 1) = d('a')

'Cells(1, 1) = d.Item('a') '與上者相同

六、 字典映射到單元格區域

由於字典的keys/items爲按水平方向排列的一維數組,在將數據存到excel表格中時,應使用transpose函數進行行列轉換.

'把字典中keys/items結果分別輸出到工作表的某一列

[a1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.keys) 'Output keys result

[b1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.items) 'Output items result

七 、實例應用

 

鏈接:https://pan.baidu.com/s/10GzgIVNTGrti8RQAqvUofw 
提取碼:ybh3 
複製這段內容後打開百度網盤手機App,操作更方便哦

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章