Do...Loop ステートメント (Visual Basic)

更新 : 2007 年 11 月

指定されたブール型 (Boolean) の条件が真 (True) である間、または条件が真 (True) になるまで、一連のステートメントを繰り返します。

Do { While | Until } condition
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop
-or-
Do
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop { While | Until } condition

指定項目

  • While
    Until を使用しない場合は、必ず指定します。condition が偽 (False) になるまでループを繰り返します。

  • Until
    While を使用しない場合は、必ず指定します。condition が真 (True) になるまでループを繰り返します。

  • condition
    省略できます。ブール式 (Boolean) を指定します。condition が Nothing の場合、Visual Basic はこれを False として扱います。

  • statements
    省略可能です。condition が真 (True) である間、または真になるまで繰り返し実行される、任意の行数のステートメントを記述します。

  • Exit Do
    省略可能です。制御を Do ループの外に移します。

  • Loop
    必ず指定します。Do ループの定義を終了します。

解説

Do...Loop は一連のステートメントを、条件が満たされるまで何度でも繰り返し実行する場合に使用します。設定した回数だけステートメントを繰り返す場合は、For...Next Statement を選択した方が通常は便利です。

Do...Loop を使用すると、condition が真 (True) でなくなったときにループを終了するのか、それとも最初に True になったときに終了するのかを選択できるので、While...End While ステートメント (Visual Basic) を使用するよりも柔軟性が増します。また、condition をループの最初にテストすることも、ループの終わりにテストすることもできます。

規則

  • 条件の指定条件は、通常、2 つの値の比較によって判断されますが、ブール型 (Boolean) (Visual Basic) の値 (True または False) に評価される式であれば何でも指定できます。指定できる値には、数値型などのその他のデータ型を Boolean に変換した値も含まれます。

  • 条件のテストcondition はループの最初または終わりに 1 回だけテストできます。While と Until のいずれかを使用して condition を指定しますが、両方は使用できません。

  • 反復の回数condition をループの最初に (Do ステートメント内で) テストする場合、ループが一度も実行されない場合があります。ループの終わりに (Loop ステートメント内で) テストする場合、ループは必ず少なくとも 1 回は実行されます。

  • ループの入れ子Do ループは入れ子構造にできます。つまり、ループの内部に別のループを入れることができます。また、種類の異なる制御構造を入れ子にすることもできます。詳細については、「入れ子になった制御構造」を参照してください。

  • ループの外への制御の転送。Exit ステートメント (Visual Basic) は、Loop ステートメントの次のステートメントに制御を直ちに移します。ループの継続が不要になったり不可能になったりする条件 (エラー値や終了要求など) を検出した場合にループを終了できます。Exit Do ステートメントは Do ループの任意の場所に何度でも使用できます。Exit Do は If...Then...Else の中など、何らかの条件を評価した後によく使用されます。

無限ループ

Exit Do は、無限ループを引き起こす可能性がある条件をテストする場合などに使用されます。無限ループは、実行回数が極端に多くなる (または無限に繰り返される) ループです。このような条件が検出された場合に、Exit Do を使用してループから抜けることができます。そうしない限り、ループは実行し続けます。

次の例では、ループを 2^31 回よりも多く実行させる可能性のある値が number に代入されています。If ステートメントは、この変数の値をチェックし、条件が True の場合にループを終了して、無限ループになるのを防ぎます。

Sub exitDoExample()
    Dim counter As Integer = 0
    Dim number As Integer = 8
    Do Until number = 10
        If number <= 0 Then Exit Do
        number -= 1
        counter += 1
    Loop
    MsgBox("The loop ran " & counter & " times.")
End Sub
eked04a7.alert_note(ja-jp,VS.90).gifメモ :

無限ループを停止するには、Esc キーを押すか、または Ctrl キーを押しながら Break キーを押します。

使用例

次の例に、入れ子になった Do...Loop、While と Until の使用方法、およびループの最初 (Do ステートメント) と終わり (Loop ステートメント) に条件をテストする方法を示します。

Sub DoExample()
    Dim check As Boolean = True
    Dim counter As Integer = 0
    Do
        Do While counter < 20
            counter += 1
            If counter = 10 Then
                check = False
                Exit Do
            End If
        Loop
    Loop Until check = False
End Sub

この例では、内側の Do...Loop でループを 10 回繰り返すと、フラグの値を偽 (False) に設定し、Exit Do ステートメントを使ってループから抜けます。外側のループは、フラグの値を調べてループから抜けます。

参照

処理手順

方法 : ループのパフォーマンスを改善する

概念

ループ構造

入れ子になった制御構造

参照

For...Next ステートメント (Visual Basic)

ブール型 (Boolean) (Visual Basic)

Exit ステートメント (Visual Basic)

While...End While ステートメント (Visual Basic)