Excel VBA で Access クエリ結果を列名付きで取込む方法

Access のクエリ(例:qry_invoice_list)を Excel に自動転送したい場合、DAO(Data Access Objects)を用いるとシンプルに実装できます。本記事では「列名も含めて貼り付ける」処理に焦点を当て、参照設定不要で動作するコードをご紹介いたします。

目次

サンプルコード

Sub ImportQueryWithHeaders()
    Dim daoEngine  As Object          ' DAO エンジン
    Dim dbConnect  As Object          ' Access DB 接続
    Dim rsQuery    As Object          ' クエリ結果
    Dim headerCol  As Long            ' ヘッダー用ループ変数
    Dim accdbPath  As String          ' データベース パス
    
    ' Access ファイルのフルパスを設定
    accdbPath = ThisWorkbook.Path & "\sales_report.accdb"
    
    ' DAO エンジン生成とデータベース接続
    Set daoEngine = CreateObject("DAO.DBEngine.120")
    Set dbConnect = daoEngine.OpenDatabase(accdbPath)
    
    ' クエリ(qry_invoice_list)をレコードセットとして取得
    Set rsQuery = dbConnect.OpenRecordset("qry_invoice_list")
    
    ' 列名を書き込む(開始セル F1)
    For headerCol = 0 To rsQuery.Fields.Count - 1
        Sheet1.Cells(1, headerCol + 6).Value = rsQuery.Fields(headerCol).Name
    Next headerCol
    
    ' データを書き込む(F2 以降)
    Sheet1.Range("F2").CopyFromRecordset rsQuery
    
    ' 後始末
    rsQuery.Close
    dbConnect.Close
End Sub

コード解説

項目説明
CreateObject("DAO.DBEngine.120")DAO 12.0 を動的に呼び出しますので、参照設定は不要です。
OpenDatabase(accdbPath)変数 accdbPath に格納した .accdb を開きます。
OpenRecordset("qry_invoice_list")Access 側で作成済みのクエリ名を指定します。
ヘッダーの出力Cells(1, 6)(セル F1)からフィールド名を書き込みます。
データの出力CopyFromRecordset により、セル F2 から一括貼り付けします。

カスタマイズのポイント

  1. クエリ名の変更
    Access で使用しているクエリ名に合わせて qry_invoice_list を変更してください。
  2. 貼り付け先セルの調整
    列や行を変更する場合は CellsRange の位置を編集します。
  3. 64 ビット Office での DAO バージョン
    DAO.DBEngine.120 が動かない場合は DBEngine.140 などに置き換えてお試しください。

応用例

  • パラメータ付きクエリの取り込み
    SQL 文を直接指定して、期間や担当者で絞り込んだ結果を読み込むことも可能です。
    例: vbaコピーする編集するSet rsQuery = dbConnect.OpenRecordset( _ "SELECT * FROM qry_invoice_list WHERE SaleDate >= Date() - 30")
  • 複数シートへの自動出力
    シートを動的に追加し、月別・担当者別などに分けてデータを貼り付けることで、自動レポート作成が効率化されます。

まとめ

Excel VBA と DAO を組み合わせることで、Access クエリの結果を列名付きで簡単に取り込むことができます。定期レポートやダッシュボード作成の自動化に活用していただければ、作業時間を大幅に短縮できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次