【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でできることがかなり増えます。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次