Excel VBAの繰り返し:Do While Loop

VBA にはプログラムで繰り返し処理を行うための構文 Do While Loop があります。ここでは、Do While Loop の使い方について説明します。

Do While Loop の使い方

Do While Loop の構文は以下の通りです。

Do While 条件式
    何らかの処理
Loop

条件式には True か False を返す式を指定します。条件式が True の間ブロック内に記述した処理が繰り返されます。

以下は、Do While Loop を使用した例です。

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 の値を設定します。

vba_while1

このように繰り返し処理を行いたい場合に Do While Loop 文は便利です。

無限ループ

Do While Loop で指定した条件式が常に True なってしまい、繰り返しが終わらない場合があります。このような状態を無限ループといいます。プログラムが無限ループの状態になると制御不能になるので、注意してください。

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 で抜け出す例です。

Do While True
    If InputBox("「end」と入力すると終了") = "end" Then
        Exit Do
    End If
    MsgBox("繰り返します")
Loop

上のプログラムでは、「end」と入力するまでメッセージボックスを表示する例です。無限ループを意図的に発生させるために条件式に True を設定しています。

Do Until Loop の使い方

VBA には While とは別に Until という構文があります。

Do Until 条件式
    何らかの処理
Loop

Until は While の場合と繰り返しの条件が逆になった構文です。条件式には True か False を返す式を指定し、条件式が True になるまで処理が繰り返されます。

While のコードをUntilを使って書き直すと以下のようになります。

Dim n As Integer
n = 1
Do Until n >= 5
    Cells(1, n) = n ' 1行目のn列にnを設定
    n = n + 1
Loop

実行結果は While の場合と同じになります。

vba_while1

While のときと条件式が逆になっていることに注意してください。While と Until どちらを使っても実装することは可能ですが、「まで」という意味を強調したいときなど状況によって使い分けるといいでしょう。


イベント

2017/12/05(火)
Design Thinking Square