Excel VBA 逆引き集 | 配列のReDim

Excel VBA
スポンサーリンク

配列の ReDim

VBAで配列を使うとき、「サイズを後から決めたい」「途中で増やしたい」と思うことがあります。そんなときに使うのが ReDim。初心者向けに、コード例とテンプレートをかみ砕いて説明します。


基本の考え方

  • 固定配列: Dim arr(1 To 10) のように最初からサイズを決める。
  • 動的配列: Dim arr() As Variant のようにサイズ未定で宣言。
  • ReDim: 動的配列に対して「サイズを後から指定」する。
  • ReDim Preserve: 既存の値を残したままサイズを変更する。

テンプレ1:動的配列にサイズを与える

Sub ReDim_Basic()
    Dim arr() As String   ' サイズ未定の配列

    ' サイズを後から決める(5要素)
    ReDim arr(1 To 5)

    Dim i As Long
    For i = 1 To 5
        arr(i) = "要素" & i
        Debug.Print arr(i)
    Next i
End Sub
VB
  • ポイント: Dim arr() だけでは使えない。必ず ReDim でサイズを決める。

テンプレ2:サイズを変更する(値は消える)

Sub ReDim_Resize()
    Dim arr() As Long
    ReDim arr(1 To 3)
    arr(1) = 10: arr(2) = 20: arr(3) = 30

    ' サイズを変更(値は消える)
    ReDim arr(1 To 5)

    Debug.Print "要素数:" & UBound(arr)
End Sub
VB
  • 注意: ReDim だけだと中身は消える。新しいサイズで初期化される。

テンプレ3:値を残したままサイズ変更(Preserve)

Sub ReDim_Preserve()
    Dim arr() As Long
    ReDim arr(1 To 3)
    arr(1) = 10: arr(2) = 20: arr(3) = 30

    ' 値を残したままサイズを拡張
    ReDim Preserve arr(1 To 5)
    arr(4) = 40: arr(5) = 50

    Dim i As Long
    For i = 1 To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub
VB
  • ポイント: Preserveを付けると既存の値が残る。新しい要素だけ空になる。

テンプレ4:二次元配列のReDim(注意点)

Sub ReDim_2D()
    Dim arr() As Long
    ' 二次元配列を宣言
    ReDim arr(1 To 2, 1 To 3)

    arr(1, 1) = 100
    arr(2, 3) = 200

    ' Preserveは最終次元しか変更できない
    ReDim Preserve arr(1 To 2, 1 To 5)

    Debug.Print arr(1, 1), arr(2, 3)
End Sub
VB
  • 注意: 二次元配列で Preserve を使えるのは「最後の次元」だけ。
    → 行数は変えられないが、列数は増やせる。

例題で練習

'例1:動的配列にサイズを与えて値を入れる
Sub Example_Basic()
    ReDim_Basic
End Sub

'例2:サイズ変更で値が消えることを確認
Sub Example_Resize()
    ReDim_Resize
End Sub

'例3:Preserveで値を残したまま拡張
Sub Example_Preserve()
    ReDim_Preserve
End Sub

'例4:二次元配列でPreserveを使う
Sub Example_2D()
    ReDim_2D
End Sub
VB

初心者向けポイント

  • 動的配列は必ずReDim: Dim arr()だけでは使えない。
  • Preserveを忘れると値が消える: 拡張時は必ず ReDim Preserve
  • 二次元配列は最後の次元だけ拡張可能: 行数は固定、列数は増やせる。
  • UBound/LBoundで範囲確認: 配列のサイズを動的に扱うときは必須。
タイトルとURLをコピーしました