【12】VBAの制御構文「For~Nextステートメント」について

記事で紹介しているエクセル
・エクセル2019 [64ビット版]

目次

制御構文「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

このソースコードを実行すると以下のような結果になります。

画像1

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になるまでですので、これで終了です。

画像2

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」キーを押して、実行中のプログラムを強制終了させるしかありません。

この強制終了させると、以下のウインドウが表示され、「終了」を押すとプログラムが停止します。

一方で「デバッグ」を押すと、ソースコードのエラー箇所を表示してくれます。

画像3

この状態ではプログラムは完全に停止していません。

「停止」アイコンを押すことで、プログラムは完全に停止されます。

画像4

ループ処理はFor文よりも、次回紹介する「Do While~Loopステートメント」の方が起こしやすいです。

無限ループした際には慌てずに、「Ctrl」+「Break」で強制終了するようにしましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次