制御構文「For~Nextステートメント」について
今回の制御構文は「For~Nextステートメント」です。
For文は繰り返し処理になります。
サンプルコードを用意しました。
Sub test11()
Dim i As Integer
For i = 1 To 3
MsgBox "繰り返し処理:" & i & "回目"
Next
End Sub
「For~Nextステートメント」の基本構文は以下の通りです。
For <カウンタ変数> = <初期値> To <繰り返すまでの数値>
<繰り返される実行したい処理>
Next
このソースコードを実行すると以下のような結果になります。
For文は、まず<カウンタ変数>を用意します。
このカウンタ変数とは、何回繰り返すかをカウントするための変数です。
サンプルコードでは変数iです。
カウンタ変数名は、もちろん何でもOKですが、いろいろなプログラム言語で「i」が用いられる事が多いです。
次に「For i = 1 To 3」で変数iの<初期値>を決めています。
変数iの初期値は「1」です。
そして「For i = 1 To 3」は3になるまで繰り返すという意味です。
For文では「Next」まで処理が行くと、カウンタ変数が「+1」されます。
1回目の「MsgBox “繰り返し処理:” & i & “回目”」では、「繰り返し処理:1回目」と表示されました。
この時点で変数iは「1」だからです。
次に「Next」まで行くと変数iは「2」になり、For文の先頭に戻ります。
そして「3」になるまで繰り返すので、変数iはまだ「2」のため、再び2回目の「MsgBox “繰り返し処理:” & i & “回目”」が実行されます。
この時、変数iが「2」のため、「繰り返し処理:2回目」と表示されます。
同じ理屈で変数iは「3」となり、「繰り返し処理:3回目」と表示されます。
繰り返しは「To 3」で3になるまでですので、これで終了です。
IF文やSLECT文の条件分岐処理のように、For文のような「ループ処理(繰り返し処理)」は重要な要素です。
しっかりとマスターしておきましょう。
「ループ処理」の無限ループに注意!
For文のような制御構文はループ処理は、無限ループに注意が必要です。
その名の通り、ループ処理が永遠と終わらない処理です。
For文は<カウンタ変数>がNextでカウントし、繰り返す回数を指定できる制御構文のため、あまり無限ループが起きにくいです。
しかし以下のような書き方をすれば、無限ループに陥ります。
Sub test11a()
Dim i As Integer
For i = 1 To 3
MsgBox "繰り返し処理:" & i & "回目"
'変数iを「1」に戻して、わざと無限ループを発生させる
i = i - 1
Next
End Sub
「Next」の前に「i = i – 1」を入れてみました。
これだと、せっかく「Next」で変数iが「+1」されても、その前に「-1」されているので、永遠と変数iは繰り返し終了の「3」にたどりつけません。
無限ループは致命的なエラーの一つです。
これを実行してしまった場合、永遠と繰り返されるため、キーボードの「Ctrl」+「Break」キーを押して、実行中のプログラムを強制終了させるしかありません。
この強制終了させると、以下のウインドウが表示され、「終了」を押すとプログラムが停止します。
一方で「デバッグ」を押すと、ソースコードのエラー箇所を表示してくれます。
この状態ではプログラムは完全に停止していません。
「停止」アイコンを押すことで、プログラムは完全に停止されます。
ループ処理はFor文よりも、次回紹介する「Do While~Loopステートメント」の方が起こしやすいです。
無限ループした際には慌てずに、「Ctrl」+「Break」で強制終了するようにしましょう。