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ブック」を指定してください。
次にインポートするプログラムを作成します。インポート先のテーブル名は「201007経理データ」とし、ワークシートのバージョンはExcel2003とします。また、ワークシートの先頭行をテーブルの項目名とするため、hasfieldnameパラメータをTrueと指定します。
Function Excel_import() DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ "201007経理データ", "C:\test\経理データ.xls", True End Function
デバッグウィンドウでExcel_importを実行すると、テーブル「2010経理データ」が作られます。
インポートして作られたテーブル
インポートされたデータ
◆Excel 2007のデータをインポートするには
xlsx形式で保存されたデータをインポートするには、acSpreadsheetTypeExcel12を使用しないで、単に定数10を使用します。
Docmd.TransferSpreadsheet,acImport,10,tablename,filename |
バイナリー形式(拡張子 xlsb)で保存されたデータをインポートするには、定数9を使用します。
Docmd.TransferSpreadsheet,acImport,9,tablename,filename |