導入文
Access VBAを使ったプログラムでは、
Recordset(レコードセット)を扱えるかどうかが実務レベルの分かれ道になります。
-
テーブルのデータを1件ずつ処理したい
-
クエリ結果を順番に読み込みたい
-
条件に合うレコードを更新したい
こうした処理は、すべてRecordsetを使って実現します。
本記事では、
Access VBAでRecordsetを使うための基本構文から実務でよく使うパターンまでを一覧でまとめました。
初心者の方から実務担当者まで、
困ったときにすぐ参照できる「保存版ガイド」として活用してください。
Recordsetとは何か?
Recordsetとは、
テーブルやクエリのデータをVBAから扱うためのオブジェクトです。
イメージとしては:
-
テーブルの中身を1行ずつ取り出せる
-
クエリ結果を順番に読み込める
-
フィールドの値を自由に操作できる
という「データの窓口」のような存在です。
Recordsetの基本構文(OpenRecordset)
最も基本的な書き方は次の通りです。
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(“テーブル名”)
クエリを指定する場合:
Set rs = CurrentDb.OpenRecordset(“テーブル名”, dbOpenSnapshot)
レコードを1件ずつ処理する(EOFループ)
最もよく使うのが EOF を使ったループ処理です。
Do Until rs.EOF
Debug.Print rs!商品名
rs.MoveNext
Loop
ポイント:
-
rs.EOF = 最後のレコードに到達したか
-
rs.MoveNext を忘れると無限ループになる
フィールドの値を取得する方法
rs!フィールド名
例:
Dim price As Long
price = rs!価格
Null対策:
price = Nz(rs!価格, 0)
レコードを追加する(AddNew)
rs.AddNew
rs!商品名 = “テスト商品”
rs!価格 = 1000
rs.Update
レコードを更新する(Edit)
rs.Edit
rs!価格 = 1200
rs.Update
レコードを削除する(Delete)
rs.Delete
rs.MoveNext
※削除後は MoveNext を忘れないことが重要です。
クエリをRecordsetとして扱う
保存クエリもRecordsetとして扱えます。
Set rs = CurrentDb.OpenRecordset(“qrySample”)
これにより:
-
抽出条件付きデータ
-
集計結果
を簡単に処理できます。
Recordsetでよくあるエラー
よくあるトラブル
-
型が一致しません
-
オブジェクトが見つかりません
-
EOFで止まる
-
更新できない
主な原因:
-
Null処理不足
-
フィールド名の誤記
-
読み取り専用Recordset
-
データ型不一致
👉 関連記事
Accessでよく出る「型が一致しません」エラーの正体
Recordsetを安全に使うための基本ルール
必ず守るポイント:
-
Option Explicit を使う
-
rs.Close を忘れない
-
Set rs = Nothing
-
エラー処理を入れる
例:
On Error GoTo EH
Set rs = CurrentDb.OpenRecordset(“テーブル名”)
Do Until rs.EOF
Debug.Print rs!商品名
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Exit Sub
EH:
MsgBox Err.Description
Excel連携との組み合わせ
Recordsetのデータは、Excel出力とも相性が良いです。
-
帳票作成
-
一覧表作成
-
CSV出力
👉 関連記事
Access VBAでExcelへセル指定で出力する方法|Range・Cellsの実践例
Recordsetを理解するメリット
Recordsetを理解すると:
-
テーブル操作が自由になる
-
クエリ処理を自動化できる
-
Excel連携が簡単になる
-
実務レベルのAccessアプリが作れる
という大きなメリットがあります。
参考書で体系的に学ぶのもおすすめ
Recordsetを含めてAccess VBAを体系的に学ぶには、参考書も役立ちます。
Access VBAを基礎から学びたい方は、定番の参考書も参考になります。
まとめ
Recordsetは、Access VBAの中核となる重要なオブジェクトです。
-
データ取得
-
ループ処理
-
追加・更新・削除
-
クエリ連携
といった処理は、すべてRecordsetを使って実現できます。
本記事を入口として、各関連リンクの記事を活用することで、
Access VBAのデータベース操作スキルを体系的に身につけることができます。
困ったときは本記事を「Recordsetの辞書」として参照してください。