Redimとは

Dim 変数名() As 型名 '←仮宣言
・・・・・・・
・・・・・・・
Redim 変数名(開始 To 終了) '←初期化して配列を再確保する。
・・・・・・・
・・・・・・・
Redim Preserve 変数名(開始 To 終了) '←中身を維持しながら配列を再確保する。
Redim以外だけではなく、配列の初期化と配列の確保をする関数があります。
変数名 = Array(要素[,要素,...])
Array関数により初期値設定と配列の再確保がされます。
Dim i
Dim a()
ReDim a(1 To 2)
a(1) = 100
a(2) = 200
という具合に書きます。
Redimは何度でもできます。ただし
Dim i
Dim a()
ReDim a(1 To 2)
a(1) = 100
a(2) = 200
For i = 1 To 2
Debug.Print i, a(i)
Next
ReDim a(0 To 2)
For i = 0 To 2
Debug.Print i, a(i)
Next
1 100
2 200
0
1
2
となってRedimをすると配列に入れた中身が消えてしまいます。 お節介なことに初期化してくれるのです。

そこでPreserveを使います。
なんか継ぎ接ぎのような仕様で美しくありませんが仕方がありません。
Dim i
Dim a()
ReDim a(1 To 2)
a(1) = 100
a(2) = 200
For i = 1 To 2
Debug.Print i, a(i)
Next
ReDim Preserve a(1 to 3)
For i = 1 To 3
Debug.Print i, a(i)
Next
End Sub
1 100
2 200
1 100
2 200
3
増えた分は空文字になるようです。


最後にArray関数による配列の変更・初期化の例を挙げます。
Dim i
Dim a()
a = Array(100, 200, 300)
For i = 0 To 2
Debug.Print i, a(i)
Next
0 100
1 200
2 300
ただしこのArray関数による初期化ができるのはVariant型だけです。
-