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
 
	
 
		 
			