Continue(VBAでの代替)
VBAには 「Continue」構文が存在しません。
他の言語(C#, Pythonなど)では「現在のループの残りをスキップして次の繰り返しへ進む」ために continue を使いますが、VBAでは GoTo や条件分岐で代替します。初心者向けに分かりやすく整理しました。
基本アイデア
- 他言語の continue: 「この回は処理を飛ばして次へ」
- VBAでの代替:
- If文で処理を囲む → 条件を満たしたときだけ処理する。
- 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文で整理する方が保守性が高い。
