技術情報
コードエディターの起動
配列には固定長配列(あらかじめ配列のサイズを決める)と動的配列(プログラム中で配列サイズを変更することができる)の2種類があります。

固定長配列
固定長配列宣言の方法には以下の3タイプがあります。
配列の参照可否については、変数と同じ扱いとなります。
(1) Dim "配列名"("配列サイズ, ...") As "データ型"
サブルーチン内、関数内、モジュールの先頭で配列を宣言する際に用います。
サブルーチン内、関数内で宣言した場合は、その中でのみ参照可能な配列となります。
モジュールの先頭で宣言した場合は、(2)と同等の扱いとなります。
(2) Private "配列名"("配列サイズ, ...") As "データ型"
モジュールの先頭で配列を宣言する際に用います。
モジュール内で参照可能な配列となります。
(3) Public "配列名"("配列サイズ, ...") As "データ型"
モジュールの先頭で配列を宣言する際に用います。
すべてのモジュールで参照可能な配列となります。

"配列名"は、自由な名前をつけることができます。
但し、システムで使用されている単語(If、Publicなどの予約語)は使用できません。

"データ型"を省略した場合には、Variant型と見なされます。

"配列サイズ"は、配列の要素数を整数で指定します。
多次元配列の場合には、要素数をカンマ区切で複数指定します。
また、添字の範囲を指定した宣言の仕方も可能です。
配列の添字の最大値は要素数と同じです。
配列の添字の最小値はデフォルトでは 0 です。
Option Base 1 とモジュールの先頭で宣言すると、添字の最小値は 1 となります。

(例)
' 要素数10の一次元配列
Dim IntDataA(10) As Integer
' 要素数2と10の二次元配列
Dim IntDataB(2,10) As Integer
' 添字 5~9 の一次元配列
Dim IntDataC(5 To 9) As Integer
動的配列
動的配列宣言の方法には以下の3タイプがあります。
配列の参照可否については、変数と同じ扱いとなります。
宣言時には配列サイズを未指定で宣言します。
(1) Dim "配列名"() As "データ型"
サブルーチン内、関数内、モジュールの先頭で配列を宣言する際に用います。
サブルーチン内、関数内で宣言した場合は、その中でのみ参照可能な配列となります。
モジュールの先頭で宣言した場合は、(2)と同等の扱いとなります。
(2) Private "配列名"() As "データ型"
モジュールの先頭で配列を宣言する際に用います。
モジュール内で参照可能な配列となります。
(3) Public "配列名"() As "データ型"
モジュールの先頭で配列を宣言する際に用います。
すべてのモジュールで参照可能な配列となります。

"配列名"は、自由な名前をつけることができます。
但し、システムで使用されている単語(If、Publicなどの予約語)は使用できません。

"データ型"を省略した場合には、Variant型と見なされます。

"配列サイズ"は、宣言時には指定しません。
プログラム中で配列サイズを指定します。
配列サイズの指定方法には、以下の2タイプがあります。
(4) ReDim "配列名"("配列サイズ, ...") As "データ型"
配列サイズで指定したサイズの配列をプログラム中で指定します。 ReDimを実行するたびに、配列に既に保持されているデータは初期化されます。
多次元配列の次元数の変更、各次元の添字の最小値、最大値(要素数)を変更することができます。
(5) ReDim Preserve "配列名"("配列サイズ, ...") As "データ型"
(4)とは異なり、すでに配列にデータがある場合、そのデータを保持したまま、要素数のみ変更します。
次元数の変更や、各次元の添字の最小値を変更することはできません。
また、多次元配列の場合は、最後の次元の要素数のみ変更することができます。
追加された要素数についてのみデータが初期化されます。
元の要素数より小さい要素数を指定した場合には、上限を超えた要素のデータは破棄されます。

(例)
' 配列を定義します
Dim IntDataA() As Integer
' 二次元配列を要素数5で設定します
ReDim IntDataA(5,5)
' 配列に値を代入します
IntDataA(5,5) = 25
' 既存の値を保持したまま、要素数を再設定します
'2番目の配列サイズのみ変更が可能です。
ReDim Preserve IntDataA(5,10)
' 既存の値が初期化されていないことを確認します
' 「5」が表示されます。
VBA.MsgBox IntDataA(5,5)