(2)Do While 条件式 … Loop
条件式はIf文でも説明した、比較演算子や論理演算子を使用します。条件式が正しい間繰り返し処理を行います。条件式が最初に書いてあるので、条件式が正しくないと一度も繰り返し処理は実行されません。
Do While 条件式
繰り返す処理(複数行可能)
Loop
図20:Do While … Loopフローチャート
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文を終了させました。