今回はFor〜Nextステートメントについて学びます。Forステートメントは、繰り返し同じ処理を行うのに便利です。同じような処理を何回でも繰り返してできるのが、VBAを使うメリットです。
For〜Nextステートメントとは?
For〜Nextステートメントは、繰り返し決められた回数だけ同じ処理を行うためのステートメントです。プログラミングでは、同じことを何回もやりたい、という場面にたびたび遭遇します。この時に役立つのがこのFor〜Nextステートメントです。
For〜Nextステートメントがなかったときを想像してみましょう。同じ処理を行うのに、繰り返し同じ記述をしなければなりません。2回か3回ならそれほど大変ではありませんが、100回なら大変なんてものではありません。For〜Nextステートメントは、コンピューターの真骨頂?とも言うべき繰り返し処理ををやってくれるありがたい命令文なのです。
繰り返し処理を行うステートメントには、For〜Nextステートメントの他にもDo〜Whileステートメントなどがあります。まずはFor〜Nextステートメントについて理解してしまいましょう。
For〜Nextステートメントの基本形
For〜Nextステートメントの基本形は、以下のようになります。なお、[]で囲まれた部分は省略可能という意味です。つまり、[Step 増減値]の部分は必要でなければ書かなくても大丈夫です。省略された場合、増減値は1に設定されます。
Ifステートメントと比べると登場人物が少し多くなっていますが、一つ一つの役割を理解すれば難しくはありません。同じ処理を何回繰り返すのか、つまり回数は「初期値」「最終値」「増減値」によって決定されます。まずカウンタ変数を初期化します。そして繰り返しのたびにカウンタ変数の値が最終値に達しているかどうかチェックされます。
カウンタ変数が最終値より少ないうちは、何回でも繰り返し処理が実行されます。カウンタ変数の値は、繰り返しのたびに増減値分だけアップまたはダウンします。言葉にするともどかしいので、フローチャートで見てみましょう。
For〜Nextステートメントの例
実際に簡単なサンプルコードを実行して、For〜Nextステートメントの挙動を確認してみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub カウンター変数チェック1 Dim counter As Integer 'カウンタ変数 For counter = 1 to 3 Step 1 Debug.Print "カウンタ変数の値:" & counter Next counter End Sub '出力結果 'カウンタ変数の値:1 'カウンタ変数の値:2 'カウンタ変数の値:3 |
初期値1、増減値1、最終値3なので、合計3回、同じ処理(Debug.Printによる出力)が実行されます。このSubプロシージャの流れを文章にすると以下のようになります。その時点でカウンタ変数の値をカッコ内に示しました。
カウンタ変数が初期化されてアップしていくプロセスに注目です。
- 変数counterの値を初期値『1』で初期化(1)
- 変数counterの値をチェック→最終値3以下なのでDebug.Printでカウンタ変数の値を出力(1)
- 変数counterの値を1アップ(1→2)
- 変数counterの値をチェック→最終値3以下なのでDebug.Printでカウンタ変数の値を出力(2)
- 変数counterの値を1アップ(2→3)
- 変数counterの値をチェック→最終値3以下なのでDebug.Printでカウンタ変数の値を出力(3)
- 変数counterの値を1アップ(3→4)
- 変数counterの値をチェック→最終値3を超過しているのでFor〜Nextステートメントを終了(4)
次の例では、最終値を5、増減値を2に変更しています。つまり1、3、5と奇数の値が出力されます。最終値と増減値は変わりましたが、繰り返し回数は3で、前の例と変わりませんね。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub カウンター変数チェック2 Dim counter As Integer 'カウンタ変数 For counter = 1 to 5 Step 2 Debug.Print "カウンタ変数の値:" & counter Next counter End Sub '出力結果 'カウンタ変数の値:1 'カウンタ変数の値:3 'カウンタ変数の値:5 |
次の例では、増減値をマイナスにしています。実際にマイナスの増減値が使われるケースは少ないですが、プラスだけではなくマイナスも使えるということも覚えておいて損ではありません。
1 2 3 4 5 6 7 |
Sub カウンター変数チェック3() Dim counter As Integer 'カウンタ変数 For counter = 3 To 1 Step -1 Debug.Print "カウンタ変数の値:" & counter Next counter End Sub |
Exit Forステートメントによる処理の中止
Forステートメントの処理を途中で中止したいという場合、Exit Forステートメントを使用します。Exit Forステートメントを使用すると、For〜Nextステートメントの処理を中断し、ループの外へと一気にワープします。
以下の例の場合、カウンタ変数が3に達するとExit Forステートメントが実行されます。そのため、カウンタ変数が4以上になることはなく、For〜Nextステートメントが終了します。
1 2 3 4 5 6 7 8 9 10 11 |
Sub カウンター変数チェック4() Dim counter As Integer 'カウンタ変数 For counter = 1 To 5 If counter = 3 Then Debug.Print "カウンタ変数の値が3なので処理を中止" Exit For End If Debug.Print "カウンタ変数の値:" & counter Next counter End Sub |
この例の場合、Exit Forステートメントを使用しなくても、単に最終値を3にすれば同じ目的が達成されます。なのでExit Forステートメントの使い方はあまり意味がありません(おい)。Exit Forステートメントが役に立つのは、何か特別なことが起こって一気にループの外に脱出したい場合などに重宝します。