ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

VBA 繰り返し処理 For Next ステートメントについて詳細解説! [VBA技術解説#11]

「同じ処理を何度も繰り返したい」――そんなとき、VBAの For Next ステートメント は非常に便利な構文です。

Excelでの業務効率化を目指す中で、複数のセルを順番に処理したり、条件に応じて繰り返し操作を行ったりする場面は少なくありません。こうした処理を手作業で行うのは非効率ですが、 For Next ステートメント を使えば、簡潔かつ柔軟に自動化できます。

本記事では、VBAでの繰り返し処理に使用する For Next ステートメント の使用方法を詳しく解説します。基本構文から、Stepによる増減の制御、ネストによる多重ループの記述方法、そしてExit For ステートメント などによるループを抜ける方法まで、実務で役立つポイントを押さえながら紹介していきます。

繰り返し処理を自在に扱えるようになると、VBAの活用範囲は一気に広がります。ぜひこの機会に、実践的な使い方を身につけましょう。

*For NextステートメントはFor Next文とも呼ばれますが、この記事ではFor Nextと表記を統一しています。


VBA技術解説

For Next ステートメント の構文

基本構文

開始値から終了値までの間、指定した処理を繰り返します。最も基本的な構文です。

For_Next 構文

For 変数 = 開始値 To 終了値
    処理1
Next [変数]

回数を格納する変数は、カウンター変数と呼ばれ、一般的に i, j, k などが使用されます。
[変数] は、省略可能です。

For_Next 例

Dim i As Long

For i = 1 To 5
    Cells(i, 1).Value = i
Next

1列目のセルに 1〜5 の値が順番に入力されます。

処理実行結果
実行結果
 

Step 構文

Step を使うことで、カウンター変数の増減数を指定できます。これにより、偶数・奇数だけを処理したり、Step -1 で逆順にループを回したりすることが可能です。

For_Step_Next 構文

For 変数 = 開始値 To 終了値 Step 増減数
    処理1
Next [変数]

Step の後に、増減数を記述します。

For_Step_Next 例

Dim i As Long

For i = 1 To 5 Step 2
    Cells(i, 1).Value = i
Next

奇数の時だけ処理が実行され、1列目のセルに 1, 3, 5 の値が入力されます。

処理実行結果
実行結果
 

ネスト(入れ子)

For Nextステートメントの繰り返し処理の中で、さらに別の繰り返し処理を行うことをネスト(入れ子)と呼びます。

たとえば、行ごとに列を処理するような場面では、外側のループで行を、内側のループで列を制御することで、2次元的な処理が可能になります。For Next ステートメント の中に、さらに For Next ステートメント を記述することで、こうした構造を実現できます。

For_(For_Next)_Next 構文

For 変数1 = 開始値1 To 終了値1
    For 変数2 = 開始値2 To 終了値2
        処理1
    Next [変数2]
Next [変数1]

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

1〜5行×1〜3列の範囲に、i + j の値が順番に入力されます。

処理実行結果
実行結果
 

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 ステートメント は、繰り返し回数が明確に決まっている場合に使用します。しかし、繰り返し回数が事前に分からない場合には、Do Loop ステートメント がよく使われます。
たとえば、セルの値が空になるまで処理を続けたい場合や、特定の条件が満たされるまで繰り返したい場合などに適しています。

下記の記事では、VBAでの繰り返し処理に使用する、Do Loop ステートメントの使用方法を解説していますので、参考にしてください。

 

ループを抜ける方法

For Next ステートメント の繰り返し処理の途中で、ループから抜ける方法について解説します。条件に応じて処理を中断したり、特定の位置へジャンプしたりすることで、より柔軟な制御が可能になります。
 

Exit For ステートメント

Exit For ステートメント は、For Next ループの途中で終了値に達する前に、ループを抜ける構文です。通常は If ステートメント と組み合わせて使用され、条件が成り立った場合にループを抜け、後続処理に移ります。
 

For_(Exit For)_Next 構文

Sub TEST()
For i = 1 To 10
    If Cells(i, 1).Value = "" Then
        Exit For    ' 条件成立でループ終了 →ここからジャンプ
    End If
Next i

MsgBox "ループ終了後の処理"    '←ここまでジャンプ

End Sub

1列目のセルが空白になった時点でループを終了し、後続の処理に移ります。
 

GoToステートメント

GoToステートメントは、指定したラベル(処理名:)までプログラムの流れをジャンプさせる構文です。ループだけでなく、後続処理もスキップしたい場合に使用されます。

For_(GoTo)_Next 構文

Sub TEST()
For i = 1 To 10
    If Cells(i, 1).Value = "" Then
        GoTo SkipProcess    ' 条件成立でジャンプ  →ここからジャンプ
    End If
Next i

    MsgBox "この処理はスキップされます"

SkipProcess:
    MsgBox "ジャンプ先の処理"        '←ここまでジャンプ

End Sub

ただし、GoToは処理の流れが分断されやすく、可読性が低下する可能性があるため、使用は慎重に行いましょう。
  

Exit Sub ステートメント

Exit Subステートメントは、プロシージャ全体を終了させる構文です。ループだけでなく、その後の処理も含めてすべてスキップされます。End Subにスキップするのではなく、プロシージャ自体を抜ける点が特徴です。

For_(Exit Sub)_Next 構文

Sub TEST()
Sub TEST()
For i = 1 To 10
    If Cells(i, 1).Value = "" Then
        Exit Sub    ' 条件成立でプロシージャ終了  →ここからジャンプ
    End If
Next i

MsgBox "この処理は実行されません"

End Sub
                                    '←ここまでジャンプ

このように、Exit Subはループの外の処理も含めて終了するため、エラーハンドリングや条件分岐と組み合わせて使うと効果的です。
 
 

デバッグ方法

ステップイン

ステップイン とは、VBAコードを1行ずつ順番に実行するデバッグ手法です。処理の流れや変数の値をリアルタイムで確認できるため、ロジックの確認やエラーの特定に役立ちます。
For Next ステートメント に限らず、VBAコード全体の動作確認に活用できるため、頻繁に使用される基本操作として覚えておきましょう。


実行したいプロシージャの、Sub からEnd Subまでの間にカーソルをおき、"F8"を押すとステップインが開始されます。
ステップイン

"F8"を押すごとに、黄色にハイライト表示された行のコードが実行され、次の行に移っていきます。
ステップイン

変数などにカーソルを合わせると格納された値が表示されます。
ステップイン

▶︎実行ボタンを押すと、End Sub まで、または、設定されたブレークポイントまで、プログラムが実行されます。
(▶︎実行ボタンの代わりに、"Ctrl"+"F8" を押しても同様の動作をします。)
ステップイン

■リセットボタンを押すとステップインは終了します。

 

その他の繰り返し処理

Do Loop ステートメント

For Next ステートメントは、繰り返し回数が明確な場合に使用しますが、繰り返し回数が不明な場合は、Do Loop ステートメントが適しています。
Do Loop を使うことで、条件にあわせて処理を繰り返すことができ、コードの可読性や管理性も向上します。

下記の記事では、VBAでの繰り返し処理に使用する、Do Loop ステートメントの基本構文や応用例について詳しく解説しています。ぜひ参考にしてください。

 

For Each Next ステートメント

VBAでは、コレクションに含まれるオブジェクトや、配列に含まれる要素を順に取り出し処理する場合に、For Each Nextステートメントがよく使用されます。
For Each Nextステートメントを使うことで、要素の数を意識せずに、すべての要素に対して効率的に処理を行うことができます。

下記の記事では、VBAでの繰り返し処理に使用する、For Each Next ステートメントの基本構文や活用例について詳しく解説しています。ぜひ参考にしてください。

 

技術解説まとめに戻る