【Access VBA】OpenQuery完全入門|クエリの使い方と注意点

Access VBAで処理を自動化していると、DoCmd.OpenQueryというコードをよく見かけます。
ただ、初心者だと、
- OpenQueryって何?
- RunSQLと何が違うの?
- どんな場面で使うの?
と迷いやすい部分です。
OpenQueryは、保存済みクエリをVBAから実行する命令です。
この記事ではAccess VBAのOpenQueryの基本から、実務での注意点まで初心者向けにわかりやすく解説します。
Access VBA OpenQueryとは
OpenQueryとは、保存済みクエリをVBAから実行する命令です。
正式には、DoCmd.OpenQueryという形で使用します。
たとえば、Accessで作成済みの、
- 更新クエリ
- 追加クエリ
- 削除クエリ
- 選択クエリ
などをボタン1つで実行できます。
Access画面で手動実行しているクエリを、VBAから自動実行するイメージです。

OpenQueryの基本構文
基本構文はこちらです。
DoCmd.OpenQuery "クエリ名"ダブルクォーテーション内へ、実行したいクエリ名を書きます。
基本例
DoCmd.OpenQuery "Q_社員更新"「Q_社員更新」という保存済みクエリを実行しています。
コード解説
DoCmd.OpenQueryクエリを実行する命令です。
"Q_社員更新"実行対象のクエリ名を指定しています。
クエリ名を間違えるとエラーになるため注意しましょう。
選択クエリでも使える
DoCmd.OpenQuery "Q_売上一覧"選択クエリの場合は、結果画面が表示されます。
データ確認画面として利用されることも多いです。
OpenQueryの実践サンプル
ここでは、フォームのボタンから更新クエリを実行する例を見てみましょう。
Private Sub btn更新_Click()
DoCmd.OpenQuery "Q_社員更新"
MsgBox "更新完了"
End Subコード全体の目的
更新ボタンを押したときに、保存済み更新クエリを実行する処理です。
OpenQueryを使うメリット
OpenQueryのメリットは、SQLをクエリとして分離できることです。
たとえば、複雑なSQLをVBAへ直接書くとコードが読みにくくなります。
一方、保存済みクエリにしておけば、
- SQL修正しやすい
- 保守しやすい
- VBAがシンプルになる
というメリットがあるため、実務ではかなり重要な考え方です。

OpenQueryでよくあるエラーと注意点
クエリ名の間違い
初心者が最も多く遭遇するのが、クエリ名の指定ミスです。
DoCmd.OpenQuery "Q_社員更新"名前が違うと、
- 実行時エラー
- クエリが見つからない
などが発生します。
実務では、次のように接頭辞を付けるケースが多いです。
- Q_ → クエリ
- F_ → フォーム
- T_ → テーブル
更新クエリの実行に注意
更新系クエリでは、データが直接変更されます。
特に、削除クエリや更新クエリでは条件ミスに注意が必要です。
実務では、必ずテストデータで確認してから本番実行しましょう。

確認メッセージが表示される
更新クエリを実行すると、
- ○件更新します
- ○件削除します
といった警告メッセージが表示されます。
これを非表示にする場合は、
DoCmd.SetWarnings Falseを使用します。
エラー処理も重要
実務では、
クエリ実行エラーへの対応も重要です。
Private Sub btn実行_Click()
On Error GoTo ErrHandler
DoCmd.OpenQuery "Q_社員更新"
MsgBox "更新完了"
Exit Sub
ErrHandler:
MsgBox "クエリ実行中にエラーが発生しました"
End Subエラー処理を書くことで、トラブル発生時の原因調査もしやすくなります。

実務での活用ポイント
OpenQueryは、実務で非常によく使われる命令です。
特に、次のような処理で頻繁に使われます。
- 月次更新処理
- 売上集計更新
- 在庫更新
- 不要データ削除
- 一覧データ表示
また、複雑なSQLを保存済みクエリへ分離できるため保守性が高くなるのも大きなメリットです。
実務では、「SQLはクエリへ書く」「VBAは実行だけ行う」という構成も非常によく使われます。
まとめ
Access VBAのOpenQueryは、保存済みクエリをVBAから実行する命令です。
SQLをクエリへ分離できるため、保守しやすいシステムを作りやすくなります。
まずは簡単な更新クエリを作って、ボタンから実行する処理を試してみましょう。
コメント