(2)Do While 条件式 … Loop

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

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

図20:Do While … Loopフローチャート

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

[リスト10]ReiDo2(Do文While文例題.xlsm)

Sub ReiDo2()
    y = 3
    Do While Cells(y, 2) <> "*"
        Cells(y, 4) = Cells(y, 3) * 2
        y = y + 1
    Loop
End Sub

ReiDo1で書いたIf文の内容をWhile 条件式にまとめることができました。While(~の間)なので、Noの項目の内容が「*」でない間、繰り返し処理を行います。

(3)Do … Loop While 条件式

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

[リスト11]Do … Loop While の構文

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

図21:Do … Loop Whileフローチャート

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

[リスト12]ReiDo3(Do文While文例題.xlsm)

Sub ReiDo3()
    y = 3
    Do
        Cells(y, 4) = Cells(y, 3) * 2
        y = y + 1
    Loop While Cells(y, 2) <> "*"
End Sub

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

[リスト13]ReiDo3_1(Do文While文例題.xlsm)

Sub ReiDo3_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 While Cells(y, 2) <> "*"
End Sub

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