VBAで2次元配列を宣言する方法について説明します。
2次元配列とは
よく扱う1次元配列は、たとえば{0,1,2……}にように、一列に並んだようなものを指します。一方で2次元配列は、1次元目の要素と2次元目の要素が入れ子状になっているものを言います。以下のようなものは2次元配列です。
(1,0) | (1,1) | (1,2) | (1,3) |
(2,0) | (2,1) | (2,2) | (2,3) |
(3,0) | (3,1) | (3,2) | (3,3) |
2次元配列の宣言
2次元に限ったことではありませんが、配列は他の変数と同じように、プロシージャの先頭部で宣言するのが一般的です。要素(配列の中に入れるデータ)の数がはっきりしているときは静的配列、わからない、あるいは増減するような場合は、動的配列で宣言します。2次元なので、要素は2つ示します。
宣言の方法
[静的配列]
[動的配列]
[型]は、通常の変数と同様で、数値型、文字列型、バリアント型、日付型等を指定します。バリアント型以外の型指定をした場合は、通常の変数と同様、型違いの値を代入しようとすると(数値型に文字列など)、「型が違います」のエラーが発生します。
動的配列で宣言した場合は、値代入前に配列の大きさを、Redimを用いて再定義できます。構文は以下のとおりです。
途中で何度でも再定義が可能です。Preserveを記述すると、現在入っている値を残したまま、サイズの再定義が可能ですが、変更できるのは配列の最終次元(上記の場合ですと[要素数2])のみです。
実行例
下記は、静的配列と動的配列を宣言したものです。
[実行結果]
【1】静的配列 宣言直後
【2】動的配列 宣言直後
【3】動的配列(Ary2)に値を代入した直後
【4】動的配列(Ary2)定義(Preserve使用)
ワークシートとのやりとりを考慮した配列宣言
ExcelVBAにおいては、配列の各値をワークシートに書き写す、あるいはその逆、といった処理をよく行います。この際、配列のインデックス番号は特に指定しない限り"0"から始まるのに対し、セルのインデックス番号は"1"からですので、エラーを招くことがあります。配列宣言時にできる対策として、下記2通りの方法があります。
(1)配列宣言時、インデックスの開始番号を指定する
としてやると、インデックスの最小値が1となり、セルとの整合が取れます。
(2)Option Baseステートメントを使用する
モジュール先頭部に以下のように宣言してやると、上記(1)と同じ効果が得られます。
Option Base 1
下記は、Option Base を有効にしたサンプルです。配列とセルのインデックス番号が一致しており、シンプルになります。セルA1、B1、A2、B2にはそれぞれ"あ"、"い"、"う"、"え"が入力されているものとします。