【反復処理】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 でループを抜けているためです。
関連リンク
次ページ:標準モジュールのインポートとエクスポート
トップページ:トップページへ