2重ループの内側から一気に外側のループを抜けるには
2重ループの内側から一気に外側のループを抜けるには、異なる繰り返し処理の構文を組み合わせます。以下がサンプルマクロです。
Private Sub ForLoopExit()
Dim i As Long
Dim num As Long
For i = 1 To 10
num = 1
Do Until num = 2
'条件に合う場合は外側のループも一気に抜ける
If i = 5 Then Exit For ' iが5の場合、ループから抜ける
num = num + 1
Debug.Print i, num
Loop
Next
End Sub
コード全体の概要
このコードは、ネストされたループ(ForループとDo Untilループ)を使用して、特定の条件が満たされた場合にループを抜けるサブルーチンです。
各部分の説明
Private Sub ForLoopExit()
- 概要:
ForLoopExit
という名前のサブルーチンの開始を示します。
Dim i As Long
- 概要:
i
という名前の変数を長整数型として宣言します。この変数は外側のFor
ループのカウンタとして使用されます。
Dim num As Long
- 概要:
num
という名前の変数を長整数型として宣言します。この変数は内側のDo Until
ループで使用されます。
For i = 1 To 10
- 概要:
i
が1から10までの値を取るFor
ループを開始します。
num = 1
- 概要: 変数
num
に値1を代入します。この行はFor
ループ内で毎回実行されます。
Do Until num = 2
- 概要:
num
が2になるまで繰り返すDo Until
ループを開始します。
If i = 5 Then Exit For
- 概要:
i
が5の場合、外側のFor
ループを終了します。この条件が満たされると、内側のDo Until
ループだけでなく、外側のFor
ループも即座に終了します。
num = num + 1
- 概要: 変数
num
に1を加えます。この行は、num
が2になるまで毎回実行されます。
Debug.Print i, num
- 概要: 現在の
i
とnum
の値をイミディエイトウィンドウに出力します。デバッグ情報として使います。
Loop
- 概要:
Do Until
ループの終了を示します。条件が満たされるまで、ループの先頭に戻ります。
Next
- 概要:
For
ループの次のイテレーションに進みます。i
の値が10に達するまで、ループの先頭に戻ります。
End Sub
- 概要:
ForLoopSample
サブルーチンの終了を示します。
処理の流れ
i
が1から10までの値を取るFor
ループが開始されます。- 各イテレーションで、
num
が1に初期化されます。 num
が2になるまでのDo Until
ループが開始されます。- ループ内で、
i
が5の場合、Exit For
ステートメントが実行され、外側のFor
ループを終了します。 num
に1が加算されます。Debug.Print
で現在のi
とnum
の値がイミディエイトウィンドウに出力されます。Do Until
ループが終了し、For
ループの次のイテレーションに進みます。- このプロセスが
i
が10に達するまで繰り返されます。ただし、i
が5になるとExit For
が実行され、ループが終了します。
サンプル出力
イミディエイトウィンドウに次のような出力が表示されます(i
が5になるとループが終了します):
1 2
2 2
3 2
4 2