【2次元配列を使いたい】入れ子のFor-Nextループの使い方も含め超丁寧かつ親切に解説!-Excel VBA Tips

Excel VBA Tips集-5

Excel VBAにおける2次元配列とは

2次元配列とは、簡単に言えば、「」のことです。従って、Excelの表は2次元配列そのものです。下記のイメージ図をご覧下さい。

vbaにおける二次元配列のイメージ-1

CellsプロパティCells(行番号, 列番号)という形式で、セルを指定しますよね。
例えば、Cells(2, 3)は2行目の3列目なので、C3セルですよね。

Excel VBAにおける2次元配列もこれと全く同じ構造を持っています

唯一違いがあるとすれば、配列は0番目から始まるので、一番最初の2次元配列のインデックス番号(添え字)は、(1, 1)ではなく、(0, 0)です

[スポンサードリンク]

Excel VBAにおける2次元配列の使い方

Dim 変数名(インデックス番号1, インデックス番号2) As データ型 

例:Dim ary(9, 9) As String

配列は0から始まるので、配列(9)と書くと、配列の要素数は10個ですよね。

なので、ary(9, 9)は10×10で100個のデータを入れることができる2次元配列ですね。

下記に最もベーシックな2次元配列のサンプルプログラムを掲載します。

[スポンサードリンク]

2次元配列のサンプルプログラム

この2次元配列のサンプルプログラムの実行結果は下記のようになります。

分かりやすくするために、最初にこのサンプルプログラムの実行結果を示します。

【2次元配列のサンプルプログラムの実行結果】

2次元配列のサンプルプログラムの実行結果-1

サンプルプログラム本文

この2次元配列のサンプルプログラムの実行結果を時系列で示すと下記のようになります。

※For文を入れ子にする(For-Nextの中にさらにFor-Nextを入れる)やり方は、特にプログラミング初心者の場合、慣れるまで分かりにくいので、下の方に、詳細な解説を掲載しています。

2次元配列のサンプルプログラムの実行結果(時系列版)-1

2次元配列のサンプルプログラムの実行結果(時系列版)-2

2次元配列のサンプルプログラムの実行結果(時系列版)-3

<For文の詳細な解説>

【★外側のFor文★】の1周目で、i,jの値がどのように変化するか理解できれば、このサンプルプログラムを簡単に理解することができます 😛 。

【★外側のFor文★】ではカウンタ変数「i」が、012の順番で変化します。

【★内側のFor文★】ではカウンタ変数「j」が、012の順番で変化します。

【★外側のFor文★】の1周目では、iの値はずっと0です。iの値が0のまま、【★内側のFor文★】に突入し、【★内側のFor文★】を3周し終えると、【★外側のFor文★】の1周目が終わります。

【★外側のFor文★】を1周する間に、【★内側のFor文★】を3周する。従って、【★外側のFor文★】を3周する間に、【★内側のFor文★】を9周する。2次元配列「ary(2, 2)」の要素数は3×3で9個(配列は0番目から始まるので{0,1,2}×{0, 1, 2})。9周することで、ary(i, j)に9個の値を代入することができる 😎 !

具体的には、【★外側のFor文★】の1周目では、iの値がずっと0のまま、【★内側のFor文★】に入り、このときjの値は、012と変化します。

従って【★外側のFor文★】の1周目では、(i, j)の値は(0, 0)⇒(0, 1)⇒(0, 2)と変化します。

【★外側のFor文★】の1周目では、iはずっと0のままな点に注意して下さいね。

故に、

は、【★外側のFor文★】を1周する間に、

ary(0, 0) = (0 + 1) * (0 + 1)

ary(0, 1) = (0 + 1) * (1 + 1)

ary(0, 2) = (0 + 1) * (2 + 1)

と変化します。

故に、

ary(0, 0)の値は1ary(0, 1) の値は2ary(0, 2)の値は3です

この行の具体値は、【★外側のFor文★】を1周目で、下記のように変化していきます。

Cells(0 + 1, 0 + 1) = ary(0, 0)

Cells(0 + 1, 1 + 1) = ary(0, 1)

Cells(0 + 1, 2 + 1) = ary(0, 2)

従って、

Cells(1, 1) = ary(0, 0) ⇒ A1セルに1を入力

Cells(1, 2) = ary(0, 1) ⇒ B1セルに2を入力

Cells(1, 3) = ary(0, 2) ⇒ C1セルに3を入力

となります。その結果、下記のような状態になります。

2次元配列のサンプルプログラムの実行結果(時系列版)-1

【★外側のFor文★】の1周目の流れを追うことができれば、2週目と3周目はもう簡単ですよね。

【★外側のFor文★】の2週目では、iの値はずっと1のままです。iの値が1のまま、【★内側のFor文★】を3周します(j012と変化)。その後、【★外側のFor文★】の3周目に入ります。

【★外側のFor文★】の3周目では、iの値はずっと2のままです。iの値が2のまま、【★内側のFor文★】を3周します(j012と変化)。その後、【★外側のFor文★】を抜け出し、マクロを終了します。

解説の最後にサンプルプログラムで用いた2次元配列と入れ子の(2重の)For-Nextループの関係図を掲載します。

2次元配列と入れ子のFor-Nextループの関係図

おまけ「九九」を表示するサンプルプログラム

プログラムの流れは上記のサンプルプログラムと全く一緒なので、比較的簡単に理解できると思います。

【実行結果】

vbaの2次元配列を利用した九九のサンプルプログラム

関連項目

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA