Excel VBA 逆引き集 | Continue(VBAでの代替)

Excel VBA
スポンサーリンク

Continue(VBAでの代替)

VBAには 「Continue」構文が存在しません
他の言語(C#, Pythonなど)では「現在のループの残りをスキップして次の繰り返しへ進む」ために continue を使いますが、VBAでは GoTo や条件分岐で代替します。初心者向けに分かりやすく整理しました。


基本アイデア

  • 他言語の continue: 「この回は処理を飛ばして次へ」
  • VBAでの代替:
    1. If文で処理を囲む → 条件を満たしたときだけ処理する。
    2. GoToラベルでジャンプ → 条件成立時にループ末尾へ飛ばす。

方法1:If文で処理を囲む(推奨)

Sub Continue_IfWrap()
    Dim i As Long
    For i = 1 To 10
        '偶数はスキップしたい
        If i Mod 2 <> 0 Then
            Cells(i, 1).Value = i & " は奇数"
        End If
    Next i
End Sub
VB
  • ポイント:
    • 偶数は処理せず、奇数だけ実行。
    • 「continue」の代わりに 条件を満たすときだけ処理する
    • シンプルで読みやすい。

方法2:GoToでループ末尾へジャンプ

Sub Continue_GoTo()
    Dim i As Long
    For i = 1 To 10
        '偶数はスキップ
        If i Mod 2 = 0 Then GoTo SkipLoop

        Cells(i, 2).Value = i & " は奇数"

SkipLoop:
    Next i
End Sub
VB
  • ポイント:
    • 偶数なら GoTo SkipLoop で処理を飛ばし、Nextへ進む。
    • 「continue」に近い動き。
    • ただし GoTo は乱用するとコードが読みにくくなるので注意。

Do…Loopでも同じ考え方

Sub Continue_DoLoop()
    Dim r As Long
    r = 2
    Do While Cells(r, "A").Value <> ""
        '空白セルはスキップ
        If Cells(r, "B").Value = "" Then
            r = r + 1
            GoTo SkipDo
        End If

        Cells(r, "C").Value = "処理済"

SkipDo:
        r = r + 1
    Loop
End Sub
VB
  • ポイント:
    • 条件成立時に処理を飛ばして次のループへ。
    • Do…Loopでも GoTo で代替可能。

実務テンプレート

'1) 空白セルをスキップして計算
Sub SkipBlankCells()
    Dim i As Long, last As Long
    last = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To last
        If Cells(i, "A").Value = "" Then GoTo SkipRow
        Cells(i, "C").Value = Cells(i, "A").Value * 2
SkipRow:
    Next i
End Sub

'2) 特定条件で処理を飛ばす(重要フラグ以外はスキップ)
Sub SkipNonImportant()
    Dim i As Long, last As Long
    last = Cells(Rows.Count, "F").End(xlUp).Row
    For i = 2 To last
        If Cells(i, "F").Value <> "重要" Then GoTo SkipRow
        Cells(i, "G").Value = "対象"
SkipRow:
    Next i
End Sub
VB

例題で練習

例題1:偶数行はスキップして奇数行だけ処理

Sub Example_SkipEvenRows()
    Dim i As Long
    For i = 2 To 20
        If i Mod 2 = 0 Then GoTo SkipRow
        Cells(i, "B").Value = "奇数行処理"
SkipRow:
    Next i
End Sub
VB

例題2:空白セルを飛ばして「処理済」と書き込む

Sub Example_SkipBlanks()
    Dim i As Long
    For i = 2 To 50
        If Cells(i, "A").Value = "" Then GoTo SkipRow
        Cells(i, "C").Value = "処理済"
SkipRow:
    Next i
End Sub
VB

実務の落とし穴と対策

  • GoTo乱用は危険: コードが複雑になるので、可能なら If文で処理を囲む方法を優先。
  • Exit Forとの違い: Exit For は「ループ全体を終了」、Continue代替は「その回だけスキップ」。
  • 条件の明確化: 「どんな場合にスキップするか」を必ず書く。曖昧だと意図せず処理が飛ぶ。
  • 読みやすさ重視: 小規模なら GoTo でもOK、大規模なら If文で整理する方が保守性が高い。
タイトルとURLをコピーしました