ous">

小さな在庫管理

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

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

この記事では、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演算子などがあります。

演算子の詳細は下記の記事で解説していますので、記事を参考に演算子の使い方を理解して、さまざまな条件を設定できるようになりましょう。

 

概要解説に戻る