目次
制御構文「Do Until~Loopステートメント」について
今回の制御構文は「Do Until~Loopステートメント」です。
これは前回の「Do While~Loopステートメント」を理解していれば、非常に単純です。
ループ処理における条件式の一致・不一致が逆になるだけです。
以下のサンプルコードを見てみましょう。
Sub test13()
Dim i As Integer
i = 1
Do Until i = 3
MsgBox "<Do Until>繰り返し処理:" & i & "回目"
i = i + 1
Loop
End Sub
「Do Until~Loopステートメント」の基本構文は以下の通りです。
Do Until <条件式> ・・・ (条件式が一致したらループ処理を終了)
<繰り返される実行したい処理>
Loop
「Do While」と「Do Until」の大きな違いは以下の通りです。
Do While文 | Do Until文 |
---|---|
<条件式>が不一致の時に終了 | <条件式>が一致の時に終了 |
サンプルコードを動作させると、以下の通りに実行されます。
Do Until文とDo While文は、「Do~Loopステートメント」とひと括りする事もできるので、Do While文のみ覚えていれば、特にDo Until文を使わなくても、Do While文で表現できそうです。
もっと言えば、簡単なループ処理なら、For文のみで大抵は表現できそうです。
したがって、少なくともDo While文は確実にマスターし、繰り返す条件が真逆のDo Until文があるくらいで覚えておきましょう。
<補足情報>Do Until文のいろんな書き方
UntilをLoopの後ろに書いた場合
これはWhile文の時に解説したのと全く同じです。
したがって詳しく解説はしませんが、「Until <条件式>」をLoopの後ろに書くことで、必ずDoの実行文を1度は必ず処理させます。
Sub test13a()
Dim i As Integer
i = 1
Do Until i = 1
MsgBox "<Do Until[1つ目]>繰り返し処理:" & i & "回目"
i = i + 1
Loop
i = 1
Do
MsgBox "<Do Until[2つ目]>繰り返し処理:" & i & "回目"
'i = i + 1
Loop Until i = 1
End Sub
Do Until分でサイコロ目の6が出るまで振ってみる
これも全く同じなので、解説は省きます。
要するに、「Do Until文だと、このように記述される」という違いのみ紹介します。
Sub test13b()
Dim i As Integer
'乱数を発生させるための記述
Randomize
'変数iが「6」以外の時ループする ・・・ つまり「6」になればループ終了
Do
'ランダムで「1」~「6」までの整数を発生させて変数iに代入する
i = Int(6 * Rnd(1)) + 1
MsgBox "サイコロの目は【" & i & "】です"
Loop Until i = 6
End Sub