[vb] Excel VBA 程式設計教學:陣列(Array)

參考網址:https://blog.gtwang.org/programming/excel-vba-array/

動態陣列

一般的陣列在宣告時就必須決定好陣列的大小,但是有的時候我們無法事先預知程式所需要的陣列大小,要等到實際執行時才會知道需要多少空間,這時候就可以使用動態陣列的方式來儲存資料。

動態陣列(dynamic arrays)的特點就是可以動態改變陣列的大小,在空間不足時可以擴增,而空間太大時也可以縮減,以下是動態陣列的使用方式:

' 宣告動態陣列
Dim MyDynArr() As Integer

' 調整陣列大小
ReDim MyDynArr(3)

MsgBox "LBound = " & LBound(MyDynArr) _
   & ", Ubound = " & UBound(MyDynArr)
MyDynArr(3) = 123

動態陣列的宣告方式就是在宣告陣列時不要指定索引範圍,然後在要使用陣列之前執行 ReDim 設定陣列的大小。

隨後如果需要改變動態陣列的大小,也是同樣呼叫 ReDim 並指定新的陣列大小,而在預設的狀況下使用 ReDim 改病陣列大小時,原本儲存於陣列中的資料會被刪除,如果想要保留舊資料,就要加上 Preserve,如果舊資料不需要保留的話,就可以將 Preserve 省略,這樣執行速度會比較快。

' 調整陣列大小,保留陣列內部資料
ReDim Preserve MyDynArr(10)

MsgBox "LBound = " & LBound(MyDynArr) _
   & ", Ubound = " & UBound(MyDynArr)
MyDynArr(7) = 456

MsgBox MyDynArr(3)
MsgBox MyDynArr(7)

這裡的 LBoundUBound 是用來查詢陣列索引下限與上限的函數。

當動態陣列使用完畢之後,我們可以使用 Erase 將系統配置給動態陣列的記憶體收回:

Erase MyDynArr

Erase 若用於一般性的陣列,則會將陣列內的每個元素重新初始化。

本篇發表於 程式設計。將永久鏈結加入書籤。