VBA Do~Loop 繰り返し処理

VBAによる「Do~Loop」を利用した繰り返し処理を行う方法を紹介していきます。
繰り返し処理は、「For~Next」で行う方法もありますが、
Forは繰り返し回数がわかっている場合に使いますが
Do~Loopは繰り返し回数がわからない場合に使用することができます。

それでは早速見ていきましょう。

Do~Loopを利用した繰り返し処理

Do~Loopは繰り返し回数がわからない場合に使用できます。
繰り返し回数の代わりに、条件を指定し繰り返し処理を行います。
「~の間ループをする」「~になるまでループする」など条件を指定しましょう。

Do While ~ Loop 「~の間ループをする」

「Do While ~ Loop」は「~の間ループをする」という繰り返し処理を行うことができます。
実際の例を見てみましょう。
「変数rowが10未満の間、処理を繰り返す」プログラムを作成しました。

Private Sub cmdDo_Click()

    Dim row As Integer
    row = 1
    
    Do While row < 10
        Cells(row, 1).Value = row
        row = row + 1
    Loop
    
End Sub

解説

6行目:rowが10未満の場合処理を繰り返す
7行目:1列目の1~9行目に変数rowの値を代入する
8行目:変数rowを加算する この行を忘れるとrowがずっと10未満になるので、無限ループが発生します。

結果

結果をみると10未満の値が入力されていることが確認できました。
8行目の「row = row + 1」を忘れると無限ループが発生するので注意しましょう。

Do Until ~ Loop 「~になるまでループをする」

「Do Until ~ Loop」は「~になるまでループをする」という繰り返し処理を行うことができます。
例では、変数rowが10になるまでループを行う処理をしています。

Private Sub cmdDo_Click()

    Dim row As Integer
    row = 1
    
    Do Until row = 10
        Cells(row, 1).Value = row
        row = row + 1
    Loop
    
End Sub

結果

このように、先ほどのDo Whileと同じ結果になりました。
結果は同じになりましたが、意味は異なりますので違いを抑えましょう。
「Do While」rowが10より値が小さい間、繰り返し処理を行います。
「Do Until」rowが10になるまで、繰り返し処理を行います。

Do Loop 「条件を指定せずループ」

「Do While」や「Do Until」はループをさせる条件を指定していましたが、
条件を指定せずループさせる方法を紹介します。
例を見てみましょう。

Private Sub cmdDo_Click()

    Dim row As Integer
    row = 1
    
    Do
    
        If row = 10 Then
            Exit Do
        End If
        
        Cells(row, 1).Value = row
        row = row + 1
    Loop
    
End Sub

解説

6行目:Doのみすることで、ループの終了条件を指定していません。無限ループをすることができます。
8~10行目:Exit Doは、ループを終了するという意味になります。なのでここでは、row = 10になった時ループを終了する。といった意味になります。

結果

このように、「Do ~Loop」で終了条件を決めずにループさせることができます。
それだけでは無限ループになってしまうので、「Exit Do」と組み合わせて使用しましょう。
ループを終了させるための条件が複雑な場合やループを好きな位置で終了させることができるというメリットがあります。
自由度が高いループ処理となっています。
状況に合わせて使い分けましょう。

Exit Do と Continue

ループを終了させる方法と次のループへ処理を飛ばす方法を紹介していきます。
どちらも必ず使いますので押さえておきましょう。
ループを強制終了させるには「Exit Do」
次のループへ処理を飛ばすには「Goto」を利用しましょう。
VBAにはContinueといった関数はないので、Gotoでその代わりをします。

例を見てみましょう。

Private Sub cmdDo_Click()

    Dim row As Integer
    row = 1
    
    Do Until row = 10
    
        If row = 8 Then
            Exit Do
        End If
        
        If row = 5 Then
            GoTo ContinueDO
        End If
        
        Cells(row, 1).Value = row
        
ContinueDO:

        row = row + 1
        
    Loop
    
End Sub

解説

6行目:row=10になるまでループを行う。
8~10行目:row=8の時、ループを強制終了させる。
12~14行目:row=5の時、ContinueDo:(18行目)まで処理をとばす。

結果

結果をみるとわかるように、
5行目は次のループに処理が飛んでいることがわかります。
また、8行目でループが強制終了していることも確認できました。

まとめ

Doは、ループの回数が決まっていない場合や可変の場合に利用することができます。
ループの回数を条件で指定することがとても便利となっています。
「Do While」「Do Until」の使い方を覚えておきましょう

 

EXCEL VBAの記事一覧

おすすめの記事