【Access VBA】レコードセットを使う方法|実務で使う基本処理まとめ

Access VBAを勉強していると、DAO.Recordsetというコードが出てきます。
初心者だと、
- レコードセットって何?
- 何に使うの?
- テーブルと何が違う?
と混乱しやすい部分です。
ただ、Access VBAで実務的な開発をするなら、レコードセットはかなり重要です。
例えば、 次のような処理で頻繁に使います。
- テーブルデータを順番に処理する
- CSV出力する
- データを一括更新する
- 検索結果を処理する
この記事では、Access VBA初心者向けにレコードセットの基本をやさしく解説します。
レコードセットとは?
結論からいうと、レコードセットとは、テーブルやクエリのデータをVBAで操作するための仕組みです。
簡単にいうと、VBAからテーブルデータを1件ずつ扱える状態になります。
例えば、社員テーブルがあるとします。
| ID | 社員名 |
|---|---|
| 1 | 田中 |
| 2 | 佐藤 |
| 3 | 鈴木 |
レコードセットを使うと、 次のような処理ができます。
- 1件目を取得
- 次のデータへ移動
- 最後まで繰り返す
レコードセットの基本的な使い方
まずは基本コードを見てみましょう。
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T_社員")これがレコードセットの基本です。
1行ずつ解説
Dim rs As DAO.Recordsetでレコードセット用の変数を作成しています。
実務では、rsという名前をよく使います。
Set rs = CurrentDb.OpenRecordset("T_社員")でテーブル「T_社員」を開いています。
つまり、テーブルデータをVBAで扱える状態にしているということです。
CurrentDbとは?
CurrentDbは、現在開いているAccessファイルを表します。

OpenRecordsetとは?
OpenRecordsetは、テーブルやクエリを開くためのメソッドです。
Access VBAではかなり重要な基本です。
レコードセットをループ処理する方法
実務では、レコードを順番に処理することが非常に多いです。
そのときによく使うのが、 次のコードです。
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コードの目的
社員テーブルの全社員名を順番に表示しています。
EOFとは?
EOFは、End Of Fileの略です。
意味としては、最後のレコードに到達したかを表します。
つまり、Do Until rs.EOFは、最後まで繰り返すという意味になります。
MoveNextが超重要
rs.MoveNextで次のレコードへ移動します。
これを書かないと、同じデータを永遠に処理し続けます。
初心者がかなりハマりやすいポイントです。
レコードセットでデータを追加・更新する方法
レコードセットは、データを見るだけではありません。
追加や更新もできます。
データ追加サンプル
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T_社員")
rs.AddNew
rs!社員名 = "田中"
rs.Update
rs.Close
Set rs = Nothingコードの流れ
まず、rs.AddNewで新規レコード追加モードにします。
次に、rs!社員名 = "田中"で値をセットします。
最後に、rs.Updateで保存しています。

実務での注意点
更新系処理では、
- Null対策
- 入力チェック
- エラー処理
が非常に重要です。
特に実務では、Nz()をよく使います。

実務でよくあるミスとまとめ
初心者がよくやるミスがあります。
MoveNext忘れ
最も多いミスです。
これを書くのを忘れると無限ループになります。
Closeし忘れ
rs.Close
Set rs = Nothingを書かないと、メモリ使用量が増える原因になります。
実務では必ず最後に閉じる習慣をつけましょう。
DAO参照設定エラー
環境によっては、DAO.Recordsetでエラーになることがあります。
その場合は、 次の項目を確認してください。;
- VBEを開く
- ツール
- 参照設定
- Microsoft DAO をチェック
まとめ
レコードセットは、Access VBAでテーブルデータを操作する基本機能です。
実務では、 次のような処理で頻繁に使います。
- レコード取得
- データ更新
- CSV出力
- 一括処理
特に重要なのは、 次の3つです。
- EOF
- MoveNext
- Close
まずは小さいサンプルコードを実際に動かしながら、
- データ取得
- ループ処理
- 追加処理
を試してみてください。
ここを理解できると、Access VBAでできることがかなり増えます。
コメント