Do Loopステートメントってどうやって使うの?
今回はVBAで指定した条件によって処理を繰り返すDo Loopステートメントの使い方を説明します。
Do Loopステートメントにはいくつか種類があり、目的とする処理によって使い分けることが重要です。
そこで今回は、初心者でも「Do Loopステートメントの正しい使い分け方」が理解できるような基礎的な内容をお伝えしていきます。
こんな人におすすめ
- Do Loopステートメントの基礎について学習したい
- 処理を繰り返すVBAを作りたい
- 使い分け方がわからない
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介
続きを見る
Contents
Do Loopステートメントとは
VBAの繰り返しの処理にはFor Nextステートメントが存在し、これを用いると指定した回数で処理の繰り返しが決まります。
一方、指定した条件が真(True)の間、または真(True)になるまで処理を繰り返したい場合はDo Loopステートメントを使用します。
つまり、条件が成立している間、または条件が成立するまで処理を繰り返すことができるのがDo Loopステートメントで、以下の4種類に分けられます。
ステートメント | 条件を判断するタイミング | 繰り返し処理の期間 |
Do While〜Loop | 最初 | 条件が成立している間 |
Do〜Loop While | 最後 | |
Do Until〜Loop | 最初 | 条件が成立するまで |
Do〜Loop Until | 最後 |
マクロで実行したい処理の内容に合わせて、最適なパターンを使用しましょう!
Do While ~ Loopステートメント
Do While 〜 Loopステートメントは、条件が成立している間処理を繰り返します。
Do While 条件
処理
Loop
最初に条件を判断するので、条件が成立しない場合は処理が実行されません。
プロシージャの例
図1のセルA1から1つずつ下のセルに移動し、セルが空白でない間はメッセージボックスを表示するプロシージャを例に見ていきましょう。
Sub Test1()
Dim I As Integer
I = 1
Range("A1").Select
Do While ActiveCell.Value <> ""
MsgBox I & "回目の実行です"
I = I + 1
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Test1では条件が成立している間、処理を繰り返します。
- 条件:アクティブセルがが空白でない
- 処理:メッセージボックスを表示する
今回はセルA1〜A5までセルに数値が入っている(セルが空白でない)ので5回メッセージボックスが表示されます。
しかし、セルA6は空欄で条件が成立しないため、繰り返し処理が終了し、6回目のメッセージボックスは表示されません。
Do ~ Loop Whileステートメント
Do ~ Loop Whileステートメントも、先ほどと同様で条件が成立している間処理を繰り返します。
Do
処理
Loop While 条件
ただし、最後に条件を判断するので、仮に条件が成立しない場合でも最低一回は処理が実行されます。
プロシージャの例
図2を用いてみていきましょう。
先ほどと同様に、セルA1から1つずつ下のセルに移動し、セルが空白でない間はメッセージボックスを表示するプロシージャを実行します。
Sub Test2()
Dim I As Integer
I = 1
Range("A1").Select
Do
MsgBox I & "回目の実行です"
I = I + 1
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""
End Sub
Test2では条件が成立している間、処理を繰り返します。
- 条件:アクティブセルが空白でない
- 処理:メッセージボックスを表示する
Test1のプロシージャでは最初に条件を判断していました。そのため、仮に図2を用いた場合はセルA1が空欄のため最初に処理が止まってしまいメッセージボックスは表示されません。
しかし、Test2では最後に条件を判断するため、最初の1回はセルA1が空欄であろうがなかろうが処理が必ず実行されます。
Do Until~Loopステートメント
Do Until 〜 Loopステートメントは、条件が成立するまで処理を繰り返します。
Do Until 条件
処理
Loop
最初に条件を判断するので、条件が成立する場合は処理が実行されません。
プロシージャの例
図3のセルA1から1つずつ下のセルに移動し、セルが空白になるまでアクティブセルを赤く塗りつぶすプロシージャを例に見ていきましょう。
Sub Test3()
Range("A1").Select
Do Until ActiveCell = ""
ActiveCell.Interior.ColorIndex = 3
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Test3では条件が成立するまで、処理を繰り返します。※条件が成立したら処理がストップします
- 条件:アクティブセルが空白
- 処理:アクティブセルの背景を赤色にする
セルA1〜A5まではセルに数値が入っているので、セルが赤くなります。しかし、セルA6は空白で条件が成立したので処理は終了し、セルA6はセルの色が変更されません。
Do ~ Loop Untilステートメント
Do 〜 Loop Untilステートメントも、先ほどと同様に条件が成立するまで処理を繰り返します。
Do
処理
Loop Until 条件
ただし、最後に条件を判断するので、条件が成立する場合でも最低一回は処理が実行されます。
プロシージャの例
図4を用いてみていきましょう。
先ほどと同様に、セルA1から1つずつ下のセルに移動し、セルが空白になるまでアクティブセルを赤く塗りつぶすプロシージャを実行します。
Sub Test4()
Range("A1").Select
Do
ActiveCell.Interior.ColorIndex = 3
ActiveCell.Offset(1, 0).Select
Loop Until ActiveCell = ""
End Sub
Test4では条件が成立するまで、処理を繰り返します。※条件が成立したら処理がストップします
- 条件:アクティブセルがが空白
- 処理:アクティブセルの背景を赤色にする
Test3のプロシージャでは最初に条件を判断していました。そのため、図4を用いた場合はセルA1が空欄のため最初に処理が止まってしまい、セルの塗りつぶしは実行されません。
しかし、Test4では最後に条件を判断するため、最初の1回は空欄であろうがなかろうが処理が必ず実行されます。
Do Loopステートメントのおさらい
指定した条件によって処理を繰り返すDo Loopステートメントの使い方4種類について説明しました。
Do Loopステートメントの使い方
目的とする処理によって、条件を最初に判断するのか最後に判断するのか、使い分けることがポイントです。
以上、「Do Loopステートメントの使い方|処理を繰り返すVBA」をお伝えしました!
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介
続きを見る