數據處理VBA篇:字典基礎概念


在我們的學習生涯中,每個人或多或少地都用過字典,像新華字典,英語字典等等,所以想必對字典都有印象。我們可以回顧一下,自己是怎么使用字典的?是不是先去檢字表查找我們需要解釋的字,然后再去字典正文去查找那個字的意思。
在VBA中,也有這么一個字典,它也像我們用過的紙質字典一樣,用鍵值對(key:item)來表示。鍵可以理解為新華字典檢字表中的關鍵字,而值呢可以理解為對關鍵字的解釋。它也是VBA種的一種對象。
在VBA字典中,有4個屬性和6種方法,相對其它的對象要簡潔得多,而且容易理解,使用方便,功能強大,運行速度非常快,效率極高,深受大家的喜愛。

 
字典.png

接下來,我們來分別熟悉一下這些屬性和方法。


1. 方法

1.1 Add

向Dictionary對象中添加一個關鍵字項目對。
object.Add (key,item)
參數
object必選項。總是一個Dictionary對象的名稱。
key必選項。與被添加的item相關聯的key。
item必選項。與被添加的key相關聯的item。

說明
如果key已經存在,那么將導致一個錯誤。

常用語句:

Dim dic
Set dic = CreateObject("Scripting.Dictionary") dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" 

代碼詳解
1、Dim dic:創建變量,也稱為聲明變量。變量dic聲明為可變型數據類型(Variant),dic后面沒有寫數據類型,默認就是可變型數據類型(Variant)。也有寫成Dim dic As Object的,聲明為對象。
2、Set dic = CreateObject("Scripting.Dictionary"):創建字典對象,並把字典對象賦給變量dic。
3、dic.Add "a", "蘋果":添加一關鍵字”a”和對應於它的項”蘋果”。
4、dic.Add "b", "香蕉":添加一關鍵字”b”和對應於它的項”香蕉”。
5、dic.Add "c", "雪梨":添加一關鍵字”c”和對應於它的項”雪梨”。

1.2 Exists

如果Dictionary對象中存在所指定的關鍵字則返回true,否則返回false。
object.Exists(key)

參數
object必選項。總是一個Dictionary對象的名稱。
key必選項。需要在Dictionary對象中搜索的key值。

常用語句:

Dim dic, msg$ Set dic = CreateObject("Scripting.Dictionary") dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" If dic.Exists("c") Then msg = "指定的關鍵字已經存在。" Else msg = "指定的關鍵字不存在。" End If 

代碼詳解
1、Dim dic, msg$:聲明變量,dic見前例;msg$聲明為字符串數據類型(String),一般寫法為Dim msg As String。String的類型聲明字符為美元號($)。
2、If dic.Exists("c") Then:如果字典中存在關鍵字”c”,那么執行下面的語句。
3、msg = "指定的關鍵字已經存在。":把"指定的關鍵字已經存在。"字符串賦給變量msg。
4、Else:否則執行下面的語句。
5、msg = "指定的關鍵字不存在。":把"指定的關鍵字不存在。"字符串賦給變量msg。
6、End If:結束If …Else…End if判斷。

1.3 Keys

返回一個數組,其中包含了一個 Dictionary 對象中的全部現有的關鍵字。
object.Keys
其中 object 總是一個 Dictionary 對象的名稱。
常用語句:

Dim dic, k Set dic = CreateObject("Scripting.Dictionary") dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" k=dic.Keys [A1].Resize(dic.Count,1)=Application.Transpose(k) 

代碼詳解
1、Dim dic, k :聲明變量,dic見前例;k默認是可變型數據類型(Variant)。
2、k=dic.Keys:把字典中存在的所有的關鍵字賦給變量k。得到的是一個一維數組,下限為0,上限為d.Count-1。這是數組的默認形式。
3、[A1].Resize(dic.Count,1)=Application.Transpose(k) :Resize是Range對象的一個屬性,用於調整指定區域的大小,它有兩個參數,第一個是行數,本例是dic.Count,指的是字典中關鍵字的數量,整本字典中有多少個關鍵字,本例dic.Count=3,因為有3個關鍵字。
第二個是列數,本例是1。這樣=左邊的意思就是:把一個單元格A1調整為以A1開始的一列單元格區域,行數等於字典中關鍵字的數量d.Count,就是把單元格A1調整為單元格區域A1:A3了。
=右邊的k是個一維數組,是水平排列的,我們知道Excel工作表函數里面有個轉置函數Transpose,用它可以把水平排列的置換成豎向排列。但是在VBA中不能直接使用該工作表函數,需要通過Application對象的WorksheetFunction屬性來使用它。所以完整的寫法是Application. WorksheetFunction.Transpose(k),中間的WorksheetFunction可省略。現在可以解釋這句代碼了:把字典中所有的關鍵字賦給以B1單元格開始的單元格區域中。

1.4 Items

返回一個數組,其中包含了一個 Dictionary 對象中的所有項目。
object.Items
其中 object 總是一個 Dictionary 對象的名稱。

常用語句:

Dim dic, t Set dic = CreateObject("Scripting.Dictionary") dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" t=dic.Items [B1].Resize(d.Count,1)=Application.Transpose(t) 

代碼詳解
1、Dim dic, t :聲明變量,dic見前例;t默認是可變型數據類型(Variant)。
2、t=dic.Items :把字典中所有的關鍵字對應的項賦給變量t。得到的也是一個一維數組,下限為0,上限為d.Count-1。這是數組的默認形式。
3、[B1].Resize(d.Count,1)=Application.Transpose(t) :有了上面Keys方法的解釋這句代碼就不用多說了,就是把字典中所有的關鍵字對應的項賦給以B1單元格開始的單元格區域中。

