HOWTO · VBA
在 VBA 中宣告和初始化字串陣列
本教程演示如何在 VBA 中宣告和初始化字串陣列。
本頁內容
在 VBA 中,若要等到程式執行時才決定陣列大小,請使用動態 String() 陣列;若元素數量已知,則直接宣告明確的界限。你可以使用 Split() 填入動態陣列,或將 Array() 的結果存入 Variant;後者是包含陣列的 Variant,不是具型別的字串陣列。以下範例會說明如何初始化這兩種形式、選擇界限,以及使用二維陣列。
宣告並初始化動態字串陣列
Variant 可以存放 Array() 傳回的陣列。陣列元素都是 Variant;若你想方便地使用一串常值,且不需要宣告 String(),這種方式就很實用。未加限定的 Array() 呼叫會依照模組的 Option Base 設定決定下限。使用預設的 Option Base 0 時,第四個項目的索引是 3:
Dim animals As Variant
animals = Array("Lion", "Tiger", "Cheetah", "Monkey", "Elephant", "Zebra")
Debug.Print animals(3) 會輸出 Monkey。
若要使用具型別的動態字串陣列,請在變數名稱後加上空括號,並指派 Split() 的結果。Split() 會將分隔字串拆成從零開始索引的字串陣列,不受模組的 Option Base 設定影響。當值來自單一分隔字串時,這種方式很實用:
Dim animals() As String
animals = Split("Lion,Tiger,Cheetah,Monkey,Elephant,Zebra", ",")
Debug.Print animals(2) 會輸出 Cheetah。
若要在逐一指派元素之前配置或調整動態陣列大小,請使用 ReDim。宣告 Dim animals() As String 會建立具型別的陣列變數;ReDim animals(0 To 5) 則會配置六個字串元素,索引範圍為 0 到 5。
宣告並初始化固定大小的字串陣列
若元素數量已知,可直接宣告下限和上限。Dim animals(0 To 5) As String 會建立六個元素,因為上下界都包含在內。使用索引指派各個值,再讀取所需的元素:
animals(0) = "Lion"
animals(1) = "Tiger"
animals(2) = "Cheetah"
animals(3) = "Monkey"
animals(4) = "Elephant"
animals(5) = "Zebra"
Debug.Print animals(4) 會輸出 Elephant。
明確指定界限能清楚標示有效索引,也不必依賴模組的預設值。在實際程序中,請將宣告和指派放在一起,例如放在 Sub StaticArrayDemo() 內,並置於 End Sub 之前。
選擇陣列界限並使用 Option Base
Option Base 會為該模組中未明確指定下限的陣列設定預設下限。請在程序之前,將 Option Base 1 放在模組的宣告區段。如此一來,該模組中的 Dim animals(6) As String 索引範圍就是 1 到 6。這項指示不會影響已明確指定界限的陣列,因此 Dim animals(0 To 5) As String 的索引仍是 0 到 5。
為了讓程式碼更容易理解與修改,通常直接指定界限會更清楚。未加限定的 Array() 呼叫會遵循模組的 Option Base 設定:使用 Option Base 0 時下限為 0,使用 Option Base 1 時下限為 1。相較之下,Split() 傳回的陣列一律從零開始索引,不受 Option Base 影響。若需要下限不受模組設定影響的 Array() 結果,請使用 VBA.Array();這個加上限定的呼叫以下限 0 起始。合併陣列或選擇索引時,請留意這些差異。
宣告並填入多維字串陣列
每個維度都要指定一組下限和上限。在 Dim values(1 To 5, 1 To 5) As String 中,第一個索引用來選取列,第二個索引用來選取欄,因此共有 25 個字串元素。可以用巢狀迴圈填入每個位置;將兩個計數器都宣告為 Integer,即可讓它們具有預期的數值型別:
Dim values(1 To 5, 1 To 5) As String
Dim i As Integer, j As Integer
For i = 1 To 5
For j = 1 To 5
values(i, j) = "The value of (" & i & "," & j & ") is " & i * j
Debug.Print values(i, j)
Next j
Next i
這段程式會在每個位置填入標籤,以及該位置的列、欄索引乘積;例如,位置 (3, 4) 的內容是 The value of (3,4) is 12。請讓維度界限與迴圈範圍一致,確保每次指派都使用陣列中已宣告的索引。
執行以下簡短的 Python 範例,可查看與上述範例相同的零起始索引選取方式。範例程式碼及其輸出標籤依要求保留英文原文:
本節中的程式碼以及顯示的標籤或輸出仍為英文。
animals = ["Lion", "Tiger", "Cheetah", "Monkey", "Elephant", "Zebra"]
print(animals[3])
Monkey