當前位置:成語大全網 - 成語詞典 - 如何在Excel VBA中使用字典Dictionary對象

如何在Excel VBA中使用字典Dictionary對象

前言

凡是上過學校的人都使用過字典,從新華字典、成語詞典,到英漢字典以及各種各樣數不勝數的專業字典,字典是上學必備的、經常查閱的工具書。有了它們,我們可以很方便的通過查找某個關鍵字,進而查到這個關鍵字的種種解釋,非常快捷實用。

凡是上過EH論壇的想學習VBA裏面字典用法的,幾乎都看過研究過northwolves狼版主、oobird版主的有關字典的精華貼和經典代碼。我也是從這裏接觸到和學習到字典的,在此,對他們表示深深的謝意,同時也對很多把字典用得出神入化的高手們致敬,從他們那裏我們也學到了很多,也得到了提高。

字典對象只有4個屬性和6個方法,相對其它的對象要簡潔得多,而且容易理解使用方便,功能強大,運行速度非常快,效率極高。深受大家的喜愛。

本文希望通過對壹些字典應用的典型實例的代碼的詳細解釋來給初次接觸字典和想要進壹步了解字典用法的朋友提供壹點備查的參考資料,希望大家能喜歡。

給代碼註釋估計是大家都怕做的,因為往往是出力不討好的,稍不留神或者自己確實理解得不對,還會貽誤他人。所以下面的這些註釋如果有不對或者不妥當的地方,請大家跟帖時指正批評,及時改正。

字典的簡介

字典(Dictionary)對象是微軟Windows腳本語言中的壹個很有用的對象。

附帶提壹下,有名的正則表達式(RegExp)對象和能方便處理驅動器、文件夾和文件的(FileSystemObject )對象也是微軟Windows腳本語言中的壹份子。

字典對象相當於壹種聯合數組,它是由具有唯壹性的關鍵字(Key)和它的項(Item)聯合組成。就好像壹本字典書壹樣,是由很多生字和對它們對應的註解所組成。比如字典的“典”字的解釋是這樣的:

“典”字就是具有唯壹性的關鍵字,後面的解釋就是它的項,和“典”字聯合組成壹對數據。

常用關鍵字英漢對照:

Dictionary 字典

Key 關鍵字

Item 項,或者譯為 條目

字典對象的方法有6個:Add方法、Keys方法、Items方法、Exists方法、Remove方法、RemoveAll方法。

Add方法

向 Dictionary 對象中添加壹個關鍵字項目對。

object.Add (key, item)

參數

object

必選項。總是壹個 Dictionary 對象的名稱。

key

必選項。與被添加的 item 相關聯的 key。

item

必選項。與被添加的 key 相關聯的 item。

說明

如果 key 已經存在,那麽將導致壹個錯誤。

常用語句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

代碼詳解

1、Dim d :創建變量,也稱為聲明變量。變量d聲明為可變型數據類型(Variant),d後面沒有寫數據類型,默認就是可變型數據類型(Variant)。也有寫成Dim d As Object的,聲明為對象。

2、Set d = CreateObject("Scripting.Dictionary"):創建字典對象,並把字典對象賦給變量d。這是最常用的壹句代碼。所謂的“後期綁定”。用了這句代碼就不用先引用c:\windows\system32\scrrun.dll了。

3、d.Add "a", "Athens":添加壹關鍵字”a”和對應於它的項”Athens”。

4、d.Add "b", “Belgrade”:添加壹關鍵字”b”和對應於它的項”Belgrade”。

5、d.Add "c", “Cairo”:添加壹關鍵字”c”和對應於它的項”Cairo”。

Exists方法

如果 Dictionary 對象中存在所指定的關鍵字則返回 true,否則返回 false。

object.Exists(key)

參數

object

必選項。總是壹個 Dictionary 對象的名稱。

key

必選項。需要在 Dictionary 對象中搜索的 key 值。

常用語句:

Dim d, msg$

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

If d.Exists("c") Then

msg = "指定的關鍵字已經存在。"

Else

msg = "指定的關鍵字不存在。"

End If

代碼詳解

1、Dim d, msg$ :聲明變量,d見前例;msg$ 聲明為字符串數據類型(String),壹般寫法為Dim msg As String。String 的類型聲明字符為美元號 ($)。

2、If d.Exists("c") Then:如果字典中存在關鍵字”c”,那麽執行下面的語句。

3、msg = "指定的關鍵字已經存在。" :把"指定的關鍵字已經存在。"字符串賦給變量msg。

4、Else :否則執行下面的語句。

5、msg = "指定的關鍵字不存在。" :把"指定的關鍵字不存在。"字符串賦給變量msg。

6、End If :結束If …Else…Endif判斷。

Keys方法

返回壹個數組,其中包含了壹個 Dictionary 對象中的全部現有的關鍵字。

object.Keys( )

其中 object 總是壹個 Dictionary 對象的名稱。

常用語句:

Dim d, k

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

k=d.Keys

[B1].Resize(d.Count,1)=Application.Transpose(k)

代碼詳解

1、Dim d, k :聲明變量,d見前例;k默認是可變型數據類型(Variant)。

2、k=d.Keys:把字典中存在的所有的關鍵字賦給變量k。得到的是壹個壹維數組,下限為0,上限為d.Count-1。這是數組的默認形式。

3、[B1].Resize(d.Count,1)=Application.Transpose(k) :這句代碼是很常用很經典的代碼,所以這裏要多說壹些。

