配列の 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で範囲確認: 配列のサイズを動的に扱うときは必須。
