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 と入力しました。
先ほどのプログラムを実行します。
イミディエイトウィンドウに次のように出力されました。
次にワークシートの B2 セルに 3 を入力してから、再度プログラムを実行してみました。
今回は Do While ... Loop 文で最初に条件式を評価したときに「False」となるため、繰り返し処理は一度も実行されずイミディエイトウィンドウには何も出力されませんでした。
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 と入力しました。
先ほどのプログラムを実行します。
イミディエイトウィンドウに次のように出力されました。
次にワークシートの B2 セルに 3 を入力してから、再度プログラムを実行してみました。
今回は Do...Loop While 文で最初に条件式を評価したときに「False」となりますが、条件式を評価する前に必ず一度は繰り返し処理が実行されるためイミディエイトウィンドウには次のように出力されました。
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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。