【反復処理】Do~Loop(Until)の使い方

今回の目標

  • Do~LoopとUntilを使用して反復処理をできるようになる

説明

始めに

本ページは前章で説明した「Do...Loop(While)」を使用できる前提で解説します。ご存じない方は前章をお読みください。
 リンク:Do...Loop(While) の使い方

継続条件と終了条件

最初に、『継続条件』と『終了条件』を説明しなければなりません。
『継続条件』とは、前章のDo...Loop(While)で学習した、ループを継続するための条件です。For文もこれに該当します。
『終了条件』とは、ループを終了するための条件です。
例えば、終了条件が『i < 5』なら、iが5未満になったら反復処理を終了します。iが5未満になるまで繰り返す、と言い換えられます。対して、継続条件が『i < 5』なら、iが5未満のときに反復処理を行います。

Do~Loop(Until) 構文(前判定/後判定)

早速ですが、Do...Loop(Until)の前判定の構文です。

Do Until 終了条件 Then
    繰り返したい処理
Loop

今回のDo...Loop(Until)の構文は前回のDo...Loop(While)の構文と似ており、「While」と書くところを「Until」にします。

使用サンプルです。

'B2以降のセルが空白になるまで、売上金を基準に評価を入力
Sub DoLoopUntil_Sample1()
    Dim i As Long
    i = 3
    Do Until Cells(i, 2) = ""
        If (Cells(i, 4) < 20) Then
            Cells(i, 5) = "不可"
        ElseIf (Cells(i, 4) < 30) Then
            Cells(i, 5) = "可"
        Else
            Cells(i, 5) = "良"
        End If
        i = i + 1
    Loop
End Sub

『Do Until』の後ろには、終了条件を指定しています。このサンプルではB3が空白か調べ、空白でない場合はD列の売上金を基準にして、E列の評価に成績を入力します。ループのiに1を足し、1行ずつずらしながら繰り返します。

後判定の基本構文です。

Do
    繰り返したい処理
Loop Until 終了条件 

後判定のサンプルです。

'B2以降のセルが空白になるまで、売上金を基準に評価を入力
Sub DoLoopUntil_Sample2()
    Dim i As Long
    i = 2
    Do
        i = i + 1
        If (Cells(i, 4) < 20) Then
            Cells(i, 5) = "不可"
        ElseIf (Cells(i, 4) < 30) Then
            Cells(i, 5) = "可"
        Else
            Cells(i, 5) = "良"
        End If
    Loop Until Cells(i + 1, 2) = ""
End Sub

D列の売上金を基準にして、E列の評価に成績を入力します。ループのiに1を足し、B3が空白か調べ、空白なら終了します。

ループを途中で抜ける方法(Exit Do)

反復処理は処理の途中で抜ける命令があります。

Exit Do   ' ループを強制的に抜ける

ループの途中で、Exit Do と命令するとそのループを脱出します。
まずは、通常のループのサンプルです。

Sub DoLoopUntil_Sample3_1()
    Dim i As Long
    Do
        i = i + 1
    Loop Until i = 20
    '【 i の値は、20 】と表示される
    MsgBox "i の値は、" & i
End Sub

次にExit Doでループを抜けるサンプルです。

Sub DoLoopUntil_Sample3_2()
    Dim i As Long
    Do
        i = i + 1
        ' iが7以上の時…
        If 7 <= i Then
            Exit Do  '←継続条件・終了条件を無視してループを抜ける
        End If
        'i が7の時にループを抜けているので、真になることはない
        If 10 <= i Then
            MsgBox "これは表示されないぜ!"
        End If
    Loop Until i = 20
    '【 i の値は、7 】と表示される
    MsgBox "i の値は、" & i
End Sub

『Loop Until i = 20』とありますが、メッセージボックスでは、i が 7 と表示されます。
これは、if文で i が 7 以上の時、Exit Do でループを抜けているためです。

関連リンク

ページの先頭へ