VBA 動的配列(ReDim & ReDim Preserve)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 5月 30, 2022

このチュートリアルでは、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

vba redim output 1

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

vba redim output 2

PRESERVEステートメントを使わないと、それまで配列に入っていたデータが失われてしまいます。

vba redim output 3

上のウィンドウでは、配列に佐藤、山田、高橋が格納されていましたが、再宣言すると、これらの値は削除され、代わりに3つの空白と、値「鈴木」が返されました。 これはPRESERVEステートメントが省略されていたためです。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples