VBAには
・繰り返し(ループ)処理中にスキップ(continue)する機能
がありません!
※VBAは大昔からある言語、かつ機能追加が行われないため大昔のままです。
※裏を返すと「スキップ(continue)する機能」は、比較的新しい機能ということです。
ですが
・GoTo文を応用することで
・疑似的にスキップ(continue)を実現
できます!
VBAコード
Sub sample()
Dim i As Integer
For i = 0 To 10
'2で割って余りが0の場合
If i Mod 2 = 0 Then
'スキップする
GoTo Continue
End If
'スキップされなかった場合のみ実行
MsgBox (i & "を2で割った余りは0で無いため、実行しました!")
Continue:
Next i
End Sub
実行結果
2で割った余りが0でない場合のみ、メッセージボックスが表示されました。
参考①(Goto文について)
「スキップ(continue)する機能」を含め、大昔のプログラミング言語には以下もありませんでした。
・繰り返し処理を強制終了(break文)
・エラー処理
※大昔は不便でした。時代が進むにつれてプログラミング言語に新しい制御文が増え、どんどん便利になりました。
そのため大昔のプログラミング言語は、上記と同様の機能を「Goto文で実現」していました。
※Goto文が普通に使用されていました。
しかし現代ではbreak文もエラー処理も存在するため
・Goto文を使用するのは良くない
と言われるようになりました。
※大昔のプログラミング言語ではGoto文でしか実現できなかったから、Goto文が使用されていただけです。
上記により
・Goto文は悪者扱い
されるようになってしまいました。
※Goto文は自由度が高いために、トリッキーなコードになってしまうこともありました。
※「Goto文を使用 = スパゲッティコードだから駄目」と判断する人が増えました。
ただVBAには現在も「スキップ(continue)する機能」が存在しないため、代わりにGoto文で同等の機能を実現するのは適切な判断です。
※だって他のプログラミング言語とは違い、VBAには「スキップ(continue)する機能」が無いんですから。
※Goto文というだけで否定するのは不適切です。
参考②
GoTo文(GoToステートメント)の詳細は、公式サイトをご確認ください。