和風スパゲティのレシピ

日本語でコーディングするExcelVBA

配列の中身を初期化する - Erase/ReDim

配列の中身を初期化する方法を解説します。

ここでいう「配列の中身を初期化」とは、
{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)