access関連 投稿

【Access VBA初心者向け】For文・Do Untilによるループ処理の書き方と業務効率化テクニック【実務例あり】

Microsoft AccessでVBA(Visual Basic for Applications)を使って開発をしていると、「同じ処理を何度も繰り返す」場面が必ず出てきます。

たとえば

  • 大量のデータを1件ずつ加工して更新する
  • 毎月の定型レポートを自動生成する
  • 条件に合致するレコードだけ処理を続ける

といった場合です。

こういった「繰り返し処理」を効率よく実現するのがループ構文です。

今回はAccess VBA初心者の方に向けて、For文Do Untilを中心に、各ループの使い方業務効率化テクニックを実例付きで解説します。

ループ処理とは?

ループ処理とは、指定した条件が満たされるまで、同じコードを繰り返し実行する仕組みです。

Access VBAでは、以下のような主要ループ構文が用意されています。

ループ構文

  • Do…Loop
  • Do Until…Loop
  • For…Next
  • While…Wend

それぞれの構文に得意分野があり、正しく使い分けることでコードが短くなり処理の見通しが良くなります。

Do While…Loop の使い方

Do While は「条件が真(True)の間だけ」処理を繰り返します。

Dim i As Integer
i = 1

Do While i <= 10
Debug.Print "現在の値: " & i ' 値を出力
i = i + 1 ' カウンタを増やす
Loop

ポイント

  • 条件判定はループの最初に行われる
  • 条件が最初からFalseの場合、1回も実行されません
  • 主に「処理を始める前から条件を満たしているか確認したい」場合に使います

実務例

商品の在庫数を順に確認し、在庫がなくなるまで処理を続ける

Do Until…Loop の使い方

Do Until は条件がTrueになるまで処理を繰り返します。

Dim j As Integer
j = 1

Do Until j > 10
Debug.Print "現在の値: " & j
j = j + 1
Loop

ポイント

  • 条件がFalseの間、処理を繰り返す
  • 条件がTrueになった時点でループ終了
  • 「終了条件」を明確に書きたい場合に向いています

実務例

注文データを上から順にチェックし、「合計金額が一定額を超えたら処理を終了する」など。

For…Next の使い方

For Next は繰り返し回数が決まっている場合に最適です。

Dim k As Integer

For k = 1 To 10
Debug.Print "現在の値: " & k
Next k

ポイント

  • 開始値から終了値まで、変数が自動で増減
  • ステップ幅(増減値)を指定可能
  • ループの回数が事前に分かっている場合はこれ一択

さらにStepを使うことで、増減値(カウントの進み方)を自由に設定できます。

Dim k As Integer

For k = 1 To 10 Step 1
Debug.Print "現在の値: " & k
Next k

この場合、kは1からスタートして、1ずつ増えていきます。
Step 1は省略可能ですが、明示すると「1ずつ増やす」という意味がより分かりやすくなります。

ポイント

  • 正の値 → 昇順処理、負の値 → 降順処理
  • 0は不可(無限ループになる)
  • 増分が大きいと中間値を飛ばすので注意
  • データの並びに合わせて増減方向を設定する

実務例

月次レポートを1月から12月まで順番に出力する。

While…Wend の使い方

While Wend は昔からあるシンプルなループ構文です。

Dim m As Integer
m = 1

While m <= 10
Debug.Print "現在の値: " & m
m = m + 1
Wend

ただし、Do Whileのほうが柔軟なため、新規開発ではあまり使われません。

業務効率化の実例:レコード一括更新

例えば「在庫数が0の商品のステータスを一括で更新する」処理は、ループを使うと自動化できます。

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM 商品マスタ")

Do Until rs.EOF
  If rs!在庫数 = 0 Then
   rs.Edit
   rs!ステータス = "在庫切れ"
   rs.Update
  End If
  rs.MoveNext
Loop

rs.Close
Set rs = Nothing

ポイント

  • EOF「レコードの最後まで到達したか」を示す
  • 条件分岐(If文)と組み合わせることで強力な自動化が可能

ループ処理の注意点

無限ループに注意
・条件を間違えると処理が終わらなくなります

Exit For / Exit Do の活用
・条件を満たしたら早めに抜けることで処理速度UP。

大量データのループは避ける
・SQLのUPDATE文で一括処理できる場合はSQLを使うほうが高速。

まとめ

ポイント

  • For文は回数が決まっている繰り返しに最適
  • Do Untilは「終了条件を明確に書きたい」場合に便利
  • Do Whileは「開始前から条件判定したい」場合に使える
  • 条件分岐やExit文を併用すると効率的な処理が可能

AccessのVBAでは、状況に応じてループ処理使い分けることで、より効率的なプログラムを書くことができます。繰り返し回数が決まっている場合は For Next を、条件に応じたループなら Do Loop や While Wend を活用しましょう。

他にもIF文の書き方やAccess Runtimeの使い方について記事にしています!下記から参照してください!

この記事が参考になったと思ったら、ぜひSNSでシェアをお願いします!
気になることやご質問があれば、コメント欄やX(旧Twitter)、InstagramのDMからお気軽にご連絡ください!
リクエストには、記事での解説や直接の返信でお応えします!

記事下広告

-access関連, 投稿