配列変数の宣言(多次元)

多次元の配列変数の作成方法と多次元に関する解説

'2次元配列の宣言
Dim 多次元配列(3, 5) As String

多次元配列とは、通常の配列は1次元で表現されるのに対し、2次元以上の配列が多次元配列となります

この次元というものは、現実世界でいう次元とはイメージが違います
次元というのはデータの集合体であり、そのグループ分けされたものが別次元です

もはや、訳が分かりませんね
実際に、コードによって生成された変数を確認すると少し分かり易いです

多次元配列を宣言したときの状態
生成された多次元配列

ローカルウィンドウの画像です
例コードのある処理を実行した際に、2次元の配列が作成されます

青の行は変数名なので、これ以下のものが実際のデータ範囲です

すぐ下に「多次元配列(0)」があります、その中にはさらに6つの変数が存在しています
ようするに、次元数とは階層数と同じようにイメージしてもらうと画像と一致します

また、型の列を確認すると、青の行では「String(0 to 3,0 to 5)」となっています

これは要素のインデックスの下限と上限が表示されています
つまり、1次元は「0,1,2,3」の4要素、2次元は「0,1,2,3,4,5」の6要素が作成されていることが分かります

下限は変更可能ですが、常に「0」で考えるようにしてください
これは、この配列データの個数を数える場合に影響があることや、標準の設定をわざわざ変更することによるコードの可読性低下などが理由です

これに関しては変更するコードを書かなければ、常に「0」になるので、あまり意識しなくてもいいと思います

そして、1次元の「3」や2次元の「5」というインデックス最大値を取得するのがUbound関数です、これを利用して配列データの個数は取得します

この関数の解説は以下の記事で行っています

この次元数自体は、どんどん増やしていくことが可能です

Dim 多次元配列(3, 5, 8) As String

この様に、引数の数値を増やしていくだけです
これで、3次元配列が作成されます

ただ、次元数が増えすぎると管理が大変になるため、実用性で考えると2次元で十分かな
3次元ぐらいまでなら、なんとか管理できるけど、4次元以上になるとかなり複雑な配列になるのでコードも組むの大変でバグめっちゃ出そうやので、自分はしません

なにより、3次元以上はセルへの一括出力ができません
ワークシートは縦と横の2次元で表現されているためです

2次元配列は、セルへの一括出力が可能です

また、この多次元は静的、動的配列のどちらにも使用可能で使用方法もそれぞれの宣言に引数の数値をコードの様に記載するだけです

再定義時の注意点

多次元配列使用時は、Preserveキーワードでの再定義が行えません
最後の次元数は変更可能ですが、それ以前の次元数の再定義は行えません

ReDim 動的配列(5, 5, 5)

まず、最初にこのコードで3次元のそれぞれに要素数を定義します
その後、再定義を行う際に注意する必要が出てきます

ReDim Preserve 動的配列(5, 5, 6)
→→→ 実行可能

この様に最後の次元数の変更は可能です
当然、キーワードを使用しているので既存のデータは保持されています

ReDim Preserve 動的配列(5, 6, 5)
ReDim Preserve 動的配列(6, 5, 5)
→→→ 実行不可

こちらのように、最後の次元数以外の変更は出来ません
実行時エラーが発生します

このキーワードを使用せずに次元数を再定義することは可能ですが、既存のデータは初期化されてしまいます

多次元配列の動的使用時は、どの次元数がどの時点で確定するかをしっかり見極めたうえで使用する必要があります