配列の中身を初期化する方法を解説します。
ここでいう「配列の中身を初期化」とは、
{1,2,3}を{0,0,0}にしたり、{"A","B","C"}を{"","",""}にすることを指します。
この処理は配列の種類によって方法が変わり、
- 静的配列であればEraseステートメント
- 動的配列であればReDimステートメント
- Variant変数に代入された配列であればReDimまたは再代入
の方法でそれぞれ対応します。
静的配列の中身を初期化する - Eraseステートメント
静的配列の中身を初期化するにはEraseステートメントを利用します。
' Variant型の静的配列 Dim 配列(1 To 3) As Variant 配列(1) = 1: 配列(2) = 2: 配列(3) = 3 Erase 配列 ' ここで配列の中身は(Empty,Empty,Empty)
静的配列(Dimと同時に要素数を定数で定義する配列)であれば、
Eraseステートメントは「全要素の初期化」を行ってくれます。
Long型配列であれば0に、String型配列であれば""と、
それぞれの型に合わせた初期化を行ってくれるため便利です。
' Long型の静的配列 Dim 配列(1 To 3) As Long 配列(1) = 1: 配列(2) = 2: 配列(3) = 3 Erase 静的Long配列 ' ここで配列の中身は(0,0,0)
Dim 配列(1 To 3) As String 配列(1) = 1: 配列(2) = 2: 配列(3) = 3 Erase 配列 ' ここで配列の中身は("","","")
動的配列の中身を初期化する - ReDimステートメント
静的配列では便利だったEraseステートメントですが、
動的配列(Dimでは()だけを書いて置き、ReDimで要素数を指定する配列)では、
「配列ごと初期化」してしまうため各要素の初期化には使えません。
' Variant型の動的配列 Dim 配列() As Variant ReDim 配列(1 To 3) 配列(1) = 1: 配列(2) = 2: 配列(3) = 3 Erase 配列 ' ここで配列の中身はVariant() ' 要素数3、次元数1であることもリセットされてしまう。 ' Variant型であることだけはリセットされない。他の型も同様。
動的配列の要素数はそのままに中身を初期化する場合は、
ReDimステートメントを再度実行します。
' Variant型の動的配列 Dim 配列() As Variant ReDim 配列(1 To 3) 配列(1) = 1: 配列(2) = 2: 配列(3) = 3 ReDim 配列(1 To 3) ' ここで配列の中身は(Empty,Empty,Empty) ' 静的配列のErase「すべての要素を初期値に戻す」をやりたい場合は、 ' 動的配列ならReDimを用いればOKです。
要素数をそのままにといいつつ、
実際のところは要素数を指定しなおしている点にご注意ください。
要素数が不定の配列の全要素を初期化する方法はありませんので、
その場合はForEachステートメントで愚直にEmptyを代入するしかありません。
Variant変数に代入された配列を初期化する
Variant変数に代入された配列に対しても、
Eraseステートメントは「配列ごと初期化」という処理になってしまいます。
' Variant変数に配列を代入 Dim 配列 As Variant 配列 = Array(1, 2, 3) Erase 配列 ' ここで配列の中身はVariant() ' 要素数や次元数はリセットされてしまう。
Variant変数をストレートに要素のみ初期化する方法はありませんので、
変数らしく、単純に空の配列を代入しなおして対応してください。
' Variant変数に配列を代入 Dim 配列 As Variant 配列 = Array(1, 2, 3) ' 配列の要素を初期状態に戻す場合は以下のいずれかで対応 ReDim 配列(0 To 2) 配列 = Array(Empty, Empty, Empty)