VBAコード解説

【エクセルVBA初心者講座】Do Loopステートメントの使い方|処理を繰り返すVBA

黒板に描かれたDoLoopステートメント

Do Loopステートメントってどうやって使うの?

今回はVBAで指定した条件によって処理を繰り返すDo Loopステートメントの使い方を説明します。

Do Loopステートメントにはいくつか種類があり、目的とする処理によって使い分けることが重要です。

そこで今回は、初心者でも「Do Loopステートメントの正しい使い分け方」が理解できるような基礎的な内容をお伝えしていきます。

こんな人におすすめ

  • Do Loopステートメントの基礎について学習したい
  • 処理を繰り返すVBAを作りたい
  • 使い分け方がわからない
関連記事
本の階段を登る男性
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介

続きを見る

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つずつ下のセルに移動し、セルが空白でない間はメッセージボックスを表示するプロシージャを例に見ていきましょう。

図1のイメージ
図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回目のメッセージボックスは表示されません。

Test1の実行結果のイメージ
Test1の実行結果

Do ~ Loop Whileステートメント

Do ~ Loop Whileステートメントも、先ほどと同様で条件が成立している間処理を繰り返します。

Do
   処理
Loop While 条件

ただし、最後に条件を判断するので、仮に条件が成立しない場合でも最低一回は処理が実行されます。

プロシージャの例

図2を用いてみていきましょう。

先ほどと同様に、セルA1から1つずつ下のセルに移動し、セルが空白でない間はメッセージボックスを表示するプロシージャを実行します。

図2のイメージ
図2
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が空欄であろうがなかろうが処理が必ず実行されます。

Test2の実行結果

Do Until~Loopステートメント

Do Until 〜 Loopステートメントは、条件が成立するまで処理を繰り返します。

Do Until 条件
   処理
Loop

最初に条件を判断するので、条件が成立する場合は処理が実行されません。

プロシージャの例

図3のセルA1から1つずつ下のセルに移動し、セルが空白になるまでアクティブセルを赤く塗りつぶすプロシージャを例に見ていきましょう。

図3のイメージ
図3
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はセルの色が変更されません。

test3の実行結果のイメージ
Test3の実行結果

Do ~ Loop Untilステートメント

Do 〜 Loop Untilステートメントも、先ほどと同様に条件が成立するまで処理を繰り返します。

Do
   処理
Loop Until 条件

ただし、最後に条件を判断するので、条件が成立する場合でも最低一回は処理が実行されます。

プロシージャの例

図4を用いてみていきましょう。

先ほどと同様に、セルA1から1つずつ下のセルに移動し、セルが空白になるまでアクティブセルを赤く塗りつぶすプロシージャを実行します。

図4のイメージ図
図4
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回は空欄であろうがなかろうが処理が必ず実行されます。

test4の実行結果
Test4の実行結果

Do Loopステートメントのおさらい

importantの文字

指定した条件によって処理を繰り返すDo Loopステートメントの使い方4種類について説明しました。

Do Loopステートメントの使い方

目的とする処理によって、条件を最初に判断するのか最後に判断するのか、使い分けることがポイントです。

以上、「Do Loopステートメントの使い方|処理を繰り返すVBA」をお伝えしました!

関連記事
本の階段を登る男性
【エクセル マクロ/VBA】初心者が独学勉強するための本|おすすめ2冊を紹介

続きを見る

-VBAコード解説