(4)Do Until 条件式 … Loop

条件式は(2)と同じように、If文でも説明した、比較演算子や論理演算子を使用します。条件式が正しくなるまで(正しくない間)繰り返し処理を行います。条件式が最初に書いてあるので、条件式が正しいと一度も繰り返し処理は実行されません。

[リスト14]Do Until … Loopの構文

Do Until 条件式
   繰り返す処理(複数行可能)
Loop

図22:Do Until … Loopフローチャート

 (1)Do … Loopで作成した例題を、Do Until 条件式… Loop で書き換えてみましょう。

[リスト15]ReiDo4(Do文While文例題.xlsm)

Sub ReiDo4()
    y = 3
    Do Until Cells(y, 2) = "*"
        Cells(y, 4) = Cells(y, 3) * 2
        y = y + 1
    Loop
End Sub

Until(~になるまで)なので、条件式が正しくない間(「*」がくるまで)繰り返し処理を行います。

(5)Do … Loop Until 条件式

条件式は(2)と同じように、If文でも説明した、比較演算子や論理演算子を使用します。条件式が正しくなるまで(正しくない間)繰り返し処理を行います。条件式が最後に書いてあるので、条件式が正しいときでも一度繰り返し処理を実行し、最後に条件式が正しいか確認します。正しくない時は、また繰り返し処理を実行します。

[リスト16]Do … Loop Until の構文

Do
   繰り返す処理(複数行可能)
Loop Until 条件式

図23:Do … Loop Until フローチャート

(1)Do … Loopで作成した例題を、Do … Loop Until 条件式で書き換えてみましょう。

[リスト17]ReiDo5(Do文While文例題.xlsm)

Sub ReiDo5()
    y = 3
    Do
        Cells(y, 4) = Cells(y, 3) * 2
        y = y + 1
    Loop Until Cells(y, 2) = "*"
End Sub

Until(~になるまで)なので、条件式が正しくない間(「*」がくるまで)繰り返し処理を行います。もし、データがなにもなくて「*」のみ書かれていた時でも1回は繰り返し処理がおこなわれ、次の行に進んで「*」があるか確認するので、注意が必要です。必ず1回は繰り返し処理を行いたいような手順があるプログラムにこの命令は使用されます。

今回の例題で計算するデータがなにもない時でもちゃんと動くようにVBAを追加してみましょう。

[リスト18]ReiDo5_1(Do文While文例題.xlsm)

Sub ReiDo5_1()
    y = 3
    Do
         If Cells(y, 2) = "*" Then
            MsgBox ("データがありません")
            Exit Do
        End If
        Cells(y, 4) = Cells(y, 3) * 2
        y = y + 1
    Loop Until Cells(y, 2) = "*"
End Sub

Do文の後にIf文で「*」があるか確認して、あった場合はメッセージを表示し、Exit DoでDo文を終了させました。

同じ例題で各Do文を書いてみました。今回は条件式がはじめにあるDo文のほうがすっきりと書ける例題でした。各Do文の動きの違いを認識していれば、それぞれの特徴をいかして、必要に応じたVBAを作成できると思います。