Access VBAで開発していると、
- テーブルのデータを取得したい
- 更新処理を自動化したい
- SQL実行結果を扱いたい
- CSV取込後にチェックしたい
- レコードを追加・更新・削除したい
という場面が必ず出てきます。
Access VBA開発においてDAO(Data Access Objects)は最重要技術の一つです。
Accessはデータベースソフトです。そのため、実務システムではデータベース操作が必須となります。
フォームやクエリだけでも開発できますが、
高速なデータ処理
柔軟な検索
自動化
バッチ処理
を実現するにはDAOの知識が欠かせません。
また最近ではCopilotを活用することでDAOコードの作成やレビューも効率化できます。
- DAOとは
- DAOでできること
- DAOの基本構成
- DAOを使う準備
- 逆引き① テーブルデータを取得したい
- 逆引き② SQLで検索したい
- 逆引き③ レコード件数を取得したい
- 逆引き④ データを追加したい
- 逆引き⑤ データを更新したい
- 逆引き⑥ データを削除したい
- 逆引き⑦ SQLを実行したい
- DAOの定番パターン
- 実務活用例① CSV取込システム
- 実務活用例② 顧客管理システム
- 実務活用例③ 設備管理システム
- 実務活用例④ ログ出力
- 実務活用例⑤ バッチ処理
- DAOとDLookupの違い
- DAOとExecuteの使い分け
- エラー処理を追加する
- ベテラン開発者の定番コード
- Copilot活用術① DAOコード生成
- Copilot活用術② SQLレビュー
- Copilot活用術③ エラー処理追加
- DAO利用時の注意点
- DAOが向いている処理
- 開発現場での利用頻度
- まとめ
DAOとは
DAOとは、
Data Access Objects
の略です。
Accessデータベースへアクセスするためのオブジェクト群です。
DAOでできること
主な機能です。
テーブル読込
データ検索
データ追加
データ更新
データ削除
SQL実行
レコード件数取得
DAOの基本構成
よく利用するオブジェクトです。
Database
Recordset
Database
データベース本体
CurrentDb
Recordset
検索結果
DAO.Recordset
DAOを使う準備
基本形です。
Dim db As DAO.Database
Set db = CurrentDb
レコードセット
Dim rs As DAO.Recordset
これがDAOの基本になります。
逆引き① テーブルデータを取得したい
最も基本的なDAOです。
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("T_CUSTOMER")
データ読込
Do Until rs.EOF
Debug.Print rs!顧客コード
rs.MoveNext
Loop
結果
顧客一覧取得
ができます。
逆引き② SQLで検索したい
実務で最も利用します。
Set rs = CurrentDb.OpenRecordset( "SELECT * " & "FROM T_CUSTOMER")
条件付き
Set rs = CurrentDb.OpenRecordset( "SELECT * " & "FROM T_CUSTOMER " & _
"WHERE 顧客コード='C001'")
逆引き③ レコード件数を取得したい
件数確認です。
Set rs = CurrentDb.OpenRecordset( "T_CUSTOMER")
rs.MoveLast
MsgBox rs.RecordCount
結果
登録件数表示
できます。
逆引き④ データを追加したい
DAO追加処理です。
Set rs = CurrentDb.OpenRecordset("T_CUSTOMER")
追加
rs.AddNew
rs!顧客コード = "C001"
rs!顧客名 = "東京商事"
rs.Update
効果
新規登録できます。
逆引き⑤ データを更新したい
更新処理です。
rs.Edit
rs!顧客名 = "大阪商事"
rs.Update
効果
データ更新できます。
逆引き⑥ データを削除したい
削除処理です。
rs.Delete
注意
実行後は元に戻せません。
逆引き⑦ SQLを実行したい
更新系SQLです。
CurrentDb.Execute "UPDATE T_CUSTOMER " & "SET 顧客名='東京商事'"
メリット
高速です。
実務ではこちらをよく利用します。
DAOの定番パターン
ベテラン開発者がよく使う形です。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
最後に
rs.Close
Set rs = Nothing
Set db = Nothing
で解放します。
実務活用例① CSV取込システム
CSVを取込後、
重複確認
マスタ確認
エラーチェック
を行います。
DAO検索
strSQL = "SELECT * FROM " & "T_CUSTOMER"
効果
取込品質向上
実務活用例② 顧客管理システム
顧客検索です。
Set rs = CurrentDb.OpenRecordset(strSQL)
活用
顧客一覧
検索結果
詳細表示
などです。
実務活用例③ 設備管理システム
設備履歴確認です。
Set rs = CurrentDb.OpenRecordset(strSQL)
効果
履歴管理できます。
実務活用例④ ログ出力
処理履歴保存です。
rs.AddNew
rs!実行日時 = Now()
rs.Update
効果
運用保守で便利です。
実務活用例⑤ バッチ処理
夜間処理です。
対象抽出
↓
更新
↓
履歴保存
をDAOで制御します。
DAOとDLookupの違い
初心者が迷うポイントです。
DLookup
DLookup(…)
特徴
簡単
1項目取得向け
DAO
Recordset
特徴
高速
大量データ向け
実務向け
使い分け
1項目だけ
↓
DLookup
複数件処理
↓
DAO
がおすすめです。
DAOとExecuteの使い分け
DAO
OpenRecordset
用途
検索
表示
確認
Execute
CurrentDb.Execute
用途
更新
追加
削除
大量更新ではExecuteが高速です。
エラー処理を追加する
実務では必須です。
On Error GoTo ErrHandler
'処理
ExitProc:
Exit Sub
ErrHandler:
MsgBox _
Err.Number & vbCrLf & _
Err.Description
Resume ExitProc
ベテラン開発者の定番コード
検索処理です。
Set rs = CurrentDb.OpenRecordset(strSQL)
If rs.EOF Then
MsgBox "該当なし"
Else
Debug.Print rs!顧客名
End If
とてもよく利用します。
Copilot活用術① DAOコード生成
Copilotへの依頼例です。
Access VBAです。
DAOを利用して
顧客テーブルから
データ取得するコードを
作成してください。
Copilot活用術② SQLレビュー
DAOで利用するSQLです。
改善点を教えてください。
Copilot活用術③ エラー処理追加
DAOコードです。
エラーハンドリングを
追加してください。
DAO利用時の注意点
Closeを忘れない
終了時は必ず
rs.Close
します。
Null対策
DAOではよく発生します。
Nz(rs!顧客名, "")
を活用しましょう。
大量ループに注意
必要に応じて
DoEvents
を利用します。
DAOが向いている処理
特に活躍するのは次のようなシステムです。
- 顧客管理システム
- CSV取込システム
- 設備管理システム
- 売上管理システム
- ログ管理システム
- 夜間バッチ処理
開発現場での利用頻度
| 順位 | 用途 |
|---|---|
| 1位 | データ検索 |
| 2位 | CSV取込チェック |
| 3位 | データ更新 |
| 4位 | ログ管理 |
| 5位 | バッチ処理 |
Access開発では毎日のように利用します。
まとめ
DAOはAccess VBA開発における最重要技術の一つです。
特に
- データ検索
- データ追加
- データ更新
- データ削除
- CSV取込
- バッチ処理
などで活躍します。
またCopilotを活用することで、
- DAOコード生成
- SQLレビュー
- エラー処理追加
- パフォーマンス改善
も効率的に進められます。
Access VBA開発者としてステップアップしたいのであれば、まずDAOを確実に習得することをおすすめします。フォームやクエリだけでは作れない本格的な業務システムが構築できるようになります。

コメント