怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - ループの先頭に戻す(Continue)

VBScript にはループを途中で抜ける Exit ステートメントはあるのだが、ループの先頭に戻すステートメント(ほかの言語で言う Continue に相当するもの)はない。

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 DoDo...Loop を抜ける。
すると Loop While False の直後にある Next に制御が移るので、そのまま次の For ループが始まる。
(ループの先頭に戻るのと実質同じ)

ループが最後まで到達した場合は、Loop While False としてあるので、そのまま Do...Loop は終了となる。
あとは Exit Do したときと同じで、次のループに処理が移る。

これで IF 文の階層を深くしなく済む。