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

Boolean 条件が True 場合、または条件が Trueになるまで、ステートメントのブロックを繰り返します。Repeats a block of statements while a Boolean condition is True or until the condition becomes True.

構文Syntax

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

指定項目Parts

用語Term DefinitionDefinition
Do 必須。Required. Do ループの定義を開始します。Starts the definition of the Do loop.
While Until を使用しない場合に、必ず指定します。Required unless Until is used. conditionFalseになるまでループを繰り返します。Repeat the loop until condition is False.
Until While を使用しない場合に、必ず指定します。Required unless While is used. conditionTrueになるまでループを繰り返します。Repeat the loop until condition is True.
condition 省略可。Optional. Boolean 式です。Boolean expression. conditionNothing場合、Visual Basic はそれを Falseとして扱います。If condition is Nothing, Visual Basic treats it as False.
statements 省略可。Optional. 1つまたは複数のステートメントが繰り返されている間、または conditionTrueされます。One or more statements that are repeated while, or until, condition is True.
Continue Do 省略可。Optional. Do ループの次の反復処理に制御を転送します。Transfers control to the next iteration of the Do loop.
Exit Do 省略可。Optional. Do ループから制御を転送します。Transfers control out of the Do loop.
Loop 必須。Required. Do ループの定義を終了します。Terminates the definition of the Do loop.

コメントRemarks

条件が満たされるまで、一連のステートメントを無限に繰り返す必要がある場合は、Do...Loop 構造体を使用します。Use a Do...Loop structure when you want to repeat a set of statements an indefinite number of times, until a condition is satisfied. ステートメントを設定された回数繰り返し実行する場合は、For...Next ステートメント は通常、より適しています。If you want to repeat the statements a set number of times, the For...Next Statement is usually a better choice.

While または Until のいずれかを使用して conditionを指定できますが、両方を指定することはできません。You can use either While or Until to specify condition, but not both.

ループの開始時または終了時に、condition テストできるのは1回だけです。You can test condition only one time, at either the start or the end of the loop. ループの開始時に (Do ステートメントで) condition をテストした場合、ループは一度も実行されない可能性があります。If you test condition at the start of the loop (in the Do statement), the loop might not run even one time. ループの最後 (Loop ステートメント) でテストした場合、ループは常に少なくとも1回は実行されます。If you test at the end of the loop (in the Loop statement), the loop always runs at least one time.

通常、この条件は2つの値の比較によって得られますが、Boolean データ型 の値 (True または False) に評価される任意の式を指定できます。The condition usually results from a comparison of two values, but it can be any expression that evaluates to a Boolean Data Type value (True or False). これには、Booleanに変換されたその他のデータ型 (数値型など) の値が含まれます。This includes values of other data types, such as numeric types, that have been converted to Boolean.

ループを入れ子にするには、別のループ内にループを挿入し Do します。You can nest Do loops by putting one loop within another. また、さまざまな種類の制御構造を相互に入れ子にすることもできます。You can also nest different kinds of control structures within each other. 詳細については、「入れ子になった制御構造」を参照してください。For more information, see Nested Control Structures.

注意

Do...Loop 構造では、より高い柔軟性が得While...End While ステートメント を使用すると、conditionTrue 停止したとき、または最初に Trueになったときにループを終了するかどうかを決定できます。The Do...Loop structure gives you more flexibility than the While...End While Statement because it enables you to decide whether to end the loop when condition stops being True or when it first becomes True. また、ループの開始時または終了時に condition をテストすることもできます。It also enables you to test condition at either the start or the end of the loop.

終了Exit Do

Exit Doステートメントを使用すると、別の方法で Do…Loopを終了できます。The Exit Do statement can provide an alternative way to exit a Do…Loop. Exit Do は、Loop ステートメントの直後のステートメントに制御を直ちに転送します。Exit Do transfers control immediately to the statement that follows the Loop statement.

Exit Do は、If...Then...Else 構造などの条件を評価した後に頻繁に使用されます。Exit Do is often used after some condition is evaluated, for example in an If...Then...Else structure. 誤った値や終了要求など、反復処理を続行することが不要または不可能な条件を検出した場合は、ループを終了することができます。You might want to exit a loop if you detect a condition that makes it unnecessary or impossible to continue iterating, such as an erroneous value or a termination request. Exit Do の使用方法の1つは、無限ループの原因となる可能性のある条件をテストすることです。これは、大規模または無限の回数実行されるループです。One use of Exit Do is to test for a condition that could cause an endless loop, which is a loop that could run a large or even infinite number of times. Exit Do を使用すると、ループをエスケープできます。You can use Exit Do to escape the loop.

Do…Loop内の任意の場所に、任意の数の Exit Do ステートメントを含めることができます。You can include any number of Exit Do statements anywhere in a Do…Loop.

入れ子になった Do ループ内で使用された場合、Exit Do は最も内側のループから次の上位レベルの入れ子に制御を転送します。When used within nested Do loops, Exit Do transfers control out of the innermost loop and into the next higher level of nesting.

Example

次の例では、ループ内のステートメントは、index 変数が10を超えるまで実行を続けます。In the following example, the statements in the loop continue to run until the index variable is greater than 10. Until 句がループの最後にあります。The Until clause is at the end of the loop.

Dim index As Integer = 0
Do
    Debug.Write(index.ToString & " ")
    index += 1
Loop Until index > 10

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Example

次の例では、Until 句ではなく While 句を使用します。 condition は最後ではなくループの開始時にテストされます。The following example uses a While clause instead of an Until clause, and condition is tested at the start of the loop instead of at the end.

Dim index As Integer = 0
Do While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Example

次の例では、index 変数が100より大きい場合、condition はループを停止します。In the following example, condition stops the loop when the index variable is greater than 100. ただし、ループ内の If ステートメントでは、インデックス変数が10より大きい場合、Exit Do ステートメントによってループが停止されます。The If statement in the loop, however, causes the Exit Do statement to stop the loop when the index variable is greater than 10.

Dim index As Integer = 0
Do While index <= 100
    If index > 10 Then
        Exit Do
    End If

    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Example

次の例では、テキストファイル内のすべての行を読み取ります。The following example reads all lines in a text file. OpenText メソッドは、ファイルを開き、文字を読み取る StreamReader を返します。The OpenText method opens the file and returns a StreamReader that reads the characters. Do...Loop 条件では、StreamReaderPeek メソッドによって、追加の文字があるかどうかが判断されます。In the Do...Loop condition, the Peek method of the StreamReader determines whether there are any additional characters.

Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("File Not Found: " & textFilePath)
    Else
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)

        Do While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        Loop

        sr.Close()
    End If
End Sub

参照See also