現在ログインしていません。
新規アカウント作成
ログイン

For Nextを使った繰り返し

For Nextの構文を使ってプログラムの一部を繰り返して実行する方法を説明します。

For Each Nextは扱いません。また、プログラムを繰り返し実行する方法は、この外にもDo Loop、While While Endなどいくつかあります。

For Nextの構文を忘れてしまった場合コードエディターに For を入力した後 TABキーを2回押すと単純な空のFor Nextが挿入されます。

単純な例

以下の例ではMsgBpx("こんにちは")が5回繰り返され、5回メッセージボックスを表示されます。

For i As Integer = 0 To 4
    MsgBox("こんにちは!")
Next
■リスト1:VB For Nextの単純な例

この例ではループの回数を数える変数として、iを宣言しています。この役割の変数をカウンター変数と呼びます。 カウンター変数は下記の例のようにForの外であらかじめ宣言しておいたものを使用することもできます。この例は使い方を示すことを主眼としており、この場合はiをForの外部で宣言する意味は特にありません。

Dim i As Integer 

For i = 0 To 4
    MsgBox("こんにちは!")
Next
■リスト2:VB For Nextで外部の変数をカウンター変数にする例

配列の要素数文ループする

既定では、For Nextの構文ではループごとにカウンター変数が1プラスされます。(後の例で説明するようにカウンター変数の増加量はStepで指定して変更することができます。) カウンター変数の値がToで指定した値が最終回になります。カウンター変数は 0 から開始するのが普通です。これは配列等の添え字が0から始まるためです。以上のことから、Toに配列の要素数 - 1を指定することで配列の要素数の数だけループさせることができます。

Environment.GetLogicalDrivesはコンピューター上に存在するC:\、D:\などのドライブの名前を持っている配列です。For Nextを利用して、すべてのドライブを列挙するには次のようにします。

For i As Integer = 0 To Environment.GetLogicalDrives.Length - 1
    Dim drive As String = Environment.GetLogicalDrives(i)
    MsgBox(drive)
Next
■リスト3:VB For 配列の要素数分ループする例

なお、配列の内容を表示したいだけなら次のように書くほうが手軽です。この記事のテーマであるFor Nextとは関係ありませんが参考に載せておきます。

MsgBox(String.Join(vbNewLine, Environment.GetLogicalDrives))
■リスト4:VB 論理ドライブの一覧を表示する

何回目のループか数える例

以下の例でも、メッセージボックスを5回表示しますが、表示されるメッセージに変数iを表示して現在何回目のループであるかを表示します。

For i As Integer = 0 To 4
    MsgBox("現在" & i & "回目です。")
Next
■リスト5:VB For Nextで周回を数える例

条件が成立した場合ループから抜ける

途中でループから抜けるにはExit Forを使用します。 以下の例では5回繰り返してユーザーに入力を促し、何も入力しなかった場合は5回に達していなくても直ちにちにループを終了します。

For i As Integer = 0 To 4

    Dim value As String = InputBox("何か入力してください。")

    If Len(Value) = 0  Then
        Exit  For
    Else
        MsgBox(value)
    End  If
Next
■リスト6:VB For NextでExit Forの使用例

ループの先頭に戻る

Continue Forを使うとループ内の後続の処理を実行しないで、すぐにループの次の回を実行することができます。 次の例も5回繰り返してユーザーに入力を促し、入力された文字を表示しますが、何も入力しなかった回は場合は何も表示しません。

For i As Integer = 0 To 4

    Dim value As String = InputBox("何か入力してください。")

    If Len(Value) = 0  Then
        Continue For
    Else
        MsgBox(value)
    End  If
Next
■リスト7:VB For NextでContinue Forの使用例

2ずつカウントアップする

既定ではカウンター変数は1ずつカウントアップしますが、Stepを使うとカウントアップする数を指定できます。 次の例は2ずつカウントアップするため、ループはi=0, 2, 4の3回だけ実行されます。

For i As Integer = 0 To 4 Step 2
    MsgBox("現在" & i & "です。")
Next
■リスト8:VB For NextでStepの使用例

カウントダウンする

Stepにマイナスを指定するとカウントダウンすることもできます。次の例ではカウンタ変数の初期値 4 が To で示した 0 よりも大きいことに注意してください。

For i As Integer = 4 To 0 Step -1
    MsgBox("現在" & i & "です。")
Next
■リスト9:VB For Nextでカウントダウンする例

二重ループ

For Nextの中にFor Nextを記述して2重ループすることもできます。このような手法を 入れ子 または ネストと呼びます。次の例では掛け算の九九の表を表示します。

For x As Integer = 1 To 9
    MsgBox(x & "の段")

    Dim lines As New System.Text.StringBuilder

    For y As Integer = 1 To 9
        lines.AppendLine(x & " × " & y & " = " & x * y)
    Next

    MsgBox(lines.ToString)
Next
■リスト10:VB For Nextをネストして九九を表示する例

この例のようにNextが複数出現する場合、どのForに対応するNextかわかりやすくするために次のようにカウンター変数を使って明示することができます。この記述は機能にはまったく影響しません。

For x As Integer = 1 To 9
    '(省略)

    For y As Integer = 1 To 9
        '(省略)
    Next y

    '(省略)
Next x
■リスト11:VB For Nextでカウンター変数を明示

ただし、カウンター変数を取り違えてちぐはぐに記述するとエラーになります。次の例はエラーです。

For x As Integer = 1 To 9
    '(省略)

    For y As Integer = 1 To 9
        '(省略)
    Next x

    '(省略)
Next y
■リスト12:VB この例はエラーになります。

それから、決してお勧めしませんが、カウンター変数を明示することで複数のNextを1つにまとめることも構文上は可能です。この例では、Next x, y ではなく、Next y, xとなっている点に注意してください。対応するカウンター変数を順番に指定する必要があります。 この例を一目見るとわかると思いますが、Forの数とNextの数が一致しないため、インデントも合致せず何かのエラーか間違いのように見えます。これがこの例をお勧めしない理由です。

'この例は実行できますが、推奨されません。
For x = 1 To 3
    For y = 1 To 2
        MsgBox("x=" & x & " y=" & y)
Next y, x
■リスト13:VB 複数のForを1つのNextで受ける

この例は、次の例と等価です。こちらの例はインデントもきれいでお勧めできます。

For x = 1 To 3
    For y = 1 To 2
        MsgBox("x=" & x & " y=" & y)
    Next y
Next x
■リスト14:VB 複数のForを1つのNextで受ける