VBA_ループ処理で配列、二次元配列を操作する方法

この記事を読むのに必要な時間は約 6 分です。

 

ループ処理で配列を操作する方法です。

 

配列にも、1次元配列や2次元以上の配列があります。
1次元配列は、数字が一直線に並んでいるところを想像してもらえれば分かりやすいかもしれません。
2次元配列は、カレンダーやエクセルの表などが相当します。

 

1次元でも2次元でも、For-Nextのループ処理で対応できます。
For-Nextの使い方はこちらの記事も参考にしてみてくださいね。

 

それでは、ループ処理で配列を操作する方法です。

スポンサーリンク

配列の要素数を確認する

For文でループして配列を操作するなら、インデックス番号がドコからドコまであるのか確認する必要があります。

 

確認には、UBound関数、LBound関数を使います。

 

  • UBound関数:最大のインデックス番号を返す
  • LBound関数:最小のインデックス番号を返す

UBound関数、LBound関数の使い方

UBound関数、LBound関数の引数は次のようになります。

 

1次元配列の場合は2つ目の引数を省略できますが、2次元配列以上なら指定が必要です。

 

配列()という配列があったとすると、次のようにインデックス番号を取得できます。

 

2次元配列の場合、どうなるんでしょうか。

 

配列(a, b)があったとすると、

のように書きます。
2つ目の引数が、どの次元なのかを表すわけです。

1次元配列から、For~Next文でループして値を取り出す

サンプルプログラムです。

 

配列sTestArray()にSplit関数で値を入れて、For~Nextでループし値を取り出します。

 

実行結果がこちらです。

VBA_ループ処理で配列、二次元配列を操作する方法

 

Split関数の使い方については、こちらの記事

【VBA入門】配列に値を格納する方法3つ

の3番目のところを参考にしてくださいね。

2次元配列から値を取り出す

1次元配列のときはループも1つでした。

 

ところが2次元配列になると、1次元目用のループと2次元目用のループが必要になります。
ループ処理の中にループ処理を入れて、二重ループさせるわけです。

二重にループさせる

まずはサンプルプログラムをご覧ください。

 

2次元配列vArrは、エクセルシートからRangeでとってきています。

VBA_ループ処理で配列、二次元配列を操作する方法

 

2次元配列vArrを操作するための二重ループは、次のようなイメージです。

 

lCntYのカウンタでループしている中に、lCntXのループ処理が入っています。

 

カレンダーを思い浮かべてもらうと分かりやすいですが、
左上から日付が進み、1週間経つと次の週に移りますよね。
そしてまた1週間が始まります。

 

Xが曜日なら、Yは週。
lCntXで横方向のループが1つ終わると、次のlCntYの中でまたlCntXのループが続くんです。

 

実行結果は次の通り。

VBA_ループ処理で配列、二次元配列を操作する方法

2次元配列に格納された1~30の数字が順に表示されました。

スポンサーリンク

まとめ:VBAのループ処理で配列、二次元配列を操作する方法

For~Nextのループ処理を使って、配列から値を取り出しました。

 

1次元配列ならループも1つですが、2次元配列は二重ループになります。

 

どこからどこまでループさせればいいのかを求めるには、LBound関数とUBound関数を使うんでしたね。

 

これだけ分かっていれば、ちょっと配列を使えるはずです。

 

ぜひ参考にしてみてくださいね。

 

最後までお読みいただき、ありがとうございました。