VBA 動的配列(ReDim & ReDim Preserve)
このチュートリアルでは、VBAで動的配列(redimおよびredim preserve)を使用する方法を説明します。
動的配列
動的配列は、サイズを変更できる配列です。(サイズを変更できない静的配列とは対照的です。)
動的配列を宣言するには、サイズを省略して配列を宣言します。
Dim strNames() As String
次に、配列に値を代入する前に、ReDim ステートメントを使用して、配列を希望のサイズに設定する必要があります。
ReDim strNames(1 to 3)
これで、配列のサイズを変更したくなったら、いつでもReDim(または後述するReDim Preserve)を使用すればよいことになります。
動的なVariant配列
注意:Variant配列は少し違います。Variant配列では、値を代入する前にReDimで配列のサイズを設定する必要はありません。
Sub TestArray()
'変数を宣言
Dim varNames() As Variant
'配列に値を入れる
varNames() = Array("Fred", "Wilma", "Barney", "Betty")
'値を返す
MsgBox Join(varNames, ",")
End Sub
RedimとRedim Preserveの比較
ReDimステートメントは配列のサイズを変更し、既存の値をすべてクリア します。 ReDim Preserveステートメントは、配列のサイズを変更しますが、既存のすべての値を保持(preserve)します。
ReDimの使用
実際に、ReDimを使って配列のサイズを変更すると、次のようになります。
Sub TestReDim()
'文字列配列を宣言する
Dim strNames() As String
'文字列配列を3つの値を保持できるようにリサイズする
ReDim strNames(1 to 3)
'配列に3つの名前を入力する
strNames(1) = "佐藤"
strNames(2) = "山田"
strNames(3) = "高橋"
'結果をイミディエイトウィンドウに表示する
Debug.Print Join(strNames, vbCrLf)
End Sub
ReDim Preserveの使用
この例では、ReDimを使って動的配列の初期値を設定し、ReDim Preserveを使って元の値を 維持したまま配列のサイズを変更します。
Sub TestReDim()
'文字列配列を宣言する
Dim strNames() As String
'文字列配列を3つの値を保持できるようにリサイズする
ReDim strNames(1 to 3)
'配列に値を入れる
strNames(1) = "佐藤"
strNames(2) = "山田"
strNames(3) = "高橋"
'結果をイミディエイトウィンドウに表示する
Debug.Print Join(strNames, vbCrLf)
'ReDimを行うが、データを保存する
ReDim Preserve strNames(1 To 4)
strNames(4) = "鈴木"
'結果をイミディエイトウィンドウに表示する
Debug.Print Join(strNames, vbCrLf)
End Sub
PRESERVEステートメントを使わないと、それまで配列に入っていたデータが失われてしまいます。
上のウィンドウでは、配列に佐藤、山田、高橋が格納されていましたが、再宣言すると、これらの値は削除され、代わりに3つの空白と、値「鈴木」が返されました。 これはPRESERVEステートメントが省略されていたためです。