Do Loop文を使った繰り返し処理

VBA を使った繰り返し処理の一つである Do Loop 文の使い方です。 Do Loop 文では条件式が True の間、繰り返し処理を行います。ここでは Excel VBA で Do Loop 文を使った繰り返し処理を行う方法について解説します。

(Last modified: )

Do While...Loopの使い方

Do Loop 文ではいくつかの記述方法がありますが、その中の一つである Do While ... Loop を使った繰り返し処理の記述方法です。書式は次の通りです。

Do While 条件式
    条件式がTrueのときに行う処理
Loop

最初に Do While のあとに記述された条件式を評価します。条件式が「True」の場合、条件式から Loop の間の処理を一度実行します。そのあとで再び条件式を評価し、「True」だった場合は再度条件式から Loop の間の処理を実行します。これを条件式を評価したときに「False」になるまで繰り返します。

注意しなければいけないのは、条件式が「True」のままだと無限に繰り返し処理を実行してしまうので、条件式から Loop の間で実行される処理の中で、条件式が変化するような処理を行う必要があるという点です。

またこの書式の場合は、まず条件式の評価が行われるので、条件式がいきなり「False」になった場合は繰り返しの処理が一度も実行されずに Do Loop 文の次へ処理が移ることもあります。

次のサンプルではセル B2 に入力された数値から 5 を繰り返し減算していき、 5 以下になるまで繰り返します。

Option Explicit

Sub テスト()
    Dim num As Integer
    num = Range("B2").Value

    Do While num > 5
        Debug.Print ("数値 = " & num)
        num = num - 5
    Loop
End Sub

今回のサンプルでは繰り返し処理を行う条件式が num > 5 となっています。この条件式を評価し「True」だった場合にイミディエイトウィンドウに数値を出力したあとで数値から 5 を減算します。そのあと再び条件式を評価し、「False」になるまで繰り返します。この 5 を減算する処理がなければ、条件式はずっと「True」となるため、この繰り返し処理が終わることはありません。

それでは実際にプログラムを実行してみます。まずワークシートの B2 セルに 16 と入力しました。

Do While...Loopの使い方(1)

先ほどのプログラムを実行します。

Do While...Loopの使い方(2)

イミディエイトウィンドウに次のように出力されました。

Do While...Loopの使い方(3)

次にワークシートの B2 セルに 3 を入力してから、再度プログラムを実行してみました。

Do While...Loopの使い方(4)

今回は Do While ... Loop 文で最初に条件式を評価したときに「False」となるため、繰り返し処理は一度も実行されずイミディエイトウィンドウには何も出力されませんでした。

Do While...Loopの使い方(5)

Do...Loop Whileの使い方

次に Do...Loop While を使った繰り返し処理の記述方法です。書式は次の通りです。

Do
    条件式がTrueのときに行う処理
Loop While 条件式

この書式ではまず Do から Loop までの処理を一度実行します。そのあとで While の値に記述された条件式を評価します。条件式が「True」だった場合は最初に戻って再び Do から Loop までの処理を実行します。これを条件式を評価したときに「False」になるまで繰り返します。

注意しなければいけないのは、条件式が「True」のままだと無限に繰り返し処理を実行してしまうので、 Do から Loop の間で実行される処理の中で、条件式が変化するような処理を行う必要があるという点です。

>Do...Loop While 文は Do While...Loop 文と基本的に同じですが、条件式が最後に記述されているため必ず一度は繰り返し処理の部分を実行する点が異なります。必ず一度は実行させたい場合にこの書式を使用してください。

次のサンプルではセル B2 に入力された数値から 5 を繰り返し減算していき、 5 以下になるまで繰り返します。

Option Explicit

Sub テスト()
    Dim num As Integer
    num = Range("B2").Value

    Do
        Debug.Print ("数値 = " & num)
        num = num - 5
    Loop While num > 5
End Sub

それでは実際にプログラムを実行してみます。まずワークシートの B2 セルに 16 と入力しました。

Do...Loop Whileの使い方(1)

先ほどのプログラムを実行します。

Do...Loop Whileの使い方(2)

イミディエイトウィンドウに次のように出力されました。

Do...Loop Whileの使い方(3)

次にワークシートの B2 セルに 3 を入力してから、再度プログラムを実行してみました。

Do...Loop Whileの使い方(4)

今回は Do...Loop While 文で最初に条件式を評価したときに「False」となりますが、条件式を評価する前に必ず一度は繰り返し処理が実行されるためイミディエイトウィンドウには次のように出力されました。

Do...Loop Whileの使い方(5)

Do Until...Loopの使い方

Do While ... Loop では条件式が「True」の間繰り返し処理が実行されますが、逆に条件式が「False」の間繰り返し処理を実行することもできます。書式は次の通りです。

Do Until 条件式
    条件式がFalseのときに行う処理
Loop

最初に Do Until のあとに記述された条件式を評価します。条件式が「False」の場合、条件式から Loop の間の処理を一度実行します。そのあとで再び条件式を評価し、「False」だった場合は再度条件式から Loop の間の処理を実行します。これを条件式を評価したときに「True」になるまで繰り返します。

Do Until ... Loop を使うことで条件式が「False」の間繰り返し処理を実行することができますが、論理演算子の Not を使うことで Do While ... Loop でも同じことができます。

Do While Not 条件式
    条件式がFalseのときに行う処理
Loop

条件式が「False」の場合、 Not 演算子によって「True」となります。結果的に条件式が「False」の間繰り返し処理が行われることになります。

このようにあえて Do Until ... Loop を使用する必要はありませんが、条件式が「False」間繰り返し処理を行うことを明確にしたい場合などに利用されてみてください。

同じように Do...Loop While の代わりに Do...Loop Until を使用することもできます。

Do
    条件式がFalseのときに行う処理
Loop Until 条件式

Do から Loop までの処理を一度実行します。そのあとで Until の値に記述された条件式を評価します。条件式が「False」だった場合は最初に戻って再び Do から Loop までの処理を実行します。これを条件式を評価したときに「True」になるまで繰り返します。

-- --

Excel VBA で Do Loop 文を使った繰り返し処理を行う方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。