在某些情形下,可以使用Array函數(shù)方便地填充數(shù)組。例如,下面的代碼:
Dim myArray
myArray =Array('國(guó)慶節(jié)', '中秋節(jié)', '元旦', '春節(jié)')
等價(jià)于:
Dim myArray(3)
myArray(0) = '國(guó)慶節(jié)'
myArray(1) = '中秋節(jié)'
myArray(2) = '元旦'
myArray(3) = '春節(jié)'
因此,Array函數(shù)可以將一組值批量賦給一個(gè)數(shù)組。
Array函數(shù)語法
Array函數(shù)返回一個(gè)Variant型數(shù)組,該數(shù)組由傳遞給該函數(shù)的參數(shù)組成。其語法為:
Array([元素1],[元素2],…,[元素n])
其中:
元素1~n可以是任意數(shù)據(jù)類型,代表賦給數(shù)組元素的數(shù)據(jù)。
由Array函數(shù)返回的數(shù)組只可賦值給一個(gè)Variant型變量,不能賦值給已聲明為數(shù)組變量的變量。
Array函數(shù)返回的數(shù)組中元素的順序與傳遞給函數(shù)的參數(shù)值的順序相同。
Array函數(shù)總是返回Variant類型的數(shù)組,但元素的數(shù)據(jù)類型可以不同,這取決于傳遞給該函數(shù)的數(shù)值類型。例如Array('One', 2, 3.14)返回的數(shù)組中,第1個(gè)元素是String型,第2個(gè)是Integer型,第3個(gè)是Double型。
Array函數(shù)創(chuàng)建的數(shù)組下限由Option Base確定。若忽略該語句,則數(shù)組下限值為0。
若Array函數(shù)沒有任何參數(shù),則會(huì)創(chuàng)建一個(gè)空數(shù)組。
Array函數(shù)返回的數(shù)組是動(dòng)態(tài)數(shù)組,其初始大小是Array函數(shù)的參數(shù)數(shù)量,可以使用ReDim、ReDim Preserve來對(duì)所創(chuàng)建的數(shù)組重新定義維數(shù)。
如果使用VBA.Array(),例如
Dim myArray As Variant
myArray = VBA.Array(“國(guó)慶節(jié)”,”中秋節(jié)”,”元旦”)
那么數(shù)組的基數(shù)總是0,與Option Base的設(shè)置無關(guān)。即Option Base 1時(shí),myArray(1)的值仍然是“中秋節(jié)”。
編程技巧
1. 在已確定元素內(nèi)容時(shí),使用Array函數(shù)更有效率。例如:
Dim myArray AsVariant
myArray =Array('國(guó)慶節(jié)', '中秋節(jié)', '元旦', '春節(jié)')
2. 可以使用Array函數(shù)創(chuàng)建多維數(shù)組,例如:
Dim myArray AsVariant
myArray =Array(Array('One', 'Two', 'Three'), _
Array('Four','Five', 'Six'), _
Array('Seven','Eight', 'Nine'))
創(chuàng)建了一個(gè)3行3列的二維數(shù)組。
然而,要訪問這個(gè)數(shù)組中的元素,例如第2行第3列的元素?cái)?shù)據(jù)“Six”,不能夠使用:
myArray(1, 2)
這樣,將產(chǎn)生“下標(biāo)越界”錯(cuò)誤。
而應(yīng)該使用:
myArray(1)(2)
或者,先聲明一個(gè)Variant型變量,然后將相應(yīng)行的第1維賦值給該變量,再使用該變量來訪問相應(yīng)列的元素?cái)?shù)據(jù),例如:
Dim vElement AsVariant
vElement =myArray(1)
MsgBox vElement(2)
3. 可以使用Array函數(shù)來為ActiveX 列表框或組合框控件賦值,例如:
Me.ListBox1.List =Array('國(guó)慶節(jié)', '中秋節(jié)', '元旦', '春節(jié)')
給列表框添加了4個(gè)節(jié)日名。
4. 可以使用Array函數(shù)創(chuàng)建控件數(shù)組,即將控件名稱作為Array函數(shù)的參數(shù)。然后,可以將數(shù)組元素當(dāng)作相應(yīng)的控件對(duì)象來使用,例如:
Private SubCommandButton1_Click()
Me.ListBox1.Clear
Me.ListBox1.List = Array('國(guó)慶節(jié)', '中秋節(jié)', '元旦', '春節(jié)')
Me.ListBox1.ListIndex = 0
End Sub
Private SubCommandButton2_Click()
Dim myArray As Variant
myArray = Array(ListBox1, CommandButton1)
MsgBox myArray(0).Text
End Sub
運(yùn)行后的結(jié)果如下圖1所示。
示例
示例1:使用Array函數(shù)創(chuàng)建數(shù)組
Sub TestArray()
Dim myArray() As Variant
'從逗號(hào)分隔的字符串列表中創(chuàng)建數(shù)組
myArray = Array('One','Two', 'Three')
'顯示數(shù)組元素
MsgBox myArray(0) & vbCr &myArray(1) & vbCr & myArray(2)
'也可以使用數(shù)值作為參數(shù)
myArray = Array(10, 20, 30)
'顯示數(shù)組元素
MsgBox myArray(0) & vbCr &myArray(1) & vbCr & myArray(2)
End Sub
示例2:下面的示例先使用Array函數(shù)將一組值賦給變量myArray,然后將該變量中的值輸入到工作表Sheet1的第1行。
Option Base 1
Sub ArrayTest()
Dim myArray As Variant
Dim iCount As Integer
myArray = Array('姓名',”性別”,”成績(jī)”)
With Worksheets(“Sheet1”)
ForiCount = 1 To UBound(myArray)
.Cells(1,iCount).Value = myArray(iCount)
NextiCount
End With
End Sub
運(yùn)行代碼后的結(jié)果如圖2所示。
在某些情形下,需要檢驗(yàn)?zāi)硞€(gè)變量是否為數(shù)組,以便于后續(xù)操作,此時(shí),可以使用IsArray函數(shù)。
IsArray函數(shù)語法
IsArray函數(shù)返回一個(gè)Boolean值,表明傳遞給該函數(shù)的變量是否為數(shù)組。其語法為:
IsArray(varname)
其中:
參數(shù)varname為等檢驗(yàn)是否為數(shù)組的變量的名稱。
如果傳遞給IsArray函數(shù)的變量是一個(gè)數(shù)組或者包含一個(gè)數(shù)組,則返回值為True;否則為False。
編程技巧
在不確定使用的變量是否為數(shù)組時(shí),如果試圖訪問不存在的數(shù)組中的元素或者對(duì)其使用數(shù)組函數(shù)(如LBound或者UBound),就會(huì)導(dǎo)致錯(cuò)誤。此時(shí),可以先使用IsArray函數(shù)來確定其是否為數(shù)組,然后再進(jìn)行后續(xù)相應(yīng)的操作。
例如,下面的代碼段檢查變量myArray是否為數(shù)組,若不是則退出:
If NotIsArray(myArray) Then Exit Sub
相關(guān)鏈接:
VBA進(jìn)階 | 數(shù)組基礎(chǔ)01: 用最淺顯的介紹來幫助你認(rèn)識(shí)數(shù)組
VBA進(jìn)階 | 數(shù)組基礎(chǔ)02: 簡(jiǎn)單的數(shù)組操作
VBA進(jìn)階 | 數(shù)組基礎(chǔ)03: 二維數(shù)組
VBA進(jìn)階 | 數(shù)組基礎(chǔ)04: 運(yùn)用數(shù)組處理工作表數(shù)據(jù)
VBA進(jìn)階 | 數(shù)組基礎(chǔ)05: 動(dòng)態(tài)數(shù)組
本文屬原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處。
歡迎在下面留言,完善本文內(nèi)容,讓更多的人學(xué)到更完美的知識(shí)。
聯(lián)系客服