Excel VBAで2次元配列を宣言する

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】静的配列 宣言直後                                

Ary1【2】動的配列 宣言直後

Ary2

【3】動的配列(Ary2)に値を代入した直後

Ary3

【4】動的配列(Ary2)定義(Preserve使用)

Ary4

ワークシートとのやりとりを考慮した配列宣言

ExcelVBAにおいては、配列の各値をワークシートに書き写す、あるいはその逆、といった処理をよく行います。この際、配列のインデックス番号は特に指定しない限り"0"から始まるのに対し、セルのインデックス番号は"1"からですので、エラーを招くことがあります。配列宣言時にできる対策として、下記2通りの方法があります。

(1)配列宣言時、インデックスの開始番号を指定する

としてやると、インデックスの最小値が1となり、セルとの整合が取れます。 

(2)Option Baseステートメントを使用する

モジュール先頭部に以下のように宣言してやると、上記(1)と同じ効果が得られます。

Option Base 1

下記は、Option Base を有効にしたサンプルです。配列とセルのインデックス番号が一致しており、シンプルになります。セルA1、B1、A2、B2にはそれぞれ"あ"、"い"、"う"、"え"が入力されているものとします。

[実行結果]Ary5


Welcome to UX MILK

UX MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。

このサイトについて

UX MILKのディレクター募集