Redimとは

Dim 変数名() As 型名
仮宣言

Redim 変数名(開始 To 終了)
初期化して配列を再確保する。

Redim Preserve 変数名(開始 To 終了)
中身を維持しながら配列を再確保する。
ただし「変更できるのは、動的配列の最後の次元の上限インデックス番号に限られます。」

変数名 = Array(要素[,要素,...])
Array関数により初期値と配列の再確保を行えます。
Dim i
Dim a()
ReDim a(1 To 2)
a(1) = 100
a(2) = 200
という具合に書く。
Redimは何度でもできる。2つめの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(2)
For i = 0 To 2
Debug.Print i, a(i)
Next
1 100
2 200
0
1
2
となって消えている。ご丁寧に初期化してくれるのだ。

Preserveでの維持は
「変更できるのは、動的配列の最後の次元の上限インデックス番号に限られます。」
とのことなので例えば以下のようなことはできない。
dim a(1 to 2) → dim a(0 to 2) ×
dim a(3, 5) → dim a(5, 5) ×

維持しながら変える場合は
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型だけである。
何度でも再定義(代入)することができる。
comments (0)

コメント

Comment Form