Excel VBAで配列を初期化する・再定義する:Erase,Array

VBAで配列を初期化するときには、Eraseステートメントや、Arrayステートメントを使います。以下で詳しく見ていきましょう。

配列の初期化とは

配列の初期化という場合は、2通りの意味があります。

配列に入っている要素だけを初期化する(数値は全て0、文字列は長さ0の文字列等)
配列の要素と、配列に格納出来る要素数を初期化する

それぞれの場合で方法が異なりますので、以下説明します。

配列の初期化方法1:Eraseステートメント

Excel-VBAで配列の初期化を行なう場合、Eraseステートメントを下記のように使います。

静的配列(配列に入る要素数が固定)の場合は、配列に入っている要素を0や長さ0の文字列で置き換え、配列の要素数は最初の定義のままとなります。従って、この時点ではメモリ上で配列用に確保した領域は解放されていませんが、これについてはマクロ実行終了と同時に解放されます。

動的配列(配列に入る要素数が可変)の場合は、配列の要素もメモリ上の領域も合わせて解放するという、文字通りの初期化を行ないます。

配列の初期化方法2:Array()ステートメント(動的配列のみ可能)

動的配列に限り、下記の方法でも初期化が可能です。静的配列では使用できませんので注意が必要です。

マクロ例:

UBound関数とLBound関数は、あわせて配列のサイズを調べる際に多く使われます。UBound関数が配列で指定した中のインデックス番号の最大値を、LBound関数が最小値を返します。要素が空の配列を代入することによって、配列の初期化が可能です。

マクロ作成・実行上の注意点

下記の方法では、配列の初期化は出来ません(実行時エラーとなり、処理が中断します)。

マクロ例:

上述の通り、配列に直接0を代入することはできません。

また、動的配列で要素数を再定義するために使用するReDimステートメントを、予め要素が入っている動的配列に対し実行すると初期化したのと同じこととなってしまいます。

マクロ例:

この場合、ReDim直前までpreArray(0)の要素として入っていた100が、ReDimによって配列そのものを再定義されてしまったため、要素も全て消去されていまいました。

動的配列ではこのような意図しない初期化をしてしまう事がありますので、予め配列に入れた要素を消さないで再定義する場合はReDim Preserve ステートメントを使用します。

マクロ例:


Welcome to UX MILK

UX MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。

このサイトについて