Excel VBAの繰り返し:For Next
VBA の For Next 文は繰り返し処理を行うための構文です。ここでは、For Next 文の使い方について説明します。
For Next の使い方
For Next の最もシンプルな構文は以下の通りです。
For カウンタ変数 = 初期値 To 終了値 何らかの処理 Next
For Next 文では、以下の順序で処理が行われます。
- カウンタ変数に初期値に設定した値を代入します。
- カウンタ変数と終了値を比較し、終了値以下ならブロック内の処理を実行します。
- カウンタ変数に1を加算します。
1は初回のみ実行されます。2〜3はカウンタ変数が終了値より大きくなるまで繰り返し実行されます。
たとえば、次のように「こんにちは!」と5回繰り返す処理があるとします。
' イミディエイトウィンドウに「こんにちは!」を5回表示 Debug.Print "こんにちは!" Debug.Print "こんにちは!" Debug.Print "こんにちは!" Debug.Print "こんにちは!" Debug.Print "こんにちは!"
For Next を使うと次のように記述することができます。
Dim i As Integer For i = 1 To 5 Debug.Print "こんにちは!" Next
上の例では、繰り返しは5回実行されます。上の2つのコードは、どちらも同程度の記述量になりますが、もしこの繰り返しを1000回繰り返す場合には For Next を使った方が、より簡潔に記述することができます。
カウンタ変数を参照する
カウンタ変数はブロック内の処理で参照することができます。
以下はカウンタ変数を利用して回数を表示する例です。
Dim i As Integer For i = 1 To 5 Debug.Print i & "回目" Next
実行結果
1回目 2回目 3回目 4回目 5回目
カウンタ変数の名前は慣習的に i, j, k を使うことが多いです。
カウンタの増減値を変更する:Step
カウンタ変数はデフォルトでは繰り返しのたびに1ずつ加算されていきますが、Step を使うことで繰り返しで加算されていく増減値を変えることもできます。
For カウンタ変数 = 初期値 To 終了値 Step 増減値 [何らかの処理] Next
以下の例では i が2ずつ加算されていきます。
' 1から10までの奇数を表示 Dim i As Integer For i = 1 To 10 Step 2 Debug.Print i Next
実行結果
1 3 5 7 9
Step にマイナスの値を設定した場合は、初期値から値が終了値より小さくなるまで繰り返し処理が実行されます。
' 5から0までカウントダウンしてみる Dim i As Integer For i = 5 To 0 Step -1 Debug.Print i Next
実行結果
5 4 3 2 1 0
繰り返し処理を途中で終了する:Exit For
For Next の繰り返し処理を途中で終わりたい場合は、Exit For を使います。
例えば1から100まで値を足していき、100を超える場合は計算をやめるという処理を実装してみます。
Dim sum As Integer sum = 0 Dim i As Integer For i = 1 To 100 sum = sum + i ' sum に i を加算していく If sum > 100 Then ' sumが100を超えたかどうか判定 Exit For End If Next ' iの値とsumの値を表示 Debug.Print "iの値:" & i, "合計値:" & sum
実行結果
iの値:14 合計値:105
For Nextでセルを編集
ここまで Debug.Print を使い処理の説明をしてきましたが、実際のプログラムではセルの値を編集するために For Next を使うことが多いです。
Cells とカウンタ変数を使い、指定した行と列のセルに値を代入します。以下のようにセルを指定することができます。
Cells(行番号, 列番号)
以下は行と列のセルに値を設定する例です。
Dim i As Integer For i = 1 To 5 Cells(i, 1) = i Cells(i, 2) = i * i ' iの2乗 Next
For Next で配列を操作する
配列を操作する場合にも For Next は便利です。配列の場合 UBound(配列変数名) で配列の最大値が取得でき、それを終了値の値と設定することで配列の要素数だけ繰り返すことができます。
' 動物の配列を準備 Dim animals(5) As String animals(0) = "ぞう" animals(1) = "きりん" animals(2) = "うま" animals(3) = "いぬ" animals(4) = "ねこ" ' 繰り返し処理でセルに値を代入 Dim i As Integer For i = 0 To UBound(animals) Cells(i + 1, 1) = animals(i) Next
配列のインデックスは0から、Cells のインデックスは1から始まるので、注意してください。