
Microsoft AccessでVBA(Visual Basic for Applications)を使って開発をしていると、「同じ処理を何度も繰り返す」場面が必ず出てきます。
たとえば
- 大量のデータを1件ずつ加工して更新する
- 毎月の定型レポートを自動生成する
- 条件に合致するレコードだけ処理を続ける
といった場合です。
こういった「繰り返し処理」を効率よく実現するのがループ構文です。
今回はAccess VBA初心者の方に向けて、For文やDo Untilを中心に、各ループの使い方と業務効率化テクニックを実例付きで解説します。
目次
ループ処理とは?
ループ処理とは、指定した条件が満たされるまで、同じコードを繰り返し実行する仕組みです。
Access VBAでは、以下のような主要ループ構文が用意されています。
それぞれの構文に得意分野があり、正しく使い分けることでコードが短くなり、処理の見通しが良くなります。
Do While…Loop の使い方
Do While は「条件が真(True)の間だけ」処理を繰り返します。
Dim i As Integer
i = 1
Do While i <= 10
Debug.Print "現在の値: " & i ' 値を出力
i = i + 1 ' カウンタを増やす
Loop
Do Until…Loop の使い方
Do Until は条件がTrueになるまで処理を繰り返します。
Dim j As Integer
j = 1
Do Until j > 10
Debug.Print "現在の値: " & j
j = j + 1
Loop
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ずつ増やす」という意味がより分かりやすくなります。
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
ループ処理の注意点
無限ループに注意
・条件を間違えると処理が終わらなくなります。
Exit For / Exit Do の活用
・条件を満たしたら早めに抜けることで処理速度UP。
大量データのループは避ける
・SQLのUPDATE文で一括処理できる場合はSQLを使うほうが高速。
まとめ
AccessのVBAでは、状況に応じてループ処理を使い分けることで、より効率的なプログラムを書くことができます。繰り返し回数が決まっている場合は For Next を、条件に応じたループなら Do Loop や While Wend を活用しましょう。
他にもIF文の書き方やAccess Runtimeの使い方について記事にしています!下記から参照してください!
この記事が参考になったと思ったら、ぜひSNSでシェアをお願いします!
気になることやご質問があれば、コメント欄やX(旧Twitter)、InstagramのDMからお気軽にご連絡ください!
リクエストには、記事での解説や直接の返信でお応えします!