制御 実行を繰り返すフロー制御ステートメントFor~Next

※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。

※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。

For...Next ステートメント

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

  • 構文

  • For counter = start To end [Step step]
  • [statements]
  • [Exit For]
  • [statements]
  • Next [counter]
  • For...Next ステートメントの構文は、次の指定項目から構成されます。
  • 指定項目 内容

  • counter
  • 必ず指定します。
  • カウンタに使う数値変数を指定します。
  • 配列変数およびブール型 (Boolean) に含まれる変数は指定できません。
  • start
  • 必ず指定します。
  • 引数 counter の初期値を指定します。
  • end
  • 必ず指定します。
  • 引数 counter の最終値を指定します。
  • step
  • 省略可能です。
  • ループを繰り返すごとに引数 counter に加算される値を指定します。
  • 引数 step を省略すると、ループを繰り返すごとに引数 counter には 1 が加算されます。
  • statements
  • 省略可能です。
  • ループ内で実行される一連のステートメントで、For と Next の間に記述します。
  • ここに記述したステートメントは、For...Next ステートメントで指定した回数だけ実行されます。
  • 解説

  • 引数 step には正の数または負の数を指定できます。
  • 引数 step で指定した値によりループの実行は次のように制御されます。
  • 値 実行条件
  • 正の数または 0 counter <= end
  • 負の数 counter >= end
  • ループ内の一連のステートメントがすべて実行されると、引数 step の値が引数 counter に加算されます。
  • この時点で、終了条件が満たされていない場合にはループ内のステートメントが再び実行され、それ以外は、ループから抜け出して Next ステートメントの次のステートメントに制御が移ります。
  • ヒント

  • ループ内で引数 counter の値を変えると、プログラムの内容の理解やデバッグが困難になりますので注意してください。
  • ループから抜け出す別の方法として、ループ内に任意の数の Exit For ステートメントを指定することができます。
  • 通常、Exit For ステートメントはいくつかの条件を評価した後で使用します。
  • たとえば、If...Then ステートメントを評価した後で、制御をキーワード Next の次のステートメントに直ちに移します。
  • For...Next ループはネスト (入れ子) 構造にすることができます。
  • つまり、For...Next ループの内部に別の For...Next ループを入れることができます。
  • ループをネスト (入れ子) させるときは、それぞれの引数 counter に別の変数名を指定してください。
  • 正しいステートメントの例を次に示します。
  • Option Explicit

    For i = 1 To 10
        For j = 1 To 10
            For K = 1 To 10
                処理
            Next K
        Next j
    Next i

  • メモ

  • Next ステートメントの引数 counter を省略すると、引数 counter が指定されているかのように実行を継続します。
  • Next ステートメントが対応する For ステートメントよりも前にあると、エラーが発生します。

For...Next ステートメントの使用例

Option Explicit


Private Sub test1()
Dim Chars, MyString
    For Chars = 0 To 9
        '文字列に番号を追加します。
        Debug.Print "'"; Chars & ":" & MyString
        MyString = MyString & Chars
    Next Chars
'0:
'1:0
'2:01
'3:012
'4:0123
'5:01234
'6:012345
'7:0123456
'8:01234567
'9:012345678

End Sub


Private Sub test2()
Dim Chars, MyString
    For Chars = 10 To 1 Step -1
        '文字列に番号を追加します。
        Debug.Print "'"; Chars & ":" & MyString
        MyString = MyString & Chars
    Next Chars
'10:
'9:10
'8:109
'7:1098
'6:10987
'5:109876
'4:1098765
'3:10987654
'2:109876543
'1:1098765432

End Sub


Private Sub test3()
Dim Chars, MyString
    For Chars = 0 To 10 Step 2
        '文字列に番号を追加します。
        Debug.Print "'"; Chars & ":" & MyString
        MyString = MyString & Chars
    Next Chars
'0:
'2:0
'4:02
'6:024
'8:0246
'10:02468

End Sub

 

2000年01月01日|[VBサンプルコード]:[制御]