Excel VBA|配列の初期化方法【2次元配列・動的配列・要素数】

エクセルVBA VBAの基礎・入門



配列の初期化方法がよくわからないという質問が結構来ます。

配列の初期化といっても2次元配列や要素数の初期化があり、まとめると以下のようになります。

  • 配列の初期化方法
  • 2次元配列の初期化方法
  • ReDimを使った動的配列の初期化方法

今回はVBAの配列の初期化方法について徹底的に解説していきますね☆



VBAの配列初期化方法

配列の初期化方法といっても1次元配列や2次元配列、動的配列など初期化方法は多岐にわたりますので、以下の初期化方法について解説していきます。

  • 配列の初期化方法
  • 2次元配列の初期化方法
  • ReDimを使った動的配列の初期化方法

配列の初期化方法

配列に代入されている値をまとめて初期化するには、Eraseステートメントを使います。

▶構文:Erase 配列名

Eraseステートメントは静的配列・動的配列のどちらにも使用可能です。

 

静的配列は、配列を宣言する際に、要素数と次元数が決まっている配列のことです。

これに対して、動的配列は要素数と次元数が決まっていない配列のことです。

 

Eraseステートメントは2次元配列にも使用可能です。

具体的には、配列名が「sHairetu」の場合にEraseステートメントで初期化するには、以下の記述になります。

Erase sHairetu 

Eraseステートメントで配列を初期化したときメモリの解放は静的配列と動的配列で以下のようになります。

  • 静的配列:配列の各要素に数字0や長さ0の文字列で初期化するため、メモリの解放は行われない。
  • 動的配列:配列の各要素の値を消去するため、メモリが解放される。

静的配列にEraseステートメントを使用した場合は要素数は維持されますが、動的配列の場合は要素数が未定の状態にまで解放されます。

つまり動的配列の場合は、「Dim sHairetu()」となり、要素数が未定の状態になります。

静的配列をEraseステートメントで初期化した場合は、型の種類によって実行結果が以下のようになります。

【静的配列の型の種類】

配列の型 Eraseステートメント実行結果
数値 「0」で初期化
文字列(可変長) 長さ0の文字列「””」で初期化
文字列(固定長) 「0」で初期化
バリアント型 Empty型に設定される
オブジェクト配列 「Nothing」で初期化

2次元配列の初期化方法

2次元配列の初期化方法はEraseステートメントを使います。

▶構文:Erase 配列名

Eraseステートメントは静的配列・動的配列のどちらにも使用可能です。

Eraseステートメントの詳細はひとつ上の見出しの「配列の初期化方法」を参考にしてくださいね。

ReDimを使った動的配列の初期化方法

動的配列の場合は、「ReDim」を使って配列を初期化することができます。

▶ReDimを使った初期化:ReDim 配列名(要素の最大値)

具体的には、動的配列を

Dim 配列名()

で宣言した後、実際に動的配列に値を格納するために動的配列の要素の最大値を

ReDim 配列名(要素の最大値)、例えば、ReDim sHairetu(2)

のように指定します。

たとえば要素の最大値を(2)と指定した場合は、配列は0,1,2の3つの要素を持つことになります。

その後配列に値を格納した後、改めて

ReDim 配列名(要素の最大値)、例えば、ReDim sHairetu(2)

のように指定することで、配列に格納した値が初期化されます。

ReDimを使った配列の初期化のサンプルコードは以下のとおりです。

1回目のReDimで配列の要素数を設定して値を格納した後、2回目のReDimで再度要素数を設定すると、値が初期化されている状況をメッセージボックスで表示しています。

Sub ReDimで初期化()
  Dim sHairetu() As String
  'ReDimで要素の最大値を設定
  ReDim sHairetu(2)
  '配列に値を格納
  sHairetu(0) = "マグロ"
  sHairetu(1) = "ハマチ"
  sHairetu(2) = "イワシ"

  str1 = "初期化前"
  For i = 0 To 2
    str1 = str1 & "," & sHairetu(i)
  Next i

  'ReDimで配列を初期化
  ReDim sHairetu(2)
  str2 = "初期化後"
  For i = 0 To 2
    str2 = str2 & "," & sHairetu(i)
  Next i

  MsgBox str1 & vbCrLf & str2
End Sub

【実行結果】

ちばみに、もし配列に格納した値を保持したまま配列の要素数を変更したい場合は、

ReDim Preserveステートメントを使用します。

ReDimで初期化できるのは動的配列の場合だけです。静的配列は上述のEraseで初期化します。

まとめ

今回は、配列の初期化についてお伝えしてきました。

配列の初期化方法は、Eraseステートメントを使い、構文は以下のとおりです。

▶構文:Erase 配列名

2次元配列の初期化方法についても、Eraseステートメントを使えば初期化できます。

動的配列の初期化にはReDimを使う方法もあり、構文は以下のように記述します。

▶ReDimを使った初期化:ReDim 配列名(要素の最大値)

VBAでは、値をワークシートのセルに見立てた配列に格納した状態で計算をした後、ワークシートに転記する方法がよくつかわれます。

その際に配列の初期化を使うことは少なくないですので、今回のことが少しでも役にたてば幸いです☆




VBAの基礎・入門
ブイサバ【Excel VBAサバイバル】~とりあえずここに来れば解決できる~

コメント

タイトルとURLをコピーしました