PR

Access VBA逆引き集|QueryDefを使いこなしてSQL管理を劇的に楽にする実践テクニックとCopilot活用術

VBA

Access VBAでシステム開発を続けていると、

  • SQL文が長くなって管理できない
  • 同じSQLを何度も書いている
  • パラメータ付き検索をしたい
  • SQLの修正箇所が分散している
  • 保守性を高めたい

といった課題が発生します。

Access VBAでSQLを多用するならQueryDef(クエリ定義)を活用することで保守性と開発効率を大きく向上できます。

初心者はDAOのRecordsetやExecuteを覚えた後、次のステップとしてQueryDefを学ぶことをおすすめします。

実際の業務システムでは、

顧客検索

売上集計

設備履歴抽出

CSV取込チェック

帳票データ作成

などで頻繁に利用されています。


スポンサーリンク

QueryDefとは

QueryDefとは、

クエリ定義オブジェクト

です。

Access内に保存されているクエリをVBAから操作できます。


イメージ

Accessクエリ

↓

QueryDef

↓

VBAで利用


QueryDefのメリット

通常のSQLです。

strSQL = _

"SELECT * " & _

"FROM T_CUSTOMER " & _

"WHERE 顧客区分='A'"

QueryDefなら

Q_CUSTOMER_SEARCH

というクエリを作成し、

CurrentDb.QueryDefs("Q_CUSTOMER_SEARCH")

で利用できます。


メリット

SQL管理が楽

可読性向上

保守しやすい

再利用しやすい

Copilotでレビューしやすい


基本コード

QueryDef取得

Dim qdf As DAO.QueryDef

Set qdf = _

CurrentDb.QueryDefs( _

"Q_CUSTOMER")

逆引き① 保存クエリを実行したい

最も基本です。

CurrentDb.QueryDefs( _

"Q_UPDATE") _

.Execute

例

売上確定処理

一括更新処理


逆引き② QueryDefからRecordset取得

検索処理です。

Dim rs As DAO.Recordset

Set rs = _

CurrentDb.QueryDefs( _

"Q_CUSTOMER") _

.OpenRecordset

利用

Do Until rs.EOF

Debug.Print _

rs!顧客名

rs.MoveNext

Loop

逆引き③ パラメータクエリを実行したい

非常に実務的です。


Accessクエリ

SELECT *

FROM T_CUSTOMER

WHERE 顧客コード=[P_CODE]

VBA

Dim qdf As DAO.QueryDef

Set qdf = _

CurrentDb.QueryDefs( _

"Q_CUSTOMER")

qdf.Parameters( _

"P_CODE") = "C001"

Recordset取得

Set rs = _

qdf.OpenRecordset

逆引き④ SQLを書き換えたい

動的SQLです。

Dim qdf As DAO.QueryDef

Set qdf = _

CurrentDb.CreateQueryDef("")

SQL設定

qdf.SQL = _

"SELECT * " & _

"FROM T_CUSTOMER"

実行

Set rs = _

qdf.OpenRecordset

逆引き⑤ 更新クエリを実行したい

売上更新です。

CurrentDb.QueryDefs( _

"Q_UPDATE_SALES") _

.Execute

効果

SQLをVBAから切り離せる


実務活用例① 顧客検索システム

検索画面です。


QueryDef

SELECT *

FROM T_CUSTOMER

WHERE 顧客コード=[P_CODE]

VBA

qdf.Parameters("P_CODE") = _

Me!txtCode

メリット

検索ロジックを共通化できます。


実務活用例② 売上管理システム

売上集計です。


クエリ

月別売上集計


VBA

Set rs = _

CurrentDb.QueryDefs( _

"Q_MONTHLY_SALES") _

.OpenRecordset

集計ロジックをVBAに書かずに済みます。


実務活用例③ CSV取込システム

重複チェックです。


クエリ

Q_CHECK_DUPLICATE


VBA

Set rs = _

CurrentDb.QueryDefs( _

"Q_CHECK_DUPLICATE") _

.OpenRecordset

保守性が向上します。


実務活用例④ 設備管理システム

設備履歴検索です。


パラメータ

設備番号


QueryDef

qdf.Parameters( _

"P_MACHINE") = _

strMachine

検索仕様変更にも強くなります。


実務活用例⑤ 帳票システム

レポート出力です。


クエリ利用

請求書

納品書

見積書


効果

レポートと連携しやすくなります。


QueryDefとSQL文字列の違い

SQL文字列

strSQL = …


メリット

簡単

柔軟


デメリット

保守が難しい


QueryDef

Q_CUSTOMER


メリット

保守しやすい

再利用しやすい

設計がきれい


実務ではQueryDefが好まれます。


QueryDefとExecuteの関係

例えば

CurrentDb.Execute strSQL

の代わりに

CurrentDb.QueryDefs( _

"Q_UPDATE") _

.Execute

も可能です。


利点

SQL修正をVBA側へ持ち込まない

ことです。


ベテラン開発者の定番構成

実務では次の構成が多いです。

Q_CUSTOMER_SEARCH

Q_SALES_SUMMARY

Q_IMPORT_CHECK

Q_LOG_OUTPUT


VBAでは

CurrentDb.QueryDefs(...)

だけ呼び出します。


効果

VBA

↓

処理制御専用

SQL

↓

クエリ管理

になります。


Copilot活用術① QueryDef生成

Copilotへの依頼例です。

Accessクエリです。

顧客検索用の

パラメータクエリを

作成してください。


Copilot活用術② SQLレビュー

以下のクエリを

パフォーマンス面で

レビューしてください。


Copilot活用術③ QueryDef設計

売上管理システムです。

QueryDef構成案を

作成してください。


QueryDef利用時の注意点

名前変更

Q_CUSTOMER

を変更するとVBA側も修正が必要です。


パラメータ名

qdf.Parameters(“P_CODE”)

は一致させます。


不要クエリ整理

使わないクエリを残さないようにしましょう。


QueryDefが向いている処理

  • 顧客検索
  • 売上集計
  • CSV取込チェック
  • レポート出力
  • 帳票作成
  • 設備管理
  • 履歴検索

開発現場での利用頻度

順位用途
1位検索クエリ
2位集計クエリ
3位帳票用クエリ
4位CSV取込チェック
5位更新クエリ

中規模以上のAccessシステムでは非常によく利用されます。


まとめ

QueryDefはAccess VBAにおけるSQL管理の強力な仕組みです。

特に

  • 顧客検索
  • 売上集計
  • レポート出力
  • CSV取込
  • 設備管理

などで大きな効果を発揮します。

DAOの学習順としては、

OpenRecordset

↓

Execute

↓

Transaction

↓

QueryDef

がおすすめです。

QueryDefを習得すると、

SQL管理がきれいになる

保守しやすい

Copilotレビューしやすい

という大きなメリットがあります。

Access VBAで長期運用される業務システムを開発するなら、ぜひ活用しておきたい技術です。

Access VBA逆引き大全 600の極意 Microsoft365/Office2024/2021/2019/2016対応 | E-Trainer.jp[中村峻] |本 | 通販 | Amazon
AmazonでE-Trainer.jp[中村峻]のAccess VBA逆引き大全 600の極意 Microsoft365/Office2024/2021/2019/2016対応。アマゾンならポイント還元本が多数。E-Trainer.jp[中…

コメント

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