1.5 Remove

Remove 方法從一個 Dictionary 對象中清除一個關鍵字,項目對。
object.Remove(key )
其中 object 總是一個 Dictionary 對象的名稱。
key必選項。key 與要從 Dictionary 對象中刪除的關鍵字,項目對相關聯。

說明
如果所指定的關鍵字,項目對不存在,那么將導致一個錯誤。

常用語句:

Dim dic
   Set dic = CreateObject("Scripting.Dictionary") dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" …… d.Remove(“b”) 

代碼詳解
1、d.Remove(“b”):清除字典中”b”關鍵字和與它對應的項。清除之后,現在字典里只有2個關鍵字了。

1.6 RemoveAll

RemoveAll 方法從一個 Dictionary 對象中清除所有的關鍵字,項目對。
object.RemoveAll
其中 object 總是一個 Dictionary 對象的名稱。
常用語句:

Dim d
 Set dic = CreateObject("Scripting.Dictionary") dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" …… d.RemoveAll 

代碼詳解
1、d.RemoveAll:清除字典中所有的數據。也就是清空這字典,然后可以添加新的關鍵字和項,形成一本新字典。



2.屬性

2.1 count

返回一個Dictionary 對象中的條目數。只讀屬性。
object.Count
其中 object是一個字典對象的名稱。
常用語句:

   Dim dic,i% Set dic = CreateObject("Scripting.Dictionary") dic.Add "1", "蘋果" dic.Add "2", "香蕉" dic.Add "3", "雪梨" i = dic.Count 

代碼詳解
1、Dim dic, i% :聲明變量;n被聲明為整型數據類型(Integer)。一般寫法為Dim i As Integer 。 Integer 的類型聲明字符為百分比號 (%)。
2、i = dic.Count :把字典中所有的關鍵字的數量賦給變量n。本例得到的是3。


2.2 key

在Dictionary對象中設置一個key。
object.Key(key) =newkey
參數:object必選項。總是一個字典(Dictionary)對象的名稱。
key,必選項。被改變的key值。
newkey,必選項。替換所指定的key的新值。
說明:如果在改變一個key時沒有發現該key,那么將創建一個新的key並且其相關聯的item被設置為空。
常用語句:

   Dim dic
   Set dic = CreateObject("Scripting.Dictionary") dic.Add "1", "蘋果" dic.Add "2", "香蕉" dic.Add "3", "雪梨" d.Key("1") = "4" 

代碼詳解:
1、d.Key("1") = "4":用新的關鍵字”4”來替換指定的關鍵字”1”,這時,字典中就沒有關鍵字1了,只有關鍵字4了,與4對應的項是”蘋果”。


2.3 item

在一個Dictionary對象中設置或者返回所指定key的item。對於集合則根據所指定的key返回一個item。讀/寫。
object.Item(key)[ =newitem]

參數
object 必選項。總是一個Dictionary 對象的名稱。
key必選項。與要被查找或添加的
item相關聯的key。
newitem可選項。僅適用於Dictionary對象;newitem就是與所指定的key相關聯的新值。

說明
如果在改變一個key的時候沒有找到該item,那么將利用所指定的newitem創建一個新的key。如果在試圖返回一個已有項目的時候沒有找到key,那么將創建一個新的key且其相關的項目被設置為空。

常用語句:

Dim dic
   Set dic = CreateObject("Scripting.Dictionary") dic.Add "1", "蘋果" dic.Add "2", "香蕉" dic.Add "3", "雪梨" MsgBox dic.Item("3") 

代碼詳解
1、dic.Item("3"):獲取指定的關鍵字”3”對應的項。
2、MsgBox :是一個VBA函數,用消息框顯示。


2.4 CompareMode屬性

設置或者返回在Dictionary對象中進行字符串關鍵字比較時所使用的比較模式。
object.CompareMode[ =compare]
參數
object必選項。總是一個Dictionary對象的名稱。
compare可選項。如果提供了此項,compare就是一個代表比較模式的值。可以使用的值是0 (二進制)、1 (文本), 2 (數據庫)。

說明
如果試圖改變一個已經包含有數據的Dictionary對象的比較模式,那么將導致一個錯誤。

常用語句:

Dim dic
   Set dic = CreateObject("Scripting.Dictionary") dic.CompareMode = vbTextCompare dic.Add "a", "蘋果" dic.Add "b", "香蕉" dic.Add "c", "雪梨" dic.Add " B ", " 火龍果" 

代碼詳解
1、dic.CompareMode = vbTextCompare :設置字典的比較模式是文本,在這種比較模式下不區分關鍵字的大小寫,即關鍵字”b”和”B”是一樣的。vbTextCompare的值為1,所以上式也可寫為dic.CompareMode =1。如果設置為vbBinaryCompare(值為0),則執行二進制比較,即區分關鍵字的大小寫,此種情況下關鍵字”b”和”B”被認為是不一樣的。
2、dic.Add " B ", " 火龍果":添加一關鍵字”B”和對應於它的項”火龍果”。由於前面已經設置了比較模式為文本模式,不區分關鍵字的大小寫,即關鍵字”b”和”B”是一樣的,此時發生錯誤添加失敗,因為字典中已經存在”b”了,字典中的關鍵字是唯一的,不能添加重復的關鍵字。

下次就講一點字典的實際運用。

 
 
23人點贊
 
 


作者:鳴人吃土豆
鏈接:https://www.jianshu.com/p/d36a0b907883
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM