Excel VBA

[ExcelVBA] ループ処理を使いこなそう![Do...Loop]

2020年4月8日

 

本記事はエクセル2019で動作確認を行っています。

実際にVBAをご自身で記入することが習得への近道です。

 

困ってます
決まった処理を繰り返し行うのにループ処理の方法を教えて。

 

このような疑問にお答えします。

 

VBAの繰り返し処理には、

指定した回数だけ処理を行う。

条件に一致するまで処理を行う。

の方法があります。

 

今回は条件に一致するまで処理を行うループ処理の書き方をご紹介します。

 

ループ処理には実は4パターンの記述方法があり、条件に合わせて少しずつ記述の仕方が変わってきます。

 

本記事では「Do While・・・Loop」の記述方法を紹介し、最期に4パターンの特徴の違いを解説していきます。

 

条件に一致する間は処理を繰り返す方法

 

(式)

Do While 条件式

処理内容

Loop

 

条件式に条件が一致する間処理内容を繰り返す方法です。

例題を見ながら、どのように使用するか見ていきましょう。

 

例題

 

上の表は製品の売上を製品の種類別に合計を出したものです。

F列には売上目標があり、商品の種類別に目標が達成できているか否かでメッセージ表示させるにはどうすればいいか考えます。

 

Sub 売上目標()

    Dim goal As Long
    Dim sales As Long
    Dim row As Integer
    Dim product As String
    
    
    row = 14 '①
    
    Do While row <= 16  '②

        goal = Cells(row, 6).Value  '③
        sales = Cells(row, 4).Value
        product = Left(Cells(row, 3).Value, InStr(Cells(row, 3).Value, "売") - 1)
    
        If goal <= sales Then
            MsgBox product & "売上目標達成!!"  '④
        Else
            MsgBox product & "売上目標未達成..."  '⑤
        End If
    
        row = row + 1  '⑥
        
       
    Loop '⑦
    
End Sub

解説

①:rowという行を変数でとり、14(行目)を代入します。

②:rowが16(行目)になるまで、ループ処理を行います。

③:目標(goal)と売上(sales)と製品(product)を変数でとり、値を代入します。

④:条件分岐(If文)で売上が目標以上なら達成のメッセージを表示させます。

⑤:売上が目標以下なら未達成のメッセージを表示させます。

⑥:行に1を足すことで、14行目から15行目になります。

⑦:Loopを通過することで、再度Do While に移動します。

⑧:②から⑦を繰り返し、17行目になればループ処理を飛び出し、End Subに移動します。

 

実行結果

メッセージボックスが順番に表示されます。

 

>>条件分岐についてはこちら

実際にVBAを記述して1つずつステップインを行いながら、動きを確認してください。

 

いろいろなループ処理

 

 

ここまで、条件に一致する間処理を繰り返す方法を見てきました。

Do...Loopの処理方法には4パターン存在します。

 

繰り返し処理を行うに条件判断 繰り返し処理を行ったに条件判断
条件に一致するまで処理を実行 Do Until(条件式)..Loop Do...Loop Until(条件式)
条件に一致するは処理を実行 Do While(条件式)...Loop Do...Loop While(条件式)

 

WhileとUntilの使い方は、先ほどの例題で考えてみましょう。

Do Whileの後の条件式は「条件に一致する間」でしたので、「14~16行目の間」という記述でした。

反対にUntilを使用すると、「条件に一致するまで」となるので「17行目まで」となります。

よって、「Do Until row=17」という記述をすれば同じ結果を得ることができます。

また、例題ではDoの次に条件式を書くことで、繰り返し処理を行う前に条件判断を行います。

の場合は初めの条件により処理を1度も行わないまま、ループ処理を終えることもあります。

 

Do...Loop Until(条件式)やDo...Loop While(条件式)はどうでしょうか。

こちらは1度処理を行ってから条件式を通過するので、必ず1度はループ処理が行われます。

 

少し4パターンの使い分けは慣れが必要ですが、まずは「Do While...Loop」の使い方ができるよう練習してみて下さい。

 

今回も最後まで目を通していただきありがとうございます。

 

-Excel VBA
-

Copyright© Ronpeee blog , 2023 All Rights Reserved.