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 |