Excel VAB入門(二)數組和字典

數組和字典也是VBA的常用到數據類型之一。但是我翻了有四五本VBA教程相關的書,裡面都沒有介紹到字典,數組到是在介紹數據類型時有介紹,而並沒有提到字典。

事實上,字典不是VBA內置的類型,它是Windows腳本語言的。但其實字典在VBA中也是非常重要的,它非常適用於需要進行非重複性數據的操作。我多次需要使用到字典,但很少用到數組。

1. 數組

如果有學過其它編程語言,應該對數組不陌生。其實數組就是多個變數的集合,而且它是有順序的,通過索引來訪問一個數組中的各個值。

但應該記住的是:數組中的各個數據,它們的類型必須是相同的。

數組也應當要先聲明,後使用。VBA中的數組有動態數組和靜態數組之分。

1.1 靜態數組

所謂靜態數組,即它的長度是固定不可變的。

聲明語法如下:

Dim 數組名(a to b) As 數據類型n

其中a和b均為數字,表示數據的索引起始值。也可以只寫一個數字,則此時數組使用默認索引,從0開始,數字表示它的長度。

例如:

Dim MyArray1(10) As StringnDim MyArray2(10 to 20) As Stringn

1.2 動態數組

如果在定義時並不知道需要使用的數組的長度是多少,則可以定義它為動態數組:

Dim Myarr3() As Stringn

可以看到,定義動態數組,只需要在括弧裡面留空就行了。

待確定了數組的長度之後,可以使用ReDim來重新定義數組

1.3 數組的賦值與取值

雖然都是通過索引來對數組進行賦值,但與其它主流的編程語言不同的是,VBA中不是使用中括弧[]而是使用小括弧()進行的。

Dim arr(5) As StringnnFor i = 1 to 5n 賦值n arr(i) = inNextnn取值nDebug.Print arr(1)n

另一種賦值方法

VBA裡面的數組有一種比較奇怪的用法:

Dim arrnarr = Array(1, 2, 3, 4, 5)n

或者指定長度也行

Dim arr(5)narr = Array("a", "b", "c", "d", "e")n

但是如果Dim的時候在後面指定數據類型,則會出錯:

Dim arr(5) as Stringnarr = Array("a", "b", "c", "d", "e")n

這樣會報錯,提示不能給數組賦值。莫非這種形式在VBA裡面不被認為是數組?不得而知了,但是以前面兩種方式定義和賦值的arr,在使用時候是和數組無異的。這種形式有時候也有其用處。

在網上搜索VBA數組時,會看到有說可以直接把Excel單元格中的數據賦值給數組的。如上面定義的長度為5的一維數組,以下方式把單元格中A1到A5的數據分別載入到數組arr中:

arr = Range("A1:A5")n

這種方法可能在以前的舊版本中可以實現,但是我目前在2013版的VBE裡面,是不能實現的。

1.4 多維數組

VBA中也支持多維數組。

如,定義一個四行五列的二維數組如下:

Dim Myarr(4, 5) as Stringn

或者:

Dim Myarr(1 to 4, 5 to 8) As Stringn

定義一個三維數組:

Dim Myarr(3, 4, 5) As Stringn

或者:

Dim Myarr(1 to 3, 4 to 6, 7 to 9) As Stringn

1.5 數組的索引

數組的索引默認是從0開始,但是它是可以被改變的。 看如下代碼:

Sub art()n Dim arr(5) As Integern For i = 2 To 6n arr(i - 1) = in Nextn Debug.Print arr(1)nEnd Subn

因為i - 1最小值為1,所以上例中的數組art的索引將會是從1開始。如果把括弧裡面的i - 1換成i + 1,那麼這個數組的索引將會從2開始。在Dim定義語句中括弧裡面的數字只是聲明數組的長度,即它能包含多少個元素,並沒有定義這個數組的索引。別搞混了。

1.6 其它

網上有說到很多對數組的操作,例如求數組的上下界,對數組求和等,我覺得這些都不算是數組的特有操作,因為它對其它數據類型也是可以使用的,所以就不打算再介紹了。有需要用到的,可以再查詢

2 字典

字典其實就是一些「鍵-值」對。在很多場合,它都能起到很大的作用,使用起來非常方便,有類似於微型資料庫的作用,可用於臨時保存一些數據信息。

2.1 創建字典

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

引用聲明

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

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

Dim d As New Dictionaryn

直接創建

我目前基本上都使用的這種方法。可如下定義:

Dim d As ObjectnSet d = CreateObject("Scripting.Dictionary")n

2.2 字典的方法

字典有6個方法,分別是Add、Exists、Keys、Items、Remove、RemoveAll。使用方法如下:

2.2.1 Add

用於添加內容到字典中。

d.Add key, itemn

第一個參數為鍵,第二個參數為鍵對應的值

2.2.2 Exists

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

d.Exists(key)n

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

2.2.3 Keys

獲取字典所有的鍵,返回類型是數組。

d.Keys()n

2.2.4 Items

獲取字典所有的值,返回類型是數組。

d.Items()n

2.2.5 Remove

從字典中移除一個條目,是通過鍵來指定的。

d.Remove(key)n

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

2.2.6 RemoveAll

清空字典。

2.3 字典的屬性

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

2.3.1 Count

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

d.Countn

2.3.2 Key

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

d.Key("apple") = "Orange" n

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

2.3.3 Item

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

讀取nDebug.Print d.Item("apple")nn寫入nd.Item("apple") = 10n

2.3.4 CompareMode

CompareMode用於設置或者讀取字典對象中比較字元串時的比較模式。

這個到目前為止我還沒有用過。所以不討論了。


推薦閱讀:

Excel圖表進階之路
怎樣把自己的VBA程序添加到Excel工具欄上
經濟學人蝴蝶圖+氣泡圖
學術論文的常用表格
什麼是正確的數據儲存姿勢

TAG:VBA | MicrosoftExcel | MicrosoftOffice |