これまでループに関して、For~Nextステートメントを紹介しました。しかし、条件で分岐させてループさせるには、Do Loopステートメントを使います。これは、繰り返し回数を指定するというより、一定の条件が満たされるまでの間、もしくは一定の条件が満たされない間、処理を繰り返す処理を行います。
これには4つのパターンがあります。
構文 | 意味 |
---|---|
Do While ~ Loop | 条件が真の間は繰り返し実行。 |
Do ~ Loop While | 条件が真の間は繰り返し実行。但し、条件が偽であっても1回だけは処理を行う。 |
Do Until ~ Loop | 条件が偽の間は繰り返し実行。 |
Do ~ Loop Until | 条件が偽の間は繰り返し実行。但し、条件が真であっても1回だけは処理を行う。 |
では、全部はご紹介しませんが、Do While~LoopとDo Until~Loopの例を取り上げて見ます。
まず、Do While~Loopの例を下に記述しておきます。
Sub 計算1()
Dim a As Long
Dim b As Long
a = InputBox("初期値を入れてください。")
b = InputBox("終了値を入れてください。")
If a >= b Or b - a > 10 Then
MsgBox ("値が不適切です。")
Exit Sub
End If
Do While a <> b
a = a + 1
MsgBox "aの値は" & a & "になりました。"
Loop
End Sub
このVBAを簡潔に紹介すると以下のようになります。
変数aとbを宣言します(データ型は長整数型)。それぞれの変数の中に、ユーザが入力する初期値と終了値を格納します。次にIFステートメントで、aがb以上もしくはbからaを引いた数は10より大きいときは、メッセージボックスとして「値が不適切です。」と表示させます。この処理を行った場合は、ここでプロシージャを終了させます。
(Exit Subは強制的に処理を終了するための記述)
Do While ~ Loop構文では、aとbが等しくなければaに1を足したものを再びaに格納し、メッセージとして「aの値は(a)になりました。」と表示させます。これをaとbの値が等しくなるまで繰り返すというプログラムになっています。
つまり、Do
While a<>bが成立している間はLoopまでの処理を実行し、a<>bが成立しなくなったら(aとbが等しくなったら)、繰り返し処理を終えることになります。
では、次に同じような処理をDo Until ~ Loopで記述してみましょう。以下のとおりです。
Sub 計算1()
Dim a As Long
Dim b As Long
a = InputBox("初期値を入れてください。")
b = InputBox("終了値を入れてください。")
If a >= b Or b - a > 10 Then
MsgBox ("値が不適切です。")
Exit Sub
End If
Do Until a = b
a = a + 1
MsgBox "aの値は" & a & "になりました。"
Loop
End Sub
内容はほとんど同じです。違うところは、Do Until a = bのところです。動作は、まったく同じですが、条件がまったく反対になっています。一方が「等しくない間」、片方は「等しくなるまで」という条件となっています。違いが分かりましたか?
Do ~ Loop WhileとDo ~ Loop Untilは、条件文が処理の後に来ていますので、必ず条件を指定する前に1回は処理を行い、それから条件文にしたがって繰り返されることになります。上の例では、その前にIFステートメントで処理条件が書いてありますので、Do ~ Loop WhileやDo ~ Loop Untilで記述しても結果は同じになります。