VBAの動的配列とReDim Preserve

VBAには動的配列があると言いました。

動的配列はReDimステートメントを使用して配列の要素数を変更することができますが、再度、要素数を変更すると全要素は破棄されます。以下、例です。

Sub macro()
  Dim arr() As String
  ReDim arr(1) ' 要素数変更
  arr(0) = "a"
  arr(1) = "b"

  For Each i In arr
    Debug.Print i
  Next i

  ReDim arr(2) ' 再度要素数変更

  For Each i In arr
    Debug.Print i
  Next i

End Sub

結果は以下のようになります。

a
b

これを破棄されないようにするには、再度要素数変更する場合は、「ReDim Preserve」と宣言します。

上記の例で、再度要素数変更箇所だけPreserveを付け加えます。

Sub macro()
  Dim arr() As String
  ReDim arr(1) ' 要素数変更
  arr(0) = "a"
  arr(1) = "b"

  For Each i In arr
    Debug.Print i
  Next i

  ReDim Preserve arr(2) ' 再度要素数変更

  For Each i In arr
    Debug.Print i
  Next i

End Sub

結果は以下のようになります。

a
b
a
b

コメント

タイトルとURLをコピーしました