Microsoft Access VBA - Excelデータをインポートまたはエクスポートする方法

◆Docmd.TransferSpreadsheetメソッド
 Docmd.TransferSpreadsheetを利用すると、ExcelやLotus1-2-3など表計算ソフトのデータをインポートしたり、エクスポートしたりすることができます。
 表計算ソフトのデータを読み書きするTransferSpreadsheetメソッドの構文は次の通りです。

Docmd.TransferSpreadsheet [transfertype],[spreadsheettype],
tablename,filename [,hasfieldnames][,range]

各パラメータは次の通りです。

パラメータ 指定内容
transfertype 処理の内容を次の組込定数で指定する
acImport インポート(既定値)
acExport エクスポート
acLink リンク読み込み
spreadsheettype インポート/エクスポート対象となる表計算ソフトのバージョン(ファイル形式)を、次の組込定数で指定する。
acSpreadsheetTypeExcel3 Microsoft Excel Ver.3
acSpreadsheetTypeExcel4 Microsoft Excel Ver.4
acSpreadsheetTypeExcel5 Microsoft Excel Ver.7(Excel95)
acSpreadsheetType8 Microsoft Excel97
acSpreadsheetType9 Microsoft Excel2000〜2003
acSpreadSheetTypeLotusWK1M Lotus 1-2-3 Windows R1-R〜R1.1J
acSpreadsheetTypeLotusWK3 Lotus 1-2-3 WIndows R1〜R1.1J/for DOS R3
acSpreadsheetTypeLotusWK4 Lotus 1-2-3 R4J/5J
acSpreadsheetTypeLotusWJ2 Lotus 1-2-3 R2.1〜2.3J
tablename インポート先/エクストート元のテーブル名を、ダブルクォーテーションで囲んで指定する。なお、エクスポートする場合の元データは選択クエリーも利用できる。
filename インポート元/エクストート先のワークシートのファイル名を、パス名も含めてダブルクォーテーションで囲んで指定する。
hasfieldnames ワークシートの先頭行を項目名としてインポートする場合はTrueを指定する。ワークシートの先頭行もデータとするなら省略する。
エクスポートの場合はテーブル項目名がワークシートの先頭行に必ず出力されるので、何を指定しても同じ結果になる。
range ワークシートの一部分だけをインポートしたい場合、セル範囲または範囲名を指定する。エクストートする場合は何も指定してはいけない。

◆インポート Sample Program
 ここでは、インポートするデータの例として次のようなエクセルファイルを準備して、Cドライブのtestフォルダに「経理データ.xls」の名前で格納してください。なお、Excel 2007を使用している場合は、保存するときにファイルの種類に「Excel 97-2003ブック」を指定してください。

Excel Sample

次にインポートするプログラムを作成します。インポート先のテーブル名は「201007経理データ」とし、ワークシートのバージョンはExcel2003とします。また、ワークシートの先頭行をテーブルの項目名とするため、hasfieldnameパラメータをTrueと指定します。

Function Excel_import()
        DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _
        "201007経理データ", "C:\test\経理データ.xls", True
End Function

 デバッグウィンドウでExcel_importを実行すると、テーブル「2010経理データ」が作られます。

Access import Table
インポートして作られたテーブル

import Table
インポートされたデータ

◆Excel 2007のデータをインポートするには
 xlsx形式で保存されたデータをインポートするには、acSpreadsheetTypeExcel12を使用しないで、単に定数10を使用します。

Docmd.TransferSpreadsheet,acImport,10,tablename,filename

バイナリー形式(拡張子 xlsb)で保存されたデータをインポートするには、定数9を使用します。

Docmd.TransferSpreadsheet,acImport,9,tablename,filename

▼ページトップに戻る