Excel VBAで、配列の要素数を最初から決めず、for文に応じて動的に数を決める方法
VBAの配列は、基本的には、最初に要素数(配列の最大値)を決めて宣言しますが、しかし、ソースコードの内容によっては、for文などで動的に数が増えていって、その結果に応じて配列の要素数を決定したい時もあります。そんな時は、ReDimのPreserveを使ったやり方で実現ができます。
配列の要素を動的に変えるにはReDimのPreserveを使おう
Excel VBAで、配列の要素数を動的に増やしたい時は、ReDimのPreserveを利用します。
Sub test1()
Dim Ar() As Variant
Dim i As Integer
For i = 0 To 10
ReDim Preserve Ar(i)
Ar(i) = "入力データ" & i
Next i
End Sub
結果はこちら。
変数iに応じて配列の数が増えていることが分かります。この時、最初のAr()宣言時に数字を入れてしまうとReDimが使えないので注意しましょう。
多次元配列の場合
Excel VBAの仕様上、多次元配列で要素数を動的に増やすことはできません。Preserve オプションは二次元配列等には使えず、「次元が2つ以上ある動的配列の場合は最後の次元のサイズのみ変更できる」とのことです。
× Ar(i,j)
○ Ar(0,j)
Sub test2()
Dim Ar() As Variant
Dim j As Integer
For j = 0 To 5
ReDim Preserve Ar(0, j)
Ar(0, j) = "入力データ" & j
Next j
End Sub
結果はこちら。
配列は一次元分しか動的に要素数を増やせないことを覚えておきましょう。