Excel VBA で Access パラメータクエリを列名付きで取り込む方法

Access のパラメータクエリを用いると、条件に応じたデータだけを抽出して Excel へ出力できます。本記事では DAO(Data Access Objects)の QueryDef を使用し、参照設定なしで動作する VBA コードをご紹介いたします。

目次

サンプルコード

Sub ImportParamQueryWithHeaders()
    Dim daoObj     As Object          ' DAO エンジン
    Dim accDB      As Object          ' Access DB 接続
    Dim qdParam    As Object          ' QueryDef オブジェクト
    Dim rsResult   As Object          ' レコードセット
    Dim colIdx     As Long            ' ヘッダー用ループ
    Dim dbFullPath As String          ' データベース パス
    
    ' Access ファイルの場所を設定
    dbFullPath = ThisWorkbook.Path & "\staff_records.accdb"
    
    ' DAO エンジン生成とデータベース接続
    Set daoObj = CreateObject("DAO.DBEngine.120")
    Set accDB  = daoObj.OpenDatabase(dbFullPath)
    
    ' パラメータクエリ (qry_staff_invoice) を取得
    Set qdParam = accDB.QueryDefs("qry_staff_invoice")
    
    ' パラメータを設定
    qdParam.Parameters("PleaseEnterStaffName") = "Rintaro Mori"
    
    ' クエリ結果をレコードセットに格納
    Set rsResult = qdParam.OpenRecordset
    
    ' 列名を 1 行目・列 H から書き込み
    For colIdx = 0 To rsResult.Fields.Count - 1
        Sheet1.Cells(1, colIdx + 8).Value = rsResult.Fields(colIdx).Name
    Next colIdx
    
    ' データ本体を 2 行目・列 H から書き込み
    Sheet1.Range("H2").CopyFromRecordset rsResult
    
    ' 後始末
    rsResult.Close
    qdParam.Close
    accDB.Close
End Sub

コードのポイント

  • DAO を動的生成
    CreateObject("DAO.DBEngine.120") により、VBE の参照設定なしで DAO 12.0 を利用できます。
  • QueryDef の取得とパラメータ設定
    QueryDefs("qry_staff_invoice") でクエリを呼び出し、Parameters("PleaseEnterStaffName") に値を渡します。
  • 列名の出力
    Cells(1, 8)(列 H1)からフィールド名を書き込むことで、ヘッダー行を自動生成しています。
  • 結果の貼り付け
    CopyFromRecordset を使用することで、データを一括で貼り付けられます。

カスタマイズ例

用途修正箇所
別のパラメータ名を使用するParameters("…") を該当名に変更
複数パラメータを渡すパラメータ行を追加し、順に値を設定
貼り付け開始セルを変更CellsRange の列・行番号を編集
DAO バージョンを切り替え64 ビット Office 等で動作しない場合は DBEngine.140 などへ変更

まとめ

パラメータクエリと DAO を組み合わせることで、Excel から柔軟に Access データを抽出できます。列名付き出力により、後続の集計や分析もスムーズに行えます。定期レポートやダッシュボードの自動更新にぜひご活用ください。

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

この記事を書いた人

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

目次