AccessVBA:【DoCmd】【TransferSpreadsheetメソッド】Excelの取込み(インポート)と出力(エクスポート)


  • AccessのデータをExcelに出力したい
  • 他の会社とのやり取りでデータをExcelに出力したい
Accessのツールを作る際の要望で、Excelに出力したいということはよくあります。
ここでは「TransferSpreadsheet」メソッドを使ったExcelの入力(インポート)と出力(エクスポート)の方法について説明していきます。

◆「TransferSpreadsheet」メソッドについて

まず「TransferSpreadsheet」メソッドの構文は以下のようになります。

パラメーターの説明

名称 説明
TransferType acImport(インポート)やacExport(エクスポート)など
SpreadsheetType 「acSpreadsheetTypeExcel12Xml」(Microsoft Excel 2010/2013/2016 XML 形式 (.xlsx、.xlsm、.xlsb))など
TableName 「T_一覧情報」など出力したいテーブルorクエリ
FileName 「C:\Users\一覧情報.xlsx」など出力先のフォルダのパスとファイル名
HasFieldNames True(1)かFalse(0)。Trueだとインポート時に1行目をフィールド行として扱う。エクスポートの場合は、引数に関係なく、ワークシートの最初の行にフィールド名が挿入される。
Range ワークシートのインポート範囲を指定できる。エクスポートの場合は「シート名」の次に範囲を入力するとエクスポートは失敗する。
UseOA 不要
参照:マイクロソフトの公式ページ



◆Excelインポートのサンプルコード

「TransferType」に「acImport」を使います。
5行目のように「”出力結果!B2:E”」としてセル範囲の設定もできるので、インポートの際に1行目にフィールド名がなくても取り込むことは可能です。
最終列のE列に行数を指定していませんが、この場合は空欄のあるところまでデータとして持ってきます。指定すれば指定した行までインポートされます。空欄がある列の場合は最終行を取得するようにしてください。

◆Excelエクスポートのサンプルコード

「TransferType」に「acExport」を使います。
インポートの時と違って、フィールドの有無は無効で、シート名の次にセル範囲を書くとエラーになります。そのため1行目にフィールド名の入ったシートが出力されます。

出力に際しては、「Range」でシートの位置を設定できません。
Excelのテンプレートに出力したい場合は、以下の記事の方法で可能です。

AccessVBA:【出力】1行目にヘッダーのないExcelテンプレートへの出力方法

AccessでExcelのテンプレートへの出力方法について


おすすめ