Doループの使用

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