IF 文の階層を深くしていけばループの先頭に戻す必要なんてないのだが、そうするとソースが読みにくくなってしまう。
ループを先頭に戻すには一工夫必要である。
(ちなみに VBA も同様)
次のスクリプトは数値が 1~9 の間ループし、数値が偶数のときだけメッセージを出す。
このスクリプトを、数値が偶数でなければループの先頭に戻るようにしてみたい。
Dim i For i = 1 To 9 '偶数であれば処理する If i Mod 2 = 0 Then MsgBox CStr(i) & "は偶数" End If Next
次のように、ループの次の階層に Do...Loop ステートメントを使うことで、Continue のように振る舞わせることができる。
Dim i For i = 0 To 9 Do '偶数でなければ処理しない If i Mod 2 <> 0 Then Exit Do '← ここでループを抜ける(Loop While False の次に移る) End If '偶数であれば処理する MsgBox CStr(i) & "は偶数" Loop While False Next
ループの先頭に戻すときは Exit Do で Do...Loop を抜ける。
すると Loop While False の直後にある Next に制御が移るので、そのまま次の For ループが始まる。
(ループの先頭に戻るのと実質同じ)
ループが最後まで到達した場合は、Loop While False としてあるので、そのまま Do...Loop は終了となる。
あとは Exit Do したときと同じで、次のループに処理が移る。
これで IF 文の階層を深くしなく済む。