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 | 取得データをワークシートへ一括で貼り付けます。 |
実行前のチェックリスト
- 64 ビット版 Office をご利用の場合
DAO バージョンが異なる場合がございます。DBEngine.120
で動作しない場合はDBEngine.140
などに置き換えてください。 - テーブル名とシート名の確認
Access 内のテーブル名および Excel のシート名は、実環境にあわせて編集してください。 - セル位置の調整
サンプルでは列 D2 からヘッダーを書き込む設定です。他の列や行に変更する際はCells
とRange
の指定を修正してください。
応用アイデア
- 条件付きクエリの結果を取得
OpenRecordset
に SQL 文を渡すことで、特定条件を満たすデータのみ取り込むことも可能です。
例:Set rsTable = connDB.OpenRecordset("SELECT * FROM tbl_customers WHERE ActiveFlag = True")
- 複数テーブルの同時取り込み
ループでテーブル名を切り替え、別シートに順次書き込むことで、自動レポート作成が容易になります。
まとめ
DAO を利用すると、Excel VBA だけで Access データベースから列名付きデータを簡単に取得できます。列名を別途入力する手間が不要となり、迅速にデータ加工や集計を行えます。日常業務の効率化にぜひお役立てください。