ReDim


ReDimステートメント

構文

ReDim [Preserve] varname(subscripts)[As type]

Preserveは省略可能です。既存データを保持したまま要素数を変更します。

varnameには、要素数を変更する動的配列変数名を指定します。

subscriptsには、変更する要素数を指定します。

typeは省略可能です。配列変数のデータ型を指定します。

解説

動的配列の要素数や次元数を変更します。

動的配列とは、配列変数の宣言時に要素数を指定せず空の括弧を付けた配列変数です。

キーワードPreserveを使うと、すでに配列内に持つデータを失うことなく要素数を変更することができます。たとえば、


    Dim myData() As String
    ReDim myData(2)
        myData(0) = "東京"
        myData(1) = "横浜"
    ReDim myData(3)
        myData(2) = "大阪"

というコードでは、2度目のReDimを実行したときに「東京」と「横浜」がクリアされてしまいます。ReDim Preserve myData(3)とすることで、既存データを保持したまま「大阪」を代入することができます。

As type節を使ってデータ型を変更できるのは、動的変数ではなく、バリアント型変数を配列として使用する場合に限られます。


    Dim myData() As Variant
    ReDim myData(2) As Integer
    myData(0) = 1
    MsgBox myData(0)

は、エラーになりますが、

    Dim myData As Variant
    ReDim myData(2) As Integer
    myData(0) = 1
    MsgBox myData(0)

は、正常に機能します。

サンプル

次の例は、ユーザーの入力した値に動的配列の要素数を変更します。

Sub Sample()
    Dim myData() As Integer, n As Integer, i As Integer, msg As String
    n = InputBox("要素数を指定してください")
    For i = 0 To n - 1
        ReDim Preserve myData(i)
        myData(i) = i + 100
    Next i
    For i = 0 To UBound(myData)
        msg = msg & myData(i) & vbCrLf
    Next i
    MsgBox msg
End Sub