本記事はエクセル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」の使い方ができるよう練習してみて下さい。
今回も最後まで目を通していただきありがとうございます。