【VBA入門】Do Whileで繰り返し処理!For Nextとの違いを具体例で紹介

ようこそ♪ささぽんのExcel教室へ。
今回は VBAにおいて「Do Whileで繰り返し処理をする方法」 をお届けします!
マクロにおけるループ処理といえば、For〜Next構文を思い浮かべる方が多いのではないでしょうか。
For〜Next構文は「1から10まで繰り返す」という回数指定の処理に適しています。
しかし、「ファイルが存在する限り処理を続けたい」「データがなくなるまで繰り返したい」場合には、For〜Next構文でどう書けばいいか悩んでしまいますよね。
こうした「繰り返し回数が決まっていない処理」には、Do While構文がぴったりです!
この記事では、Do Whileの基本文法、For Nextとの違い、そしてDo Whileの実例を紹介します。

この記事は以下のような方におすすめです!
・For Nextのループ処理をマスターした方
・条件に応じて繰り返す処理をマスターしたい方
・For NextとDo Whileの違いが分からない方
このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。
読み終わるころにはきっと、
「Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。
一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!
目次
1.Do Whileとは?繰り返し条件で動くループ
VBAの「Do While」は、条件に応じて処理を繰り返すためのループ構文です。
ここでは、Do Whileの動きや書き方の基本を解説していきます。
◼︎条件が成り立つ間だけ繰り返す
Do Whileは、「条件が成り立っている間(Trueの間)」だけ、処理を繰り返すループ処理です。
基本の構文は以下の通りです:
Do While '条件
' 繰り返す処理
Loop
ポイントは、「ループに入る前に、まず条件をチェックする」という点です。
つまり、最初の時点で条件が満たされていなければ、1回も処理が実行されません。
例えば:
Dim i As Integer
i = 1
Do While i < 5
MsgBox i
i = i + 1
Loop
このコードでは、i が1〜4の間だけ MsgBox が表示され、i が5になった時点でループが終了しMsgBoxが非表示になります。
このように、条件がTrueである限り繰り返されるのが Do While の処理原則です。
◼︎Do Whileの基本構文
Do While の書き方はシンプルですが、ループ内で条件が変化するようにすることがとても重要です。
例えば:
Dim count As Integer
count = 3
Do While count > 0
MsgBox "あと " & count & " 回です"
count = count - 1
Loop
このコードでは、count を3から始めて1ずつ減らしながら、0になるまで繰り返しています。
毎回メッセージボックスが表示され、「OK」を押すたびにカウントダウンされていくのが実感できますよね。
ポイントはループの一番最後にある count = count – 1 の部分です。
この1行があることで、count の値がループの度に減算され、やがて条件 count > 0 がFalseになってループが終了します。
Do Whileの基本原則は、「希望の処理」と「条件を変化させる処理」のセットをループの中に書くことです。
処理だけを書いてしまうと無限ループに陥ってしまうので注意しましょう。
◼︎条件を満たした場合にのみループに入る
Do While は、ループの前に条件をチェックしてから処理に入る構文です。
そのため、条件が最初から満たされていなければ、中の処理は1回も実行されません。
例えば:
Dim count As Integer
count = 0
Do While count > 0
MsgBox count
count = count - 1
Loop
この場合、count は 0 なので、条件 count > 0 はFalseと判定されます。
そのため、ループ内の処理は一度も実行されずに終了します。
If文のような条件判定を冒頭で行い、一致すればループ処理を実施するというのがDo Whileのもう1つの特徴です。
2.For Nextとの違いは?使い分けのポイント
ここまでDo Whileの基本構文や特徴などを説明してきました。
一方、VBAを学んでいる方はFor Nextの方がループ構文としてお馴染みかもしれません。
この章では、その2つの違いや使い分けのポイントをわかりやすく紹介していきます!
For Nextの基本については以下の記事で解説していますので、気になる方はご覧ください♪
◼︎For Next:回数が決まっているループ
For Nextは、繰り返す回数があらかじめ決まっているときに使うループです。
例えば:
Dim i As Integer
For i = 1 To 10
MsgBox i
Next i
このコードでは、変数iが1から10まで1ずつ増えていき、10回だけループが実行されます。
スタートとゴールが明確なので、流れを把握しやすく、初心者にも扱いやすいのが特徴です!
今回のように「表の1行目から10行目までを順に処理したい」と、処理回数が決まっている場合にはまずFor Nextを選ぶのが基本になります。
◼︎Do While:条件判定を活用するループ
Do Whileは、特定の条件を満たしている間だけ処理を繰り返すループ構文です。
For Nextのように「何回繰り返すか」が決まっているわけではなく、処理が何回繰り返されるかは、条件次第で変わります。
例えば、フォルダ内にあるファイルを1つずつ処理したい場面を考えてみましょう。
その場合、何個ファイルがあるかは毎回変わるかもしれません。
そういった状況では、以下のように書くことができます。
Dim myFile As String
myFile = Dir("C:\Test\*.xlsx")
Do While myFile <> ""
' ファイルに対する処理
myFile = Dir
Loop
このコードではDir関数を使っており、フォルダの中を1つずつ覗きに行くようなイメージで処理を進めています。
Dirで1つ目のファイル名が取得できたら処理を実行し、Dirをもう一度呼び出すことで次のファイルを見に行っています。
ファイルがもうなければ、Dirは空の値を返すので、そこでループが終了するという仕組みです。
このように処理回数がその時々で変わる場面では、Do Whileが非常に便利です!
◼︎使い分けのコツ:「回数」か「条件」か
For NextとDo Whileの使い分けで迷ったら、まずは「繰り返す回数が決まっているかどうか」を判断の基準にすると分かりやすいです。
処理回数が決まっていたり、その処理の中で最大値を簡単に取得できたりする場合であればFor Nextを選択すると良いでしょう。
For Nextは「1から10まで処理を繰り返す」といったように、繰り返しの範囲をシンプルに指定できる構文です。
さらに、カウント用の変数(例えば i)が処理の中で自動で増えていくようになっているので、初心者でも無理なく使いやすいのが特徴です。
一方で、処理を繰り返すかどうかを「そのときの状況」で判断したい場合には、Do Whileのほうが向いています。
例えば「ファイルがまだ残っているか」「セルが空じゃないか」など、状況を確認しながら処理を続けたいときです。
Do Whileは、処理を始める前に条件をチェックするので、ある意味で条件分岐のような役割も果たしています。
わざわざIf文でループに入るかどうかを分けなくても、Do Whileの条件でそのまま制御できるのが便利な点です。
3.Do Whileを使ってみよう!実践例の紹介
ここからは、実際にDo Whileを使って処理を行った事例をご紹介します。
今回取り上げるのは、フォルダ内にある複数のExcelファイルを1つずつ処理するケースです。
ファイルの数は日によって変わるため、For Nextでは対応できません。
こうした処理には、条件に応じて繰り返すDo Whileが非常に便利です!
◼︎ファイルの数だけループする構文
以下は、指定フォルダ内のExcelファイルを1つずつ取り出して処理する基本的なコードです。
Sub LoopFiles()
Dim myPath As String
Dim myFile As String
myPath = "C:\Test\" ' 対象のフォルダのパス
myFile = Dir(myPath & "*.xlsx") ' 最初のファイル名を取得
Do While myFile <> ""
' ファイルに対する処理(今回はファイル名を表示)
MsgBox myFile
' 次のファイルを取得
myFile = Dir
Loop
End Sub
このコードでは、Dir関数を使ってフォルダ内のファイル名を1件ずつ取得し、Do Whileでループ処理しています。
ループの継続条件は「myFileが空でない限り」です。
つまり、ファイルが存在する間だけ処理が繰り返されます。
Dirは1回目の呼び出しで最初のファイルを、2回目以降は順番に次のファイルを返してくれるため、Do Whileと相性抜群の関数です。
◼︎ループ処理を精査する工夫
初めてDo Whileを使うと、「本当に全部のファイルを処理できているか?」と不安になることがあります。
そこで私がいつも行っているのが、ループの回数をカウントして確認する方法です。
以下のように、カウント用の変数を用意して、ループ内で1ずつ増やしていきます。
Dim count As Integer
count = 0
Do While myFile <> ""
count = count + 1
myFile = Dir
Loop
MsgBox "処理件数:" & count
このように書くと、ループが何回実行されたかが分かるため、想定通りに動いているかを確認できます。
こうした仕組みを入れておくことで、処理ミスや漏れに早く気づくことができるようになるので、ぜひ取り入れてみてください。
4.注意点と活用のポイント
Do Whileは便利な構文ですが、使い方を間違えると予期しない動作につながることもあります。
特に初学者がつまずきやすいのが「無限ループ」などのトラブルです。
この章では、よくある注意点と、安全に使いこなすためのポイントをご紹介します。
◼︎無限ループを防ぐ
Do Whileを使う際に最も気をつけたいのが「無限ループ」です。
これは、ループを抜ける条件が永遠に満たされないまま処理が繰り返されてしまう状態を指します。
例えば、次のようなコードは一見問題なさそうですが、実行すると処理が終わりません。
Dim i As Integer
i = 1
Do While i <= 5
MsgBox i
Loop
この場合、iの値がずっと1のままなので、i <= 5が永遠にTrueのままになります。
ループから抜け出す条件が変化しないため、無限にメッセージが表示され続けてしまうのです。
こうしたトラブルを防ぐには、ループの中で必ず条件に影響を与える処理を入れることが大切です。
先ほどのコードを以下のように直してみましょう:
Dim i As Integer
i = 1
Do While i <= 5
MsgBox i
i = i + 1
Loop
ループ内の最後に“i = i+ 1”を入れたので、処理されるたびにiがカウントアップされ、5回繰り返した後正常にループが終われるようになりました。
このように、ループの終了に向かう変化を明確に記述するようにしましょう。
◼︎条件を正しく書く
Do Whileは、「条件がTrueの間だけ処理を繰り返す」構文です。
そのため、条件の書き方が正しくないと、ループが一度も実行されないこともあります。
次のコードは、カウントダウンしながらメッセージを表示する処理を書こうとした例です。
Dim count As Integer
count = 0
Do While count > 0
MsgBox "残り:" & count
count = count - 1
Loop
一見、Do Whileを活用したループ処理を上手く書いているようですが、“count”の初期値が0の状態で「count>0」を条件としたループを定義してしまっています。
そのため、このループ処理が一度も実行されず、メッセージボックスが表示されないことになります。
条件判定として使うために敢えてループに入れないようにしている場合には問題ないですが、それ以外の場合にはループが始まる条件がちゃんと成立するかを最初に確認しておくことが大切です。
◼︎似ている構文と混同しない
今回はDo While構文を紹介していますが、似た形式の構文がいくつかあるため注意が必要です。
特に間違えやすいのが、“Do Until”と“Do Loop While”です。
Do Untilは、条件がFalseの間だけ処理を繰り返す構文です。
Do Until 条件
' 条件が満たされるまで繰り返す
Loop
つまり、「条件が満たされたら終わる」という点ではDo Whileと反対になります。
続いて、Do Loop Whileはループの最初ではなく最後に条件をチェックする構文です。
Do
' まず1回処理を行う
Loop While 条件
そのため、少なくとも1回は必ず処理が実行されるという特徴があります。
それぞれ動作のタイミングが異なるため、「繰り返しの条件をいつ、どのようにチェックしたいのか」によって使い分けが必要です。
処理の流れを頭の中でイメージしながら構文を選ぶことが、トラブルを防ぐコツになります。
5.まとめ:Do While構文を使いこなそう
◼︎Do Whileの基本をおさらい!
Do Whileは、条件を満たしている間だけ処理を繰り返すループ構文です。
特徴は、ループの開始前に条件をチェックする点にあります。
基本の構文は次のとおりです:
Do While 条件
' 繰り返したい処理
Loop
特に繰り返し回数が決まっていない処理や、状況に応じて処理を変えたいケースに柔軟に対応できます。
「ループがいつ終わるのか」を条件でコントロールできるという点が、Do Whileの大きなポイントです。
◼︎For Nextとの違いをおさらい!
Do WhileとFor Nextはどちらも繰り返し処理に使われる構文ですが、使いどころや特徴には明確な違いがあります。
ここでは、それぞれの違いを表にまとめて整理してみましょう。
比較項目 | Do While | For Next |
処理の回数 | 条件によって変動(回数は決まっていない) | あらかじめ決まった回数だけ繰り返す |
条件の確認タイミング | 処理の前に毎回条件をチェック | 初期値・終了値・ステップ数で制御 |
終了条件の管理 | 条件式を自分で書く必要がある | 指定した回数に達すると自動で終了 |
実行の保証 | 条件次第で1回も実行されない場合がある | 指定した回数は必ず実行される |
向いている処理 | ファイル処理、データの末尾までなど | 表の行処理、定回数の繰り返しなど |
繰り返す対象や回数が決まっていない処理にはDo While、明確に「〜回繰り返す」と決まっている処理にはFor Nextが適しているということを覚えておきましょう。
◼︎Do Whileを使う時の注意点
Do Whileは柔軟で便利な構文ですが、条件の扱いを誤ると思わぬトラブルにつながることがあります。
中でも特に気をつけたいのが、無限ループと条件の書き間違いです。
ループの中で条件に変化を与える処理がなければ、条件がずっとTrueのままになり、ループが止まらなくなります。
また、Do Whileの条件はループの入り口でチェックされるため、最初から条件がFalseなら1回も処理が実行されません。
処理の目的や終了条件を明確にし、「何をもってループを終わらせたいのか」を意識することが大切です。
記事を通してご紹介してきた通り、Do Whileは条件をもとに柔軟な繰り返し処理ができる便利な構文です。
正しく使いこなせば、ファイル処理やデータ確認など、日々の作業を効率化する場面が一気に広がります。
今回は基本と使い分け、注意点を中心にご紹介しましたが、今後は似ている構文やループを途中で抜ける場合の処理なども取り上げますので、ぜひ合わせてマスターしてください!
\ Excelマクロ制作も承っています /
各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!