0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBA でよく使う繰り返し処理【②Do While ループ/Do Until ループ(Do ループ While/Do ループ Until)】

Last updated at Posted at 2025-07-17

② 指定した条件で処理を繰り返すループ処理

【Do While ループ/Do Until ループ】

Do While ループ/Do Until ループは、条件が True の間、繰り返し処理を行います。こちらは特定の条件が決まっており、その条件内でのみ処理したい場合に用います。
上記のFor...Next ループに比べるとそこまで使用頻度は多くないかもしれませんが、重要な構文となります。

構文:

Do While ループ/Do Until ループの構文は以下のようになります。

Do While(Until) "条件式"
    '・・・処理・・・'
Loop

Whileは条件式を満たしている間だけ処理を実行します。(条件がTrueの間だけ繰り返す)
Untilは条件式を満たすまでの間だけ処理を実行します。(条件がFalseの間だけ繰り返す)
少し分かりづらいかと思いますので、使用例を見て説明していきます。

使用例:

例. 1~5の数値を出力する場合

Do While ループ:

Sub DoWhileLoop()
    Dim i As Integer
    i = 1
    Do While i <= 5
        Debug.Print i
        i = i + 1
    Loop
End Sub

出力結果

1
2
3
4
5


Do Until ループ:

Sub DoUntilLoop()
    Dim i As Integer
    i = 1
    Do Until i > 5
        Debug.Print i
        i = i + 1
    Loop
End Sub

出力結果

1
2
3
4
5


Do While ループは、最初に条件を評価して True の場合のみ処理を実行するため、条件が最初から False である場合は一度も実行されません。
Do Until ループは、最初に条件を評価して False の場合のみ処理を実行するため、条件が最初から True である場合は一度も実行されません。


また、ループを抜ける条件を適切に設定しないと、無限ループに陥る可能性があります。以下の場合は、無限ループに陥った例になります。(ちなみに条件式を書かなかった場合も、ループを抜ける条件を適切に設定しない限り、無限ループとなってしまいます)

例. 無限ループの場合

Do While ループ:

Sub DoWhileLoop()
    Dim i As Integer
    i = 1
    Do While i > 0 ' 条件が常にTrue
        Debug.Print "現在の値: " & i
        ' i を変化させる処理がないため、無限ループになる
    Loop
End Sub

Do Until ループ:

Sub DoUntilLoop()
    Dim i As Integer
    i = 1
    Do Until i < 0 ' 条件が常にFalse
        Debug.Print "現在の値: " & i
        ' i を変化させる処理がないため、無限ループになる
    Loop
End Sub

では、次に強制的にループを抜けるやり方を見ていきます。
Do While/Until ループを抜けるには Exit Do を使います。

例. 特定の条件の時にループを抜ける場合

Do While ループ:

Sub DoWhileLoop()
    Dim i As Integer
    i = 1
    Do While i <= 5
        If i = 4 Then Exit Do
        Debug.Print i
        i = i + 1
    Loop
End Sub

出力結果

1
2
3


Do Until ループ:

Sub DoUntilLoop()
    Dim i As Integer
    i = 1
    Do Until i > 5
        If i = 4 Then Exit Do
        Debug.Print i
        i = i + 1
    Loop
End Sub

出力結果

1
2
3

特定の条件の時だけ処理をスキップして、それ以降も引き続き処理を行う場合は、For...Next ループの時と同様に GoTo を利用します。

例. 特定の条件の時だけ処理をスキップする場合

Do While ループ:

Sub DoWhileLoop()
    Dim i As Integer
    i = 1
    Do While i <= 5
        If i = 4 Then GoTo CONTINUE:
        Debug.Print i
CONTINUE:
        i = i + 1
    Loop
End Sub

出力結果

1
2
3
5


Do Until ループ:

Sub DoUntilLoop()
    Dim i As Integer
    i = 1
    Do Until i > 5
        If i = 4 Then GoTo CONTINUE:
        Debug.Print i
CONTINUE:
        i = i + 1
    Loop
End Sub

出力結果

1
2
3
5

【Do ループ While/Do ループ Until】

Do While ループ/Do Until ループには、処理を先に記述し、繰り返し条件を後に記述するといった構文も存在します。
Do ループ While/Do ループ Untilでは、条件式が初めからFalseの場合でも必ずループ内の処理が1度実行されます
これらに関しては、そのような書き方があるな程度で留めてもらってかまいません。

Do ループ While/Do ループ Untilの構文は以下のようになります。

Do
    '・・・処理・・・'
Loop While(Until) "条件式"

例. 1~5の数値を出力する場合

Do ループ While:

Sub DoLoopWhile()
    Dim i As Integer
    i = 1
    Do 
        Debug.Print i
        i = i + 1
    Loop While i <= 5
End Sub

出力結果

1
2
3
4
5


Do ループ Until:

Sub DoLoopUntil()
    Dim i As Integer
    i = 1
    Do
        Debug.Print i
        i = i + 1
    Loop Until i > 5
End Sub

出力結果

1
2
3
4
5

他の記事へ

Excel VBA でよく使う繰り返し処理【①For...Next ループ】

Excel VBA でよく使う繰り返し処理【③For Each...Next ループ】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?