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

更新 : 2007 年 11 月

指定された回数だけ、一連のステートメントを繰り返すフロー制御ステートメントです。

For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

指定項目

  • counter
    For ステートメントには必ず指定します。数値変数を指定します。このループの制御変数になります。

  • datatype
    counter がまだ宣言されていない場合は、必ず指定します。counter のデータ型を指定します。

  • start
    必ず指定します。数式を指定します。counter の初期値になります。

  • end
    必ず指定します。数式を指定します。counter の最終値になります。

  • step
    省略可能です。数式を指定します。ループを 1 回実行するごとに引数 counter を増やす量です。

  • statements
    省略可能です。For と Next の間に記述したステートメントは、指定した回数だけ実行されます。

  • Exit For
    省略可能です。プログラムの制御を For ループの外に移します。

  • Next
    必ず指定します。この For ループの定義を終了します。

解説

一連のステートメントを決まった回数だけ繰り返し実行するときには For...Next 構造を使用します。

ループ内のステートメントを実行する回数が事前にわからない場合には、While...End While ステートメント (Visual Basic) または Do...Loop ステートメント (Visual Basic) を使用します。一方、指定の回数だけループを実行する場合は、For...Next ループが最適です。このループでは、最初にループに入るときに、繰り返しの回数を決定します。

step には正の数または負の数を指定できます。どちらを指定するかによって、ループの処理方法が次のように決まります。

ステップの値

実行条件

正の数または 0

counter <= end

負の数

counter >= end

step を省略すると、ループを繰り返すごとに counter に 1 が加算されます。

規則

  • データ型counter のデータ型は、通常は Integer にします。しかし、以上 (>=)、以下 (<=)、加算 (+)、減算 (-) の各演算子をサポートするものならば任意のデータ型を指定できます。これらの演算子をサポートしていれば、ユーザー定義型を指定してもかまいません。

    start、end、および step には、通常は Integer 型として評価される式を指定しますが、counter と同じ型に拡張可能な任意のデータ型の式を指定することもできます。counter にユーザー定義型を使用する場合は、start、end、または step の型を counter と同じ型に変換するために、CType 変換演算子を定義しなければならないことがあります。

  • 宣言 このループの外側で counter を宣言していない場合は、For ステートメント内で宣言する必要があります。その場合、counter のスコープはループの本体になります。ただし、ループの外側と内側の両方で counter を宣言することはできません。

  • 繰り返しの回数 Visual Basic は、start、end、step という反復値をループの開始前に 1 回だけ評価します。ステートメント ブロックによって end または step が変更されても、ループの繰り返しには影響しません。

  • ループの入れ子For ループは入れ子構造にできます。つまり、ループの中に別のループを入れることができます。ただし、それぞれのループに一意の counter 変数を指定する必要があります。有効なステートメントの例を次に示します。

    For i As Integer = 1 To 10
        For j As Integer = 1 To 10
            For k As Integer = 1 To 10
                ' Insert statements to operate with current values of i, j, and k.
            Next k
        Next j
    Next i
    

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

    5z06z1kb.alert_note(ja-jp,VS.90).gifメモ :

    内側の入れ子レベルの Next ステートメントの前に外側の入れ子レベルの Next ステートメントが来た場合は、コンパイラからエラーが報告されます。ただし、コンパイラがこのエラーを検出できるのは、すべての Next ステートメントに counter を指定した場合に限られます。

  • 制御変数の識別 オプションとして、Next ステートメントに counter を指定することもできます。こうするとプログラムの読みやすさが向上し、特に For ループを入れ子にしている場合は効果があります。その場合には、For ステートメントで指定したのと同じ変数を指定する必要があります。

  • ループの中断Exit ステートメント (Visual Basic) は、Next ステートメントの次のステートメントにすぐに制御を移します。これを使用すると、ループの継続を不要または不可能にする条件 (エラー値や終了要求など) を検出した場合にループを終了できます。また、Try...Catch...Finally で例外をキャッチした場合にも、Finally ブロックの最後で Exit For を使用できます。

    For ループ内では Exit For ステートメントを好きな場所に何回でも記述できます。通常は、何らかの条件を評価した後、たとえば If...Then...Else 構造の後に Exit For を記述します。

  • 無限ループExit For の 1 つの用途は、無限ループ (実行回数が極端に多いループ、または無限に繰り返されるループ) を引き起こす可能性がある条件をテストすることです。このような条件を検出した場合は、Exit For を使用してループを抜けることができます。詳細については、「Do...Loop ステートメント (Visual Basic)」を参照してください。

動作

  • ループの開始For...Next ループの実行が始まるときに、Visual Basic は start、end、および step を 1 回だけ評価します。次に、start が counter に代入されます。ステートメント ブロックが実行される前に、counter と end が比較されます。counter の値が既に end 値を超えている場合は、For ループが終了し、Next ステートメントに続くステートメントに制御が渡されます。それ以外の場合は、ステートメント ブロックが実行されます。

  • ループの反復Next ステートメントが実行されるたびに、step の値が counter に加算され、For ステートメントに戻ります。その後再び counter と end が比較され、その結果に応じて、ステートメント ブロックが再度実行されるかループが終了します。このプロセスは、counter が end を超えるか、Exit For ステートメントに到達するまで継続されます。

  • ループの終了 ループは counter が end を超えるまで継続されます。counter と end が等しい場合にはループは継続されます。ブロックの実行を行うかどうかは、step が正の場合は counter <= end の比較によって決定され、step が負の場合は counter >= end の比較によって決定されます。

  • 反復値の変更 ループ内で counter の値を変更すると、コードの読みやすさが低下してデバッグが難しくなります。start、end、または step の値を変更しても、最初のループ開始時に決定された反復値には影響が及びません。

使用例

次の例は、それぞれ異なる step 値を持つ For...Next 構造を入れ子にしたようすを示しています。

Dim words, digit As Integer
Dim thisString As String = ""
For words = 10 To 1 Step -1
    For digit = 0 To 9
        thisString &= CStr(digit)
    Next digit
    thisString &= " "
Next words

この例では、0 から 9 までの数字列 ("0123456789") を 10 個格納する文字列を作成します。それぞれの数字列の間は半角スペースで区切られます。外側のループは、外側のループを 1 回実行するごとにループ カウンタ変数を 1 ずつ減少します。

参照

処理手順

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

概念

ループ構造

入れ子になった制御構造

参照

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

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

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

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