VBAでの配列初期化は?ArrayやEraseを使う。多次元も。

2020年4月27日VBAArray,Erase,VBA,ジャム配列,初期化,多次元,添字,配列

VBA配列について考えます。

VBAには、C言語やJava言語同様に、配列の仕組みがあります。

ただ、C言語とJavaがメインの私には、VBAの配列には少々戸惑いがありました。初期化方法に加えて、CやJavaと異なる部分について紹介していきます。

配列の宣言

宣言の形は複数あります。

1.Dim 配列名(添字の下限値 To 添字の上限値) As データ型名

C言語と異なり、VBAでは添え字(インデックス)の下限値を0以外に設定できます。例えば配列の要素数が5の場合、Dim myArray(1 To 5) As Integer

といった形です。C言語では宣言時には要素数を書きますが、VBAでは添え字を指定します。

VBAでの宣言では下限値を省略することができます。

2.Dim 配列名(添字の上限値) As データ型名

省略すると下限値は0になります。上の場合に下限値を省略すると、Dim myArray(5) As Integer となり、添え字は0から5なので要素数が6になります。

C言語と混同しないよう注意が必要です。

多次元配列の場合

VBAでも、もちろん多次元配列があります。

多次元配列の宣言も、1次元とさほど変わりません。添字の下限(省略可能)と上限を、カンマで区切ります。

Dim 配列名(添字の上限値, 添字の上限値) As データ型名

例えば、4行2列の配列であれば、

Dim myArray(3, 1) となります。

0,00,1
1,01,1
2,02,1
3,03,2

行と列、それぞれの添字の上限が3、1になるので宣言時に(3, 1)となります。

あぁ、C言語に慣れているととても違和感。

初期化

規定の初期値で初期化

VBAでは、それぞれデータ型の初期値(デフォルト値)が決められています。

いくつか紹介します。

  • 数値型(Integer、Longなど) 0
  • 文字列型 vbNullString
  • ブール型(boolean) FALSE

このような規定の初期値で初期化する場合は以下のようになります。

Erase 配列名

JavaやC++に詳しい方は、Eraseというとメモリから消されるイメージですが、VBAでは初期値に戻ることになります。

これで規定の初期値で、全要素が初期化されます。

多次元配列でも同じようにEraseで初期化できます。

任意の値で初期化

次は、自身で決めた値で初期化する場合です。

その時は、Arrayを使って初期化します。

配列名 = Array(1番目の要素の初期値, 2番目の要素の初期値, ・・・)

1番目の初期値という言い方は誤解を生みやすいですが、ここでは一番最初の添字に対する要素を意味しています。ようは前の要素から順番に値を設定していく形です。

ただArrayは1次元配列を前提としているようで、

myArray= Array(Array(20, 3), Array(21, 3), と入れ子にしてもコンパイルエラーとなります。

多次元配列の初期化の基本は、myArray(0, 0)=初期値 と一つずつ設定していくようになります。

ちなみに、コンパイルエラーとなる入れ子ですが、多次元配列をジャム配列にした場合には、これで初期化できます。

ネットでVBAの使い手さんの話を調べていると、多次元配列の多用は賢くないようがことが多く目にします。

実際にコードを書いていくと、任意の値で初期化することが本当に面倒です。

多次元配列を使用する際は、ひとまずジャム配列の使用を検討してみることをお勧めします。

ブログランキングに参加しています。