DoCmd.TransferSpreadsheetの使い方
DoCmd.TransferSpreadsheet は、Access VBAで Access と Excel 間のデータをインポート/エクスポートするための便利なメソッドです。
目次
✅ 概要
DoCmd.TransferSpreadsheet は、Access の テーブル / クエリ と Excel ファイルの間でデータを読み書き(インポート・エクスポート)するために使用します。
✅ 基本構文
DoCmd.TransferSpreadsheet _
TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range
✅ パラメータ一覧
| パラメータ名 | 必須 | 説明 |
|---|---|---|
TransferType | ○ | 転送の種類(acExport, acImport, acLink) |
SpreadsheetType | ○ | Excelのバージョン形式(例:acSpreadsheetTypeExcel12Xml) |
TableName | ○ | テーブル名またはクエリ名(エクスポート対象 / インポート先) |
FileName | ○ | 対象Excelファイルのパス(.xlsx, .xls など) |
HasFieldNames | × | 先頭行にフィールド名を含むか (True/False) |
Range | × | Excelのセル範囲やシート名(例:"Sheet1$A1:E100") |
✅ よく使う例
▶ エクスポート:クエリをExcelファイルに出力
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
"クエリ_ユーザー一覧", "C:\Users\Public\ユーザー一覧.xlsx", True
- クエリ「クエリ_ユーザー一覧」の内容を
- Excelファイルにエクスポート(拡張子
.xlsx) - フィールド名あり(
True)
▶ インポート:Excelファイルからテーブルに読み込み
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
"ユーザー一時取込", "C:\Users\Public\インポート対象.xlsx", True
- Excelファイルからデータを読み込み
ユーザー一時取込というAccessテーブルに挿入- 1行目がフィールド名(
True)
✅ TransferType の選択肢
| 値 | 内容 |
|---|---|
acImport | Excel → Access(インポート) |
acExport | Access → Excel(エクスポート) |
acLink | Excelファイルをリンクテーブルとして接続 |
✅ SpreadsheetType(バージョン)一覧
| 値 | 内容 |
|---|---|
acSpreadsheetTypeExcel12 | Excel 2007(.xls) |
acSpreadsheetTypeExcel12Xml | Excel 2007以降(.xlsx) |
acSpreadsheetTypeExcel9 | Excel 2000 |
✅ 注意点・制限事項
- Excelファイルが開かれていると転送エラーになることがある
- エクスポート時は
クエリの方が安定(フィルターや結合に対応) - インポートは Access 側にテーブルが存在していないと自動作成される
✅ 応用例:ダイアログ付きで保存パスを選ぶ
Dim filePath As String
With Application.FileDialog(3) ' msoFileDialogSaveAs
.InitialFileName = "ユーザー一覧.xlsx"
If .Show Then filePath = .SelectedItems(1)
End With
If filePath <> "" Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "クエリ_ユーザー一覧", filePath, True
End If
