VBA にはプログラムで繰り返し処理を行うための構文 Do While Loop があります。ここでは、Do While Loop の使い方について説明します。
Do While Loop の使い方
Do While Loop の構文は以下の通りです。
1 2 3 |
Do While 条件式 何らかの処理 Loop |
条件式には True か False を返す式を指定します。条件式が True の間ブロック内に記述した処理が繰り返されます。
以下は、Do While Loop を使用した例です。
1 2 3 4 5 6 |
Dim n As Integer n = 1 Do While n < 5 Cells(1, n) = n ' 1行目のn列にnを設定 n = n + 1 Loop |
上のプログラムでは、変数 n を1から加算していき、n が5を超えるまで1行目の n 列のセルに n の値を設定します。
このように繰り返し処理を行いたい場合に Do While Loop 文は便利です。
無限ループ
Do While Loop で指定した条件式が常に True なってしまい、繰り返しが終わらない場合があります。このような状態を無限ループといいます。プログラムが無限ループの状態になると制御不能になるので、注意してください。
1 2 3 4 5 6 7 |
Dim i As Integer i = 1 ' 1から10まで表示 Do While i < 10 Debug.Print i Loop |
上のプログラムの場合、変数 i の値に加算するのを忘れているため i の値が変わらず、常に指定した条件式を満たしてしまいます。そのため無限ループが発生します。
ただし、場合によっては意図的に無限ループを発生させるプログラムもあります。その場合は、条件式に True を指定することで無限ループを作ることができます。
While 文から途中で抜け出す:Exit Do
繰り返しを途中で中止したい箇所で Exit Do を実行すれば、ループから抜け出すことができます。
以下は意図的に無限ループを発生させ、Exit Do で抜け出す例です。
1 2 3 4 5 6 |
Do While True If InputBox("「end」と入力すると終了") = "end" Then Exit Do End If MsgBox("繰り返します") Loop |
上のプログラムでは、「end」と入力するまでメッセージボックスを表示する例です。無限ループを意図的に発生させるために条件式に True を設定しています。
Do Until Loop の使い方
VBA には While とは別に Until という構文があります。
1 2 3 |
Do Until 条件式 何らかの処理 Loop |
Until は While の場合と繰り返しの条件が逆になった構文です。条件式には True か False を返す式を指定し、条件式が True になるまで処理が繰り返されます。
While のコードをUntilを使って書き直すと以下のようになります。
1 2 3 4 5 6 |
Dim n As Integer n = 1 Do Until n >= 5 Cells(1, n) = n ' 1行目のn列にnを設定 n = n + 1 Loop |
実行結果は While の場合と同じになります。
While のときと条件式が逆になっていることに注意してください。While と Until どちらを使っても実装することは可能ですが、「まで」という意味を強調したいときなど状況によって使い分けるといいでしょう。