Excel VBA で Access テーブルを列名付きでインポートする方法

Access(.accdb)に保存されたテーブルを、列名を含めて Excel ワークシートへ一括で読み込む方法をご紹介いたします。本記事では DAO(Data Access Objects)を活用し、参照設定不要で実行できる VBA コードを提示いたします。

目次

サンプルコード

Sub ExportAccessTableWithHeaders()
    Dim daoEngine As Object          ' DAO エンジン
    Dim connDB   As Object          ' Access データベース接続
    Dim rsTable  As Object          ' レコードセット
    Dim colIndex As Long            ' フィールドループ用
    Dim dbFile   As String          ' データベース パス
    
    ' Access ファイルの場所を設定
    dbFile = ThisWorkbook.Path & "\customer_db.accdb"
    
    ' DAO エンジンの作成とデータベース接続
    Set daoEngine = CreateObject("DAO.DBEngine.120")
    Set connDB = daoEngine.OpenDatabase(dbFile)
    
    ' 目的のテーブル (tbl_customers) を開く
    Set rsTable = connDB.OpenRecordset("tbl_customers")
    
    ' 列名を 2 行目に出力(開始セル D2)
    For colIndex = 0 To rsTable.Fields.Count - 1
        Sheet1.Cells(2, colIndex + 4).Value = rsTable.Fields(colIndex).Name
    Next colIndex
    
    ' データ本体を 3 行目 (D3) から出力
    Sheet1.Range("D3").CopyFromRecordset rsTable
    
    ' 後処理
    rsTable.Close
    connDB.Close
End Sub

コードの要点

項目説明
CreateObject("DAO.DBEngine.120")DAO 12.0 を動的に呼び出すため、VBE の参照設定は不要です。
OpenDatabase(dbFile)変数 dbFile で指定したパスの .accdb を開きます。
OpenRecordset("tbl_customers")対象テーブル名を直接指定します。
列名の出力Cells(2, colIndex + 4) で、2 行目の列 D からヘッダーを書き込みます。
CopyFromRecordset取得データをワークシートへ一括で貼り付けます。

実行前のチェックリスト

  1. 64 ビット版 Office をご利用の場合
    DAO バージョンが異なる場合がございます。DBEngine.120 で動作しない場合は DBEngine.140 などに置き換えてください。
  2. テーブル名とシート名の確認
    Access 内のテーブル名および Excel のシート名は、実環境にあわせて編集してください。
  3. セル位置の調整
    サンプルでは列 D2 からヘッダーを書き込む設定です。他の列や行に変更する際は CellsRange の指定を修正してください。

応用アイデア

  • 条件付きクエリの結果を取得
    OpenRecordset に SQL 文を渡すことで、特定条件を満たすデータのみ取り込むことも可能です。
    例:Set rsTable = connDB.OpenRecordset("SELECT * FROM tbl_customers WHERE ActiveFlag = True")
  • 複数テーブルの同時取り込み
    ループでテーブル名を切り替え、別シートに順次書き込むことで、自動レポート作成が容易になります。

まとめ

DAO を利用すると、Excel VBA だけで Access データベースから列名付きデータを簡単に取得できます。列名を別途入力する手間が不要となり、迅速にデータ加工や集計を行えます。日常業務の効率化にぜひお役立てください。

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

この記事を書いた人

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

目次