Excel VBAのDo…Loop徹底解説!繰り返し処理を自在に操る方法

Excel VBAを使いこなすうえで、繰り返し処理は欠かせません。中でも「Do…Loopステートメント」は、条件によって繰り返し処理を柔軟に制御できる便利な構文です。
この記事では、Do…Loopの基本から、Do While、Do Until、Exit Doなどの使い方、活用例までを初心者にもわかりやすく解説します。実務に役立つサンプルコードも交えながら、じっくり掘り下げていきます。


Do…Loopとは?

「Do…Loop」は、VBAで一定の条件に基づいて繰り返し処理を実行するためのステートメントです。
繰り返しの条件は、ループの前(Doの後)または後(Loopの後)で指定でき、柔軟な使い方ができます。

基本的な構文は以下のとおりです。

Do While 条件式
' 繰り返し処理
Loop

または

Do
' 繰り返し処理
Loop While 条件式

このように、条件が真(True)の間は繰り返し処理を続けます。


Do While…Loopの使い方

「Do While…Loop」は、条件がTrueの間だけ繰り返し処理を行います。

例:セルA1から下に向かって空白セルに出会うまで処理を繰り返す

Sub LoopUntilEmpty()
Dim i As Integer
i = 1
Do While Cells(i, 1).Value <> ""
MsgBox Cells(i, 1).Value
i = i + 1
Loop
End Sub

このコードは、A列の値を上から順に表示していき、空白セルに達したら終了します。


Do Until…Loopの使い方

「Do Until…Loop」は、条件がFalseの間だけ繰り返され、条件がTrueになった時にループを終了します。

例:空白セルに出会うまで処理

Sub LoopWithUntil()
Dim i As Integer
i = 1
Do Until Cells(i, 1).Value = ""
MsgBox Cells(i, 1).Value
i = i + 1
Loop
End Sub

この例は、Do Whileと同じ動作に見えますが、条件の書き方が逆になっている点に注意が必要です。


Loop While / Loop Untilとの違い

条件式をループの「後」に書くパターンもあります。

Do
' 繰り返し処理
Loop While 条件式

この場合、条件の判定は繰り返し処理が1回終わった「あと」に実行されるため、必ず一度はループ処理が行われます。

例:1回は必ず表示されるパターン

Sub AtLeastOnce()
Dim i As Integer
i = 1
Do
MsgBox Cells(i, 1).Value
i = i + 1
Loop Until Cells(i, 1).Value = ""
End Sub

Exit Doでループを中断する

「Exit Do」は、条件とは別に任意のタイミングでループを抜けるために使われます。

例:特定の値に出会ったら終了

Sub ExitLoopOnMatch()
Dim i As Integer
i = 1
Do While Cells(i, 1).Value <> ""
If Cells(i, 1).Value = "終了" Then
Exit Do
End If
i = i + 1
Loop
End Sub

このコードでは、セルの値が「終了」と一致したらループを即座に抜けます。


無限ループを避けるために

Do…Loopステートメントは非常に柔軟な反面、条件の設定を間違えると無限ループに陥ることがあります。

無限ループになりやすい例:

Sub InfiniteLoop()
Dim i As Integer
i = 1
Do While i < 10
' iを増やす処理がない!
MsgBox "i = " & i
Loop
End Sub

このようにカウンタの増加処理を忘れると、ループが永遠に終わらない状態になります。


For…Nextとの違いは?

「Do…Loop」と「For…Next」は、どちらも繰り返しに使われますが、以下のような違いがあります。

項目Do…LoopFor…Next
条件の柔軟さ高い(任意の条件)固定回数向き
ループの途中で抜けるExit DoExit For
使用場面条件に応じた継続回数が明確な繰り返し

応用編:複数条件とネスト

複雑な繰り返し処理には、複数の条件やループの入れ子(ネスト)も使われます。

例:2次元の表を縦横に走査

Sub SearchTable()
Dim i As Integer, j As Integer
For i = 1 To 10
For j = 1 To 5
If Cells(i, j).Value = "検索" Then
MsgBox "見つけた!行: " & i & " 列: " & j
Exit Sub
End If
Next j
Next i
End Sub

このようにDo…Loopと同じ目的でも、状況に応じてForループを選ぶケースもあります。


実務で使えるサンプルコード

1. 空白行を削除する

Sub DeleteEmptyRows()
Dim i As Long
i = 1
Do While Cells(i, 1).Value <> ""
If WorksheetFunction.CountA(Rows(i)) = 0 Then
Rows(i).Delete
Else
i = i + 1
End If
Loop
End Sub

2. 条件に一致するセルを色付け

Sub HighlightValues()
Dim i As Integer
i = 1
Do Until Cells(i, 1).Value = ""
If Cells(i, 1).Value > 100 Then
Cells(i, 1).Interior.Color = RGB(255, 255, 0)
End If
i = i + 1
Loop
End Sub

まとめ

Do…Loopステートメントは、条件によって柔軟に繰り返し処理を行えるVBAの強力な機能です。
繰り返しの開始タイミングや条件の使い方、ループの途中で抜けるテクニックなどを理解することで、実務での自動化や効率化が飛躍的に向上します。

「繰り返し処理=For…Next」と思い込まず、条件が主役となる処理にはDo…Loopを上手に使ってみてください。

タイトルとURLをコピーしました