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
また、別の種類の制御構造を入れ子にすることもできます。詳細については、「入れ子になった制御構造」を参照してください。
メモ : 内側の入れ子レベルの 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)