「Do ~ Loop」とはどういった場面でつかうのでしょうか?
「Loop」という単語からなんとなく「繰り返し」をイメージされるかと思いますが、想像どおりマクロの「繰返処理」につかわれています。
こちらでは「Do ~ Loop」について、VBAでの具体的な使い方をご説明いたします。
「繰返処理」とは条件に達するまで処理をずっと続けさせることですね。
「Do ~ Loop」の分類|4種類
じつはこの「Do ~ Loop」は大きく分けて4種類あります。
基本的な考え方はおなじですが、種類によってもちろん使い方がちがいます。
繰返処理をするにあたって、基準となる「条件」と「判定時期」によって処理内容がそれぞれちがってきます。
- 「条件」…「Until」または「While」をつかう
- 「判定時期」…繰返処理の「実行前」または「実行後」に判定する
こちらを分類するとこのような表になります。
「実行後」に条件判定 | 「実行前」に条件判定 | |
Until | ~になるまで繰返処理(分類1) | ~になるまで繰返処理(分類2) |
While | ~のあいだは繰返処理(分類3) | ~のあいだは繰返処理(分類4) |
具体的なつかい方|4種類
具体的なコードをつかって4種類の確認をします。
例でつかうワークシートはこちらです。
それぞれの種類によってどのような動作のちがいがあるかを見ておきましょう。
分類1|Do ~ Loop Until
「実行後」に条件判定 / 「~になるまで繰返処理(分類1)」
Do
(ここに繰返処理したい内容を記述)
Loop Until 「条件式」
記述したい内容はこちら。
【スタート】マクロの名前:do_loop_until (変数の作成)「変数:i」を数字型として定義する 「変数:i」に1を代入する (繰返処理の開始) セル(「変数:i」,1)を選択する 「変数:i」に1を加算する (繰返処理の条件判定)セル(「変数:i」,1)の値が2になるまで繰返す 【ゴール】
コードでの記述はこちら。
Sub do_loop_until() Dim i As Long i = 1 Do Cells(i, 1).Select i = i + 1 Loop Until Cells(i, 1).Value = 2 End Sub
実行結果はこちら。
セル「A5」が選択されました。
分類2|Do Until ~ Loop
「実行前」に条件判定 / 「~になるまで繰返処理(分類2)」
Do Until 「条件式」
(ここに繰返処理したい内容を記述)
Loop
記述したい内容はこちら。
【スタート】マクロの名前:do_until_loop (変数の作成)「変数:i」を数字型として定義する 「変数:i」に1を代入する (繰返処理の開始・条件判定)セル(「変数:i」,1)の値が2になるまで繰返す セル(「変数:i」,1)を選択する 「変数:i」に1を加算する (つぎの繰返処理) 【ゴール】
コードでの記述はこちら。
Sub do_until_loop() Dim i As Long i = 1 Do Until Cells(i, 1).Value = 2 Cells(i, 1).Select i = i + 1 Loop End Sub
実行結果はこちら。
なにも選択されません。
分類3|Do ~ Loop While
「実行後」に条件判定 / 「~のあいだは繰返処理(分類3)」
Do
(ここに繰返処理したい内容を記述)
Loop While 「条件式」
記述したい内容はこちら。
【スタート】マクロの名前:do_loop_while (変数の作成)「変数:i」を数字型として定義する 「変数:i」に1を代入する (繰返処理の開始) セル(「変数:i」,1)を選択する 「変数:i」に1を加算する (繰返処理の条件判定)セル(「変数:i」,1)の値が1のときは繰返す 【ゴール】
コードでの記述はこちら。
Sub do_loop_while() Dim i As Long i = 1 Do Cells(i, 1).Select i = i + 1 Loop While Cells(i, 1).Value = 1 End Sub
実行結果はこちら。
セル「A4」が選択されました。
分類4|Do While ~ Loop
「実行前」に条件判定 / 「~のあいだは繰返処理(分類4)」
Do While 「条件式」
(ここに繰返処理したい内容を記述)
Loop
記述したい内容はこちら。
【スタート】マクロの名前:do_while_loop (変数の作成)「変数:i」を数字型として定義する 「変数:i」に1を代入する (繰返処理の開始・条件判定)セル(「変数:i」,1)の値が1のときは繰返す セル(「変数:i」,1)を選択する 「変数:i」に1を加算する (つぎの繰返処理) 【ゴール】
コードでの記述はこちら。
Sub do_while_loop() Dim i As Long i = 1 Do While Cells(i, 1).Value = 1 Cells(i, 1).Select i = i + 1 Loop End Sub
実行結果はこちら。
なにも選択されません。
まとめ
4種類の「Do ~ Loop」の使い方についてご説明をいたしました。
これらを使えれば、こまかな条件でもコードの分岐処理を実現することができるので、「こういった使い方もあるんだな。」程度で覚えておいてください。
とても便利な「Do ~ Loop」ではありますが、繰返処理を覚えたい場合まずは「For ~ Next」から慣れていただくことをオススメしています。
「For ~ Next」をつかったコードを書けるようになってきたら「Do ~ Loop」にも挑戦してみてください。
わたしの経験上、おなじ「繰返処理」をするにしても「For ~ Next」をつかって作られているマクロの方がおおいと感じていますし、こちらのほうが書きやすいです。