② 指定した条件で処理を繰り返すループ処理
【Do While ループ/Do Until ループ】
Do While ループ/Do Until ループは、条件が True の間、繰り返し処理を行います。こちらは特定の条件が決まっており、その条件内でのみ処理したい場合に用います。
上記のFor...Next ループに比べるとそこまで使用頻度は多くないかもしれませんが、重要な構文となります。
構文:
Do While ループ/Do Until ループの構文は以下のようになります。
Do While(Until) "条件式"
'・・・処理・・・'
Loop
Whileは条件式を満たしている間だけ処理を実行します。(条件がTrueの間だけ繰り返す)
Untilは条件式を満たすまでの間だけ処理を実行します。(条件がFalseの間だけ繰り返す)
少し分かりづらいかと思いますので、使用例を見て説明していきます。
使用例:
例. 1~5の数値を出力する場合
Do While ループ:
Sub DoWhileLoop()
Dim i As Integer
i = 1
Do While i <= 5
Debug.Print i
i = i + 1
Loop
End Sub
出力結果
1
2
3
4
5
Do Until ループ:
Sub DoUntilLoop()
Dim i As Integer
i = 1
Do Until i > 5
Debug.Print i
i = i + 1
Loop
End Sub
出力結果
1
2
3
4
5
Do While ループは、最初に条件を評価して True の場合のみ処理を実行するため、条件が最初から False である場合は一度も実行されません。
Do Until ループは、最初に条件を評価して False の場合のみ処理を実行するため、条件が最初から True である場合は一度も実行されません。
また、ループを抜ける条件を適切に設定しないと、無限ループに陥る可能性があります。以下の場合は、無限ループに陥った例になります。(ちなみに条件式を書かなかった場合も、ループを抜ける条件を適切に設定しない限り、無限ループとなってしまいます)
例. 無限ループの場合
Do While ループ:
Sub DoWhileLoop()
Dim i As Integer
i = 1
Do While i > 0 ' 条件が常にTrue
Debug.Print "現在の値: " & i
' i を変化させる処理がないため、無限ループになる
Loop
End Sub
Do Until ループ:
Sub DoUntilLoop()
Dim i As Integer
i = 1
Do Until i < 0 ' 条件が常にFalse
Debug.Print "現在の値: " & i
' i を変化させる処理がないため、無限ループになる
Loop
End Sub
では、次に強制的にループを抜けるやり方を見ていきます。
Do While/Until ループを抜けるには Exit Do を使います。
例. 特定の条件の時にループを抜ける場合
Do While ループ:
Sub DoWhileLoop()
Dim i As Integer
i = 1
Do While i <= 5
If i = 4 Then Exit Do
Debug.Print i
i = i + 1
Loop
End Sub
出力結果
1
2
3
Do Until ループ:
Sub DoUntilLoop()
Dim i As Integer
i = 1
Do Until i > 5
If i = 4 Then Exit Do
Debug.Print i
i = i + 1
Loop
End Sub
出力結果
1
2
3
特定の条件の時だけ処理をスキップして、それ以降も引き続き処理を行う場合は、For...Next ループの時と同様に GoTo を利用します。
例. 特定の条件の時だけ処理をスキップする場合
Do While ループ:
Sub DoWhileLoop()
Dim i As Integer
i = 1
Do While i <= 5
If i = 4 Then GoTo CONTINUE:
Debug.Print i
CONTINUE:
i = i + 1
Loop
End Sub
出力結果
1
2
3
5
Do Until ループ:
Sub DoUntilLoop()
Dim i As Integer
i = 1
Do Until i > 5
If i = 4 Then GoTo CONTINUE:
Debug.Print i
CONTINUE:
i = i + 1
Loop
End Sub
出力結果
1
2
3
5
【Do ループ While/Do ループ Until】
Do While ループ/Do Until ループには、処理を先に記述し、繰り返し条件を後に記述するといった構文も存在します。
Do ループ While/Do ループ Untilでは、条件式が初めからFalseの場合でも必ずループ内の処理が1度実行されます。
これらに関しては、そのような書き方があるな程度で留めてもらってかまいません。
Do ループ While/Do ループ Untilの構文は以下のようになります。
Do
'・・・処理・・・'
Loop While(Until) "条件式"
例. 1~5の数値を出力する場合
Do ループ While:
Sub DoLoopWhile()
Dim i As Integer
i = 1
Do
Debug.Print i
i = i + 1
Loop While i <= 5
End Sub
出力結果
1
2
3
4
5
Do ループ Until:
Sub DoLoopUntil()
Dim i As Integer
i = 1
Do
Debug.Print i
i = i + 1
Loop Until i > 5
End Sub
出力結果
1
2
3
4
5