この記事では、VBAでの繰り返し処理に使用する、For Nextステートメントの使用方法を解説します。
For Next の基本構文から、Step・ネストなどの記述方法を解説します。
また、Exit For ステートメントなどの、ループを抜ける方法についても解説していきます。
*For NextステートメントはFor Next文とも呼ばれますが、この記事ではFor Nextと表記します。
VBA関連解説
For Nextステートメントの構文
VBAでは、繰り返し回数が判っている場合の繰り返し処理に、For Nextステートメントがよく使用されます。
基本的な記述方法から、Step・ネストまで、例示しながら解説していきます。
ワークシート上のセルに対して、処理を実行した結果も例示していきます。
基本構文
開始値から終了値までの間、処理を繰り返します。
最も基本の構文です。
For_Next 構文
For 変数 = 開始値 To 終了値 処理1 Next [変数]
[変数] は、省略可能です。
For_Next 例
Dim i as Long For i = 1 To 5 Cells(i, 1).Value = i Next
回数を格納する変数は、カウンター変数と呼ばれ、一般的に i , j , k を用います。
処理実行結果
Step構文
開始値から終了値までの間の、カウンター変数の増減数を変えて、処理を繰り返します。
For_Step_Next 構文
For 変数 = 開始値 To 終了値 Step 増減数 処理1 Next [変数]
For_Step_Next 例
Dim i as Long For i = 1 To 5 Step 2 Cells(i, 1).Value = i Next
奇数の時だけ、処理が実行されます。
処理実行結果
ネスト(入れ子)
For Nextステートメントの繰り返し処理の中で、さらに繰り返し処理をすることをネスト(入れ子)といいます。
繰り返し処理の中で、さらに別の開始値から終了値までの間、繰り返し処理を実行します。
For Nextステートメントの中にFor Nextステートメントを追加していきます。
For_(For_Next)_Next 構文
For 変数1 = 開始値1 To 終了値1 For 変数2 = 開始値2 To 終了値2 処理1 Next [変数1] Next [変数2]
For_(For_Next)_Next 例
Dim i as Long Dim j as Long For i = 1 To 5 For j = 1 To 3 Cells(i, j).Value = i + j Next Next
処理実行結果
ループを抜ける方法
For Nextの繰り返し処理の途中で、ループから抜ける方法を解説します。
Exit Forステートメント
Exit Forステートメントは、For Nextのループの途中で終了値に達する前に、ループを抜ける構文です。
For_(Exit For)_Next 構文
Sub TEST() For 変数 = 開始値 To 終了値 If 条件1Then Exit For '→ここからスキップ End Next 後続処理 '←ここまでスキップ End Sub
For Next ステートメントの中に記述されるExit For ステートメントは、If ステートメントと組み合わせて使われ、条件が成り立った場合にループを抜け、後続処理に移ります。
GoToステートメント
GoToステートメントは、GoTo後述の処理名:の記述部分まで、プログラムをスキップさせる構文です。
For_(GoTo)_Next 構文
Sub TEST() For 変数 = 開始値 To 終了値 If 条件1 Then GoTo 処理名 '→ここからスキップ End Next 後続処理 処理名: 処理1 '←ここまでスキップ End Sub
For Next ステートメントの中に記述されるGoTo ステートメントは、If ステートメントと組み合わせて使われ、条件が成り立った場合にループを抜け、後続処理も飛ばして、処理名:の記述部分までスキップします。
GoToステートメントは、GoTo記述の前にもスキップできますが、処理が分離してしまうので、可読性の観点からも、適度な使用をこころがけましょう。
Exit Sub ステートメント
Exit Subステートメントは、プロシージャを抜けてサブプロシージャの呼び出し元にスキップさせる構文です。End Subにスキップするのではなく、プロシージャ自体を抜けます。
For_(Exit Sub)_Next 構文
Sub TEST() For 変数 = 開始値 To 終了値 If 条件1Then Exit Sub '→ここからスキップ End Next 後続処理 End Sub '←ここまでスキップ
For Next ステートメントの中に記述されるExit Sub ステートメントは、If ステートメントと組み合わせて使われ、条件が成り立った場合にループを抜け、プロシージャ自体も抜けます。
注意点等
For Nextステートメントの注意点等を確認していきます。
Nextの後の変数記述
For Next構文のNext 後の変数記述は省略できます。ここまでの例文では、変数は省略していましたが、ネストする時は、可読性の観点からも省略せずに記述することをおすすめします。
For_(For_Next)_Next 例
Dim i as Long Dim j as Long For i = 1 To 5 For j = 1 To 3 Cells(i, j).Value = i + j Next j Next i
ステップイン
For Nextステートメントをデバッグする方法に、ステップインがあります。For Nextに限らず頻繁に使用するので、使用方法を覚えておきましょう。
VBAコードを1行ずつ実行することを、ステップインといいます。
実行したいプロシージャの、Sub からEnd Subまでの間にカーソルをおき、"F8"を押すとステップインが開始されます。
"F8"を押すごとに、黄色に表示された行のコードが実行され、次の行に移っていきます。
変数などにカーソルを合わせると格納された値が表示されます。
▶︎実行ボタンを押すと、End Sub まで、または、設定されたブレークポイントまで、プログラムが実行されます。
(▶︎実行ボタンの代わりに、"Ctrl"+"F8" を押しても同様の動作をします。)
■リセットボタンを押すとステップインは終了します。
回数不明の繰り返し処理
For Next ステートメントは、繰り返し回数が判っているときには使用できますが、繰り返し回数が不明の時は、Do Loop ステートメントがよく使われます。
下記の記事では、VBAでの繰り返し処理に使用する、Do Loop ステートメントの使用方法を解説していますので、参考にしてください。
コレクション・配列の繰り返し処理
VBAでは、コレクションに含まれるオブジェクトや、配列に含まれる要素を順に取り出す場合の繰り返し処理に、For Each Nextステートメントがよく使用されます。
下記の記事では、VBAでの繰り返し処理に使用する、For Each Next ステートメントの使用方法を解説していますので、参考にしてください。
演算子
For Nextステートメントの構文例ででてきた、"=" や "<" などは演算子とよばれ、値の比較などに使われます。
演算子には、"=" "<" などの比較演算子、その他、算術演算子や論理演算子、文字列比較に使われるLike演算子などがあります。
演算子の詳細は下記の記事で解説していますので、記事を参考に演算子の使い方を理解して、さまざまな条件を設定できるようになりましょう。
概要解説に戻る