【Access VBA】Do WhileとDo Untilの違いと使い方

Access VBAを勉強していると、Do WhileDo Untilという繰り返し処理が出てきます。
ただ初心者だと、
- 何が違うの?
- どっちを使えばいい?
- For文とどう違う?
と混乱しやすいポイントです。
特にAccessでは、次のようなループ処理を頻繁に使います。
- テーブル処理
- レコード操作
- CSV出力
- データ更新
この記事では、Do WhileとDo Untilの違いを、初心者向けにやさしく解説します。
実務でよく使うレコード処理や、無限ループ対策まで紹介するので、Access VBAを学び始めた人はぜひ参考にしてください。

Do WhileとDo Untilとは?
結論からいうと、どちらも「繰り返し処理」です。
つまり、同じ処理を何回も実行するための構文です。
ただし、条件の考え方が少し違います。
Do Whileの意味
Do Whileは、条件がTrueの間、繰り返すという意味です。
Do Untilの意味
一方、Do Untilは、条件がTrueになるまで、繰り返すという意味になります。
Do WhileとDo Untilの基本構文
まずは基本構文から見ていきましょう。
Do Whileの基本構文
Do While 条件
繰り返したい処理
LoopDo Whileのサンプルコード
Dim i As Integer
i = 1
Do While i <= 5
Debug.Print i
i = i + 1
Loop
コードの目的
1〜5までを順番に表示する処理です。
実行結果
1
2
3
4
51行ずつ解説
Dim i As Integerで繰り返し回数を管理する変数を作成しています。
次に、i = 1で開始値を設定しています。
Do While i <= 5で「iが5以下の間」処理を続けます。
最後に、i = i + 1で値を増やしています。
これが非常に重要です。
この処理を書かないと条件が変化せず、無限ループになります。
Do Untilの基本構文
Do Until 条件
繰り返したい処理
LoopDo Untilのサンプルコード
Dim i As Integer
i = 1
Do Until i > 5
Debug.Print i
i = i + 1
LoopDo Whileとの違い
Do Whileは、
Do While i >;= 5つまり、5以下の間続けるという意味です。
一方Do Untilは、
Do Until i > 5つまり、5より大きくなるまで続けるという意味になります。
結果は同じになることが多いですが、考え方が逆になります。
Access実務でよく使うレコード処理
Access VBAでは、レコードを順番に処理する場面が非常によくあります。
例えば、次のような例です。
- CSV出力
- データ更新
- 集計処理
- データチェック
実務では特に、Do Until rs.EOFをよく使います。
実務サンプルコード
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T_社員")
Do Until rs.EOF
Debug.Print rs!社員名
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
コードの目的
テーブル「T_社員」の全社員名を順番に処理しています。
EOFとは?
EOFは、最後のレコードに到達したかを表します。
つまり、Do Until rs.EOFは、最後まで繰り返すという意味になります。
MoveNextが重要
rs.MoveNextで次のレコードへ移動します。
これを書かないと、同じレコードを永遠に処理し続けます。
初心者がかなりハマりやすいポイントです。
無限ループになる原因と対策
VBA初心者が最もやりやすいミスが、無限ループです。
NGコード
Dim i As Integer
i = 1
Do While i <= 5
Debug.Print i
Loopなぜ無限ループになる?
このコードには、i = i + 1がありません。
つまりiがずっと1のままなので、i <= 5が永遠にTrueになります。
実務での確認ポイント
ループを書くときは、条件を変化させるコードがあるかを必ず確認しましょう。
Exit Doで途中終了する方法
途中でループを終了したい場合は、Exit Doを使います。
サンプルコード
Dim i As Integer
i = 1
Do While True
If i > 5 Then
Exit Do
End If
Debug.Print i
i = i + 1
Loop実務での使い分けとまとめ
実務では、次の感覚で使い分けるとわかりやすいです。
Do Whileが向いている場面
- ログイン中
- 接続中
- ファイル存在中
Do Untilが向いている場面
- EOFまで
- 指定値になるまで
- 空欄が出るまで
Access VBAでは、Do Until rs.EOFを非常によく使います。
初心者のうちは、
- Do While = 条件中続ける
- Do Until = 条件成立まで続ける
と覚えておけば十分です。
Do WhileとDo Untilは、どちらもAccess VBAで頻繁に使う基本構文です。
特に重要なのは、条件を変化させるコードを書くことです。
ここを忘れると無限ループになります。
まずは小さいサンプルコードを実際に動かしながら、
- i = i + 1
- MoveNext
- EOF
の動きを確認してみてください。理解がかなり深まります。
コメント