Do...Loop文を使用して、文のブロックを無期限に実行できます。条件がTrueの間、または条件がTrueになるまで、文が繰り返されます。
条件がTrueの間の文の繰返し
Whileキーワードを使用して、Do...Loop文の条件をチェックします。ループに入る前に条件をチェックするか(次のChkFirstWhileの例を参照)、ループが少なくとも1回実行された後に条件をチェックできます(ChkLastWhileの例を参照)。ChkFirstWhileプロシージャで、myNumが20ではなく9に設定されている場合、ループ内の文は実行されません。ChkLastWhileプロシージャでは、条件がすでにFalseであるため、ループ内の文は1回のみ実行されます。
次の例では、whileの使用方法を示します:
例1:
Sub ChkFirstWhile()
Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 10 repetitions."
End Sub
例2:
Sub ChkFirstWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 0 repetitions.
End Sub
例3:
Sub ChkLastWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
'This loop made 1 repetition.
End Sub
例4:
Sub ExampleWithDoWhile()
Dim counter, myNum
counter = 0
myNum = 15
Do While myNum > 10
myNum = myNum - 2
counter = counter + 1
Loop
' This loop reduced myNum to 9 and made 3 repetitions
End Sub
例5:
Sub ExampleWithDoLoopWhile()
Dim counter, myNum
counter = 0
myNum = 5
Do
myNum = myNum + 1
counter = counter + 1
Loop While myNum < 10
' This loop increased myNum to 10 and made 5 repetitions.
End Sub
例6:
Sub ChkLastWhile()
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
'This loop made 1 repetition.
End Sub
条件がTrueになるまでの文の繰返し
Untilキーワードを使用してDo...Loop文の条件をチェックするには、2つの方法があります。ループに入る前に条件をチェックするか(次のChkFirstUntilの例を参照)、ループが少なくとも1回実行された後に条件をチェックできます(ChkLastUntilの例を参照)。条件がFalseであるかぎり、ループが発生します。
次の例では、untilの使用方法を示します:
例1:
Sub ChkFirstUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
Loop
'This loop made 10 repetitions.
End Sub
例2:
Sub ChkLastUntil()
Dim counter, myNum
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
'This loop made 9 repetitions.
End Sub
例3:
Sub ExampleWithDoUntil()
Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum < 15
myNum = myNum - 2
counter = counter + 1
Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub
例4:
Sub ExampleWithDoLoopUntil()
Dim counter, myNum
counter = 0
myNum = 5
Do
myNum = myNum + 2
counter = counter + 1
Loop Until myNum >= 15
'This loop increased myNum to 15 and made 5 repetitions.
End Sub
ループ内からのDo...Loop文の終了
Exit Do文を使用してDo...Loopを終了できます。通常は、無限ループを回避するなど、特定の状況でのみ終了する必要があるため、If...Then...Else文のTrue文ブロックでExit Do文を使用する必要があります。条件がFalseの場合、ループは通常どおり実行されます。
次の例では、myNumに、無限ループを作成する値が割り当てられています。If...Then...Else文はこの条件をチェックし、無限の繰返しを防止します。
次の例は、do loop文の使用方法を示しています:
例1:
Sub ExitExample()
Dim counter, myNum
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
'This loop made 1 repetition.
End Sub
例2:
Sub PreventEndlessLoop()
Dim counter, myNum
counter = 1
myNum = 0
Do
myNum = myNum + 1
counter = counter + 1
If counter > 10 Then
Exit Do ' Avoids endless loop by exiting after 10 iterations.
End If
Loop
'This loop made 11 repetitions.
End Sub
例3:
Sub ExampleWithDoWhile()
Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 2
counter = counter + 1
If myNum < 15 Then Exit Do ' Exit the loop early if myNum is less than 15.
Loop
'This loop reduced myNum to 14 and made 3 repetitions.
End Sub
例4:
Sub NestedLoopsExample()
Dim i, j
For i = 1 To 3
j = 0
Do
j = j + 1
If j > 2 Then Exit Do ' Exit inner loop after 2 iterations.
Loop
Next
End Sub