配列を宣言する

配列は、DimStaticPrivate、または Public ステートメントを使用して、他の変数と同じように宣言されます。 (配列ではない) スカラー変数と配列変数の違いは、一般的に配列のサイズを指定する必要があるという点です。 サイズが指定された配列は固定サイズの配列です。 プログラムの実行中にサイズを変更できる配列は動的な配列です。

配列のインデックスが 0 または 1 のいずれから開始されるかは、Option Base ステートメントの設定によって決まります。 Option Base 1 を指定しないと、すべての配列インデックスがゼロから始まります。

固定長の配列を宣言する

次のコードでは、固定サイズ配列が、11 行 11 列の Integer 配列として宣言されています。

Dim MyArray(10, 10) As Integer 

最初の引数は行を、2 番目の引数は列を表します。

他の変数宣言と同様、配列のデータ型を指定しない限り、宣言された配列の要素のデータ型は Variant です。 配列の各数値 Variant 要素では 16 バイトが使用されます。 各文字列 Variant 要素では 22 バイトが使用されます。 できるだけコンパクトなコードを記述するには、配列を、Variant 以外のデータ型として明示的に宣言します。

次のコードは、複数の配列のサイズを比較しています。

' Integer array uses 22 bytes (11 elements * 2 bytes). 
ReDim MyIntegerArray(10) As Integer 
 
' Double-precision array uses 88 bytes (11 elements * 8 bytes). 
ReDim MyDoubleArray(10) As Double 
 
' Variant array uses at least 176 bytes (11 elements * 16 bytes). 
ReDim MyVariantArray(10) 
 
' Integer array uses 100 * 100 * 2 bytes (20,000 bytes). 
ReDim MyIntegerArray (99, 99) As Integer 
 
' Double-precision array uses 100 * 100 * 8 bytes (80,000 bytes). 
ReDim MyDoubleArray (99, 99) As Double 
 
' Variant array uses at least 160,000 bytes (100 * 100 * 16 bytes). 
ReDim MyVariantArray(99, 99) 

配列の最大サイズは、オペレーティング システムおよび使用できるメモリ容量によってそれぞれ異なります。 システムで使用できる RAM の容量を超える配列を使用すると、データをディスクから読み取ったりディスクに書き込んだりする必要があるので、処理速度が低下します。

動的な配列を宣言する

動的配列を宣言すると、コードの実行中に配列のサイズを変更できます。 次の例に示すように、StaticDimPrivate、または Public ステートメントを使用し、配列を宣言します。かっこ内は空にしてください。

Dim sngArray() As Single 

注意

ReDim ステートメントを使用すると、プロシージャ内で配列を暗黙的に宣言できます。 ReDim ステートメントを使用するときは、配列の名前のスペルを間違えないように気を付けてください。 Option Explicit ステートメントがモジュールに含まれていても、2 番目の配列が作成されます。

配列の範囲内のプロシージャで、ReDim ステートメントを使用して、ディメンション数を変更し、要素数と各ディメンションの上限と下限を定義します。 ReDim ステートメントを使用すると、動的配列を必要な回数だけ変更できます。 ただし、変更のたびに、配列内の既存の値は失われます。 配列内の既存の値を保持しながら、その配列を拡張するには、 ReDim Preserve を使用します。

たとえば、次のステートメントでは、元の要素の現在の値を保持しながら、配列を 10 要素分だけ拡張します。

ReDim Preserve varArray(UBound(varArray) + 10) 

注意

Preserve キーワードを動的配列で使用する場合は、最後のディメンションの上限のみを変更できます。ディメンション数を変更することはできません。

関連項目

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。