VBAでは定義した配列をEraseで初期化することができます。
初期化とは文字通り変数が初期設定の状態に戻ることを意味しますが、コードを継続して実行するために
初期化された配列がどのような値を取るかを知っておく必要があります。
それでは詳細についてご説明します。
構文
Erase 配列名
配列の初期化の仕方は単純にEraseの後に配列名を指定するだけです。()や要素数の指定は不要です。
静的配列を初期化した場合
<コード>
Dim myInt(2) As Integer '数値型の配列を定義' Dim myStr(2) As String '文字列型の配列を定義' Dim i As Integer '配列の要素数を格納' Dim myMsg As String '配列の値を確認するための文字列を格納' myMsg = "*Inteter / String*" & vbCrLf For i = 0 To 2 '配列に値を格納' myInt(i) = i myStr(i) = " / 要素" & i myMsg = myMsg & myInt(i) & " " & myStr(i) & vbCrLf Next i MsgBox myMsg Erase myInt, myStr '配列を初期化' myMsg = "*Inteter / String*" & vbCrLf For i = 0 To 2 myMsg = myMsg & myInt(i) & " " & myStr(i) & vbCrLf Next i MsgBox myMsg
<実行例>
このように、数値の配列を初期化すると0が、文字列の配列を初期化すると””(長さ0の文字列)が各要素に格納されていることが分かります。
ちなみにその他の型の配列を初期化した場合は下記の値が格納されます。
バリアント型 ⇒ Empty値
ユーザー定義型(Type) ⇒ 各要素の型に応じた値
オブジェクト型 ⇒ Nothing
動的配列を初期化した場合
動的配列をEraseで初期化すると配列の要素に割り当てられていたメモリが解放されます。
つまり、要素数を指定する前の状態に戻るということです。それでは、動的配列を初期化した場合の動作について確認してみましょう。
<コード>
Dim myIntA(2) As Integer '静的な数値型の配列を定義' Dim myIntB() As Integer '動的な数値型の配列を定義' ReDim myIntB(2) '動的配列の要素数を定義 Dim i As Integer '配列の要素数を格納' Dim myMsg As String '配列の値を確認するための文字列を格納' myMsg = "*静的配列 / 動的配列*" & vbCrLf For i = 0 To 2 '配列に値を格納' myIntA(i) = i myIntB(i) = i myMsg = myMsg & myIntA(i) & " / " & myIntB(i) & vbCrLf Next i MsgBox myMsg Erase myIntA '静的配列を初期化した場合' myMsg = "*静的配列*" & vbCrLf For i = 0 To 2 myMsg = myMsg & myIntA(i) & vbCrLf Next i MsgBox myMsg Erase myIntB '動的配列を初期化した場合' myMsg = "*動的配列*" & vbCrLf For i = 0 To 2 myMsg = myMsg & myIntB(i) & vbCrLf Next i MsgBox myMsg
<実行例>
静的配列を初期化した場合は各要素に0が格納されているのに対し、動的配列を初期化するとエラーが発生します。
これは配列の要素を定義する前の状態に戻っているため参照できる要素が存在しないことによるものです。
この場合、Redimで要素数を再定義することにより動的配列を再び使用できるようになります。
<コード>
Erase myIntB '動的配列を初期化した場合' ReDim myIntB(3) '要素数を0~3にして再定義 myMsg = "*動的配列*" & vbCrLf For i = 0 To 3 myMsg = myMsg & myIntB(i) & vbCrLf Next i MsgBox myMsg
<実行例>
まとめ
配列の初期化は配列へ格納したデータを一旦クリアしたい場合などに頻繁に行う処理です。
通常の変数の初期化と似ていますが、変数の型や動的配列・静的配列の動作の違いに注意してコードを書くことがポイントとなります。