動的配列とは!?
動的配列とは、プログラムの中で配列の部屋数が変動する配列の事を言います。
例えば顧客数を管理するプログラムがあったとします。
顧客数は最初は100人でも営業を続けていけば1000人に増えるかも知れません。
この様に配列に格納したい中身の数が不確定な場合に動的配列を使用していきます。
ReDim(リディム)
ReDimとはプログラムの途中で配列の部屋数を宣言し直す場合に使用します。
これは宣言の時点で予め部屋数を決めて宣言していない配列にしか使用できません。
つまり前回やったDim h() As Variantの様な宣言方法の場合ですね。
では早速やってみましょう。
上のサブプロシージャ「ReDimの使用」ですね。
まずは配列を動的な配列「Dim h() As Variant」として宣言します。
続いてReDimでhの配列に0番目の部屋を作っています。この様にプログラムの途中で配列の部屋数を変動させるのがReDimです。
もちろんこの後もう一度宣言して配列の部屋数を更に変動させることもできます。
しかし、ReDimは行う度に配列の中に入っている値をリセットしてしまいます。
これでは値を保持したまま部屋数を変動させる事ができません。
ReDim Preserve(リディム プリザーブ)
ReDim Preserveは使い方はReDimと一緒ですが、配列に入っている値を保持したまま部屋数を変化させる事が出来るものです。
では、ReDimとの違いを見る為にどちらも動かして部屋に値を入れながら検証してみましょう。
Sub ReDimとReDimPreserve() Dim h_redim() As Variant Dim h_preserve() As Variant Dim i As Integer 'ReDim ReDim h_redim(0) h_redim(0) = 100 ReDim h_redim(3) h_redim(1) = 200 h_redim(2) = 300 h_redim(3) = 400 'ReDim Preserve ReDim h_preserve(0) h_preserve(0) = 100 ReDim Preserve h_preserve(3) h_preserve(1) = 200 h_preserve(2) = 300 h_preserve(3) = 400 For i = 0 To 3 Debug.Print "h_redimの" & i & "番目の部屋の値は" & h_redim(i) Debug.Print "h_preserveの" & i & "番目の部屋の値は" & h_preserve(i) Next End Sub
今回検証する為に行ったのはRedimを使用して拡張する配列とRedim Preserveを使用して拡張する配列の2種類作って値を入れていきます。その後Debug.Printで中身を見てみたわけですね。
どうでしょう?
最初に値を入れたはずのh_redim(0)の値がなくなっていますね。
ReDimを行うとこの様にリセットされてしまいますのでしっかり理解して使い分けが必要になってきますので覚えておきましょう。
配列の拡張方法を覚えた所で次回は配列の最小の部屋数と最大の部屋数を取得する「LBound」と「UBound」についてお勉強していきましょう。