PR

Access VBA逆引き集|DAOの使い方を完全理解する実践テクニックとCopilot活用術

VBA

Access VBAで開発していると、

  • テーブルのデータを取得したい
  • 更新処理を自動化したい
  • SQL実行結果を扱いたい
  • CSV取込後にチェックしたい
  • レコードを追加・更新・削除したい

という場面が必ず出てきます。

Access VBA開発においてDAO(Data Access Objects)は最重要技術の一つです。

Accessはデータベースソフトです。そのため、実務システムではデータベース操作が必須となります。

フォームやクエリだけでも開発できますが、

高速なデータ処理

柔軟な検索

自動化

バッチ処理

を実現するにはDAOの知識が欠かせません。

また最近ではCopilotを活用することで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を確実に習得することをおすすめします。フォームやクエリだけでは作れない本格的な業務システムが構築できるようになります。

Amazon.co.jp

コメント

タイトルとURLをコピーしました