VBA數(shù)組詳解

2021-12-08 14:30 更新

聲明數(shù)組

因?yàn)閿?shù)組也是變量,所以,你必須用聲明其它變量的類似方法聲明數(shù)組——使用Dim語(yǔ)句。當(dāng)你聲明一個(gè)數(shù)組時(shí),你便設(shè)定了該數(shù)組儲(chǔ)存數(shù)據(jù)所需要的內(nèi)存空間。
我們來(lái)看看一個(gè)數(shù)組聲明的例子:
Dim cities(6) As String
Dim daysOfWeek(7) As String
Dim lotto(6) As Integer
Dim exchange(5, 3) As Variant
注意,變量名稱后面帶有括號(hào)以及括號(hào)里有數(shù)字。一維數(shù)組要求括號(hào)里帶一個(gè)數(shù)字,這個(gè)數(shù)字決定了這個(gè)數(shù)組能夠儲(chǔ)存的最大成員數(shù)。二維數(shù)組后面總是帶有兩個(gè)數(shù)字——第一個(gè)數(shù)字是行索引號(hào),而第二個(gè)數(shù)字是列索引號(hào)。在上面的例子里,數(shù)組exchange最多可以儲(chǔ)存15個(gè)數(shù)據(jù)(5*3=15)。

數(shù)組聲明的最后一部份是定義數(shù)組將要儲(chǔ)存數(shù)據(jù)的數(shù)據(jù)類型。數(shù)組可以儲(chǔ)存下列任何一種數(shù)據(jù)類型:Integer, Long, Single, Double, Variant, Currency, String, Boolean, Byte, or Date。

當(dāng)你聲明了一個(gè)數(shù)組,VB會(huì)自動(dòng)占據(jù)足夠的內(nèi)存空間,分配的內(nèi)存空間取決于該數(shù)組的大小和數(shù)據(jù)類型。當(dāng)你聲明一個(gè)名叫l(wèi)otto的帶有6個(gè)成員的一維數(shù)組時(shí),VB將留出12個(gè)字節(jié)——數(shù)組的每個(gè)成員各占2個(gè)字節(jié)(回想整型數(shù)據(jù)類型為2個(gè)字節(jié),因此2*6=12)。數(shù)組越大,儲(chǔ)存數(shù)據(jù)需要的內(nèi)存空間就越大。因?yàn)閿?shù)組會(huì)吃掉很多內(nèi)存,并因此影響你電腦的運(yùn)行,因此,建議你僅僅根據(jù)你可能使用的成員數(shù)來(lái)聲明數(shù)組。

數(shù)組的上界和下界

VBA默認(rèn)將數(shù)組的第一個(gè)成員設(shè)置為0(索引號(hào)),因此,數(shù)字1代表數(shù)組中的第二個(gè)成員,而數(shù)字2則代表第三個(gè),等等。因?yàn)閿?shù)字編號(hào)起始于0,所以,一維數(shù)組cities(6)包含從0到6的七個(gè)成員。如果你寧愿從1開始計(jì)數(shù)你數(shù)組里的成員,那么你可以使用Option Base 1語(yǔ)句來(lái)強(qiáng)制指定該數(shù)組的下界。該指令必須置于VBA模塊任何Sub語(yǔ)句上面的聲明部分。如果你不明確Option Base 1,那么VBA在使用數(shù)組是就會(huì)假定使用Option Base 0來(lái)從0開始編號(hào)你的數(shù)組成員。

你也可以讓數(shù)組從除0或1之外的數(shù)字開始編號(hào),要達(dá)到該目的,你在聲明數(shù)組變量時(shí)就必須明確該數(shù)組的邊界。數(shù)組的邊界是指它最小和最大的索引號(hào)。我們來(lái)看看下面的例子:
Dim cities(3 To 6) As Integer
上面的語(yǔ)句聲明了一個(gè)帶有四個(gè)成員的一維數(shù)組。數(shù)組名稱后面括號(hào)里的數(shù)字明確了數(shù)組的下界(3)和上界(6)。該數(shù)組的第一個(gè)成員編號(hào)為3,第二個(gè)為4,第三個(gè)為5,以及第四個(gè)為6。注意下界和上界之間的關(guān)鍵字To。

技巧:數(shù)組范圍
Dim語(yǔ)句明確的數(shù)組的下標(biāo)區(qū)間就稱為數(shù)組的范圍,例如:Dim mktgCodes(5 To 15)

在VBA過(guò)程里使用數(shù)組

你聲明了數(shù)組后,就必須給該數(shù)組的每個(gè)成員賦值,這也經(jīng)常成為“填充數(shù)組”。我們來(lái)嘗試使用一維數(shù)組有規(guī)劃地顯示六個(gè)美國(guó)城市的清單:

1.  打開一個(gè)新工作簿,并保存為Chap07.xls
2.  切換到VB編輯器窗口,并重新命名VBA工程為Tables
3.插入一新模塊,重新命名為StaticArrays
4.輸入下列過(guò)程FavoriteCities:
' start indexing array elements at 1 從1開始給數(shù)組成員編號(hào)
Option Base 1
Sub FavoriteCities()
'now declare the array
Dim cities(6) As String
'assign the values to array elements
cities(1) = "Baltimore"
cities(2) = "Atlanta"
cities(3) = "Boston"
cities(4) = "Washington"
cities(5) = "New York"
cities(6) = "Trenton"
'display the list of cities
MsgBox cities(1) & Chr(13) & cities(2) & Chr(13) _
& cities(3) & Chr(13) & cities(4) & Chr(13) _
& cities (5) & Chr(13) & cities(6)
End Sub
在FavoriteCities過(guò)程開始之前,缺省的索引編號(hào)方式改變了,注意,Option Base 1語(yǔ)句是位于模塊窗口Sub語(yǔ)句之上的。該語(yǔ)句告訴VB給數(shù)組的第一個(gè)成員賦值數(shù)字1,而不是缺省的0。

數(shù)組cities()聲明為帶六個(gè)成員的字符串類型變量。然后,給數(shù)組的每個(gè)成員都賦上了值。最后的語(yǔ)句使用Msgbox函數(shù)顯示城市清單。當(dāng)你運(yùn)行該過(guò)程時(shí),城市名稱將會(huì)出現(xiàn)在分開的行上(參見(jiàn)圖7-1)。你可以改變顯示數(shù)據(jù)的順序,改變索引號(hào)。

Msgbox
圖7-1 你可以用Msgbox函數(shù)來(lái)顯示一維數(shù)組的成員

5.  運(yùn)行FavoriteCities過(guò)程并且檢查結(jié)果
6.  修改FavoriteCities過(guò)程,讓它逆序顯示城市名稱(從6到1)

技巧: 數(shù)組成員的初始值
在給數(shù)組成員賦值之前,該成員具有缺省值。數(shù)字變量的缺省值為0,而字符串變量的缺省值為空字符串。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)