Excel VBAの配列は[]を使わない
多くのプログラムでは配列は[]を使用して[1, 2, 3]のように書くがExcel VBAは[]は使用せず、pushに該当する処理のクセがある。
この記事では配列とpushに該当する処理について簡単に説明する。
Excel VBAにはpushはない
プログラミングにはpushメソッドがあることが多いが、VBAにはpushは存在しない。
そのためpushに該当する処理にクセがある。
まず配列の変数を宣言してRedimで数を指定する。
nums(3)ではなくnums(2)になっているのはVBAのデフォルトの配列の添え字の最小値は0のため。
逆にOption Base 1がコード内に指定されている場合は添え字の最小値が1になるためnums(3)を指定するのが正しい。
Sub MySub()
Dim nums() As Long
ReDim nums(2)
nums(0) = 10
nums(1) = 20
nums(2) = 30
End Sub
もしここに40をpushのように追加したい場合はReDim Preserve nums(4)で配列の個数を変更する。
4ではなくUBound(nums) + 1にしたほうが汎用的に使い回せる。
Sub MySub()
Dim nums() As Long
ReDim nums(2)
nums(0) = 10
nums(1) = 20
nums(2) = 30
ReDim Preserve nums(UBound(nums) + 1)
nums(3) = 40
End Sub
For文で繰り返し処理
配列内の値を順次取得したい場合はFor文を使用する。
For Eachでも可能だがインデックス(i)を使用して最初や最後のデータのみIFで条件分岐したいことが多いので一般的にはForが使用されることが多い。
Option Explicit
Sub MySub()
Dim nums() As Long
ReDim nums(2)
nums(0) = 10
nums(1) = 20
nums(2) = 30
ReDim Preserve nums(UBound(nums) + 1)
nums(3) = 40
Dim i As Long
For i = LBound(nums) To UBound(nums)
If i = LBound(nums) Then
Debug.Print "First"
End If
Debug.Print i, nums(i)
If i = UBound(nums) Then
Debug.Print "Last"
End If
Next i
End Sub
出力結果は以下の通り
First 0 10 1 20 2 30 3 40 Last