Resize是Range對象的壹個屬性,用於調整指定區域的大小,它有兩個參數,第壹個是行數,本例是d.Count,指的是字典中關鍵字的數量,整本字典中有多少個關鍵字,本例d.Count=3,因為有3個關鍵字。呵呵,是不是說多了。

第二個是列數,本例是1。這樣=左邊的意思就是:把壹個單元格B1調整為以B1開始的壹列單元格區域,行數等於字典中關鍵字的數量d.Count,就是把單元格B1調整為單元格區域B1:B3了。

=右邊的k是個壹維數組,是水平排列的,我們知道Excel工作表函數裏面有個轉置函數Transpose,用它可以把水平排列的置換成豎向排列。但是在VBA中不能直接使用該工作表函數,需要通過Application對象的WorksheetFunction屬性來使用它。所以完整的寫法是Application. WorksheetFunction.Transpose(k),中間的WorksheetFunction可省略。現在可以解釋這句代碼了:把字典中所有的關鍵字賦給以B1單元格開始的單元格區域中。

Items方法

返回壹個數組,其中包含了壹個 Dictionary 對象中的所有項目。

object.Items( )

其中 object 總是壹個 Dictionary 對象的名稱。

常用語句:

Dim d, t

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

t=d.Items

[C1].Resize(d.Count,1)=Application.Transpose(t)

代碼詳解

1、Dim d, t :聲明變量,d見前例;t默認是可變型數據類型(Variant)。

2、t=d.Items :把字典中所有的關鍵字對應的項賦給變量t。得到的也是壹個壹維數組,下限為0,上限為d.Count-1。這是數組的默認形式。

3、[C1].Resize(d.Count,1)=Application.Transpose(t) :有了上面Keys方法的解釋這句代碼就不用多說了,就是把字典中所有的關鍵字對應的項賦給以C1單元格開始的單元格區域中。

Remove方法

Remove 方法從壹個 Dictionary 對象中清除壹個關鍵字,項目對。

object.Remove(key )

其中 object 總是壹個 Dictionary 對象的名稱。

key

必選項。key 與要從 Dictionary 對象中刪除的關鍵字,項目對相關聯。

說明

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

常用語句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

……

d.Remove(“b”)

代碼詳解

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

RemoveAll方法

RemoveAll 方法從壹個 Dictionary 對象中清除所有的關鍵字,項目對。

object.RemoveAll( )

其中 object 總是壹個 Dictionary 對象的名稱。

常用語句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

……

d.RemoveAll

代碼詳解

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

字典對象的屬性有4個:Count屬性、Key屬性、Item屬性、CompareMode屬性。

Count屬性

返回壹個Dictionary 對象中的項目數。只讀屬性。

object.Count

其中 object壹個字典對象的名稱。

常用語句:

Dim d,n%

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

n = d.Count

代碼詳解

1、Dim d, n% :聲明變量,d見前例;n被聲明為整型數據類型(Integer)。壹般寫法為Dim n As Integer 。 Integer 的類型聲明字符為百分比號 (%)。

2、n = d.Count :把字典中所有的關鍵字的數量賦給變量n。本例得到的是3。

Key屬性

在 Dictionary 對象中設置壹個 key。

object.Key(key) = newkey

參數:

object

必選項。總是壹個字典 (Dictionary) 對象的名稱。

key

必選項。被改變的 key 值。

newkey

必選項。替換所指定的 key 的新值。

說明

如果在改變壹個 key 時沒有發現該 key,那麽將創建壹個新的 key 並且其相關聯的 item 被設置為空。

常用語句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

d.Key("c") = "d"

代碼詳解

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

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 d

Set d = CreateObject("Scripting.Dictionary")

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

MsgBox d.Item("c")

代碼詳解

1、d.Item("c") :獲取指定的關鍵字”c”對應的項。

2、MsgBox :是壹個VBA函數,用消息框顯示。如果要詳細了解MsgBox函數的,可參見我的另壹篇文章“常用VBA函數精選合集”。pare]

參數

object

必選項。總是壹個 Dictionary 對象的名稱。

compare

可選項。如果提供了此項,compare 就是壹個代表比較模式的值。可以使用的值是 0 (二進制)、1 (文本), 2 (數據庫)。

說明

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

常用語句:

Dim d

Set d = CreateObject("Scripting.Dictionary")

d.CompareMode = vbTextCompare

d.Add "a", "Athens"

d.Add "b", "Belgrade"

d.Add "c", "Cairo"

d.Add " B ", " Baltimore"

代碼詳解

1、d.CompareMode = vbTextCompare :設置字典的比較模式是文本,在這種比較模式下不區分關鍵字的大小寫,即關鍵字”b”和”B”是壹樣的。vbTextCompare的值為1,所以上式也可寫為 d.CompareMode =1 。如果設置為vbBinaryCompare(值為0),則執行二進制比較,即區分關鍵字的大小寫,此種情況下關鍵字”b”和”B”被認為是不壹樣的。

2、d.Add " B ", " Baltimore" :添加壹關鍵字”B”和對應於它的項”Baltimore”。由於前面已經設置了比較模式為文本模式,不區分關鍵字的大小寫,即關鍵字”b”和”B”是壹樣的,此時發生錯誤添加失敗,因為字典中已經存在”b”了,字典中的關鍵字是唯壹的,不能添加重復的關鍵字。

[ 本帖最後由 藍橋玄霜 於 2010-10-24 19:55 編輯 ]

鏈接:/thread-868892-1-1.html