Excel のデータを Access のフォームから簡単に取り込みたい——
そんな場面は実務でもよくあります。
・伝票データを Excel で管理している
・Access に集計処理をさせたい
・毎回手作業でインポートするのが面倒
・できれば「ボタン1つ」で取り込みたい
この記事では、Access フォームから Excel を取り込む方法を完全解説します。
-
ボタンひとつで Excel 取り込み
-
特定シートを指定してインポート
-
取り込み先テーブルを自動で上書き
-
エラー対策付き
すべて コピペで動く VBA にしています。
Access から Excel を取り込む基本方法
Access で Excel を取り込む場合、最も安定する方法は
DoCmd.TransferSpreadsheet を使う方法です。
DoCmd.TransferSpreadsheet TransferType:=acImport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:=”T_Import”, _
FileName:=”C:\data\sample.xlsx”, _
HasFieldNames:=True
TransferSpreadsheet の各引数の意味
| 引数 | 内容 |
|---|---|
| TransferType | acImport(取込)/acExport(出力) |
| SpreadsheetType | Excel形式(通常 acSpreadsheetTypeExcel12Xml) |
| TableName | Access の取り込み先テーブル名 |
| FileName | Excelファイルのフルパス |
| HasFieldNames | 先頭行をフィールド名にするか |
フォームのボタンからExcel取り込みを実行する
Access フォームにボタンを1つ配置し、
ボタンを押すと Excel を取り込む仕組みを作ります。
フォームの作成手順
-
Access のフォームをデザインビューで開く
-
ボタンを1つ配置
-
ボタンを右クリック →[イベントのビルド]
-
「コードビルダー」を選択
すると次のコード枠ができます。
Private Sub コマンド0_Click()
End Sub
Excel ファイルを取り込むコード(コピペ可)
Private Sub コマンド0_Click()
Dim fPath As String
‘ Excelファイルのパス
fPath = “C:\data\import.xlsx”
‘ ファイル存在チェック(必須)
If Dir(fPath) = “” Then
MsgBox “Excelファイルが見つかりません。” & vbCrLf & fPath
Exit Sub
End If
‘ 取り込み実行
DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:=”T_Import”, _
FileName:=fPath, _
HasFieldNames:=True
MsgBox “Excel取り込みが完了しました。”
End Sub
特定のシート名を指定して取り込む
Excel に複数のシートがある場合は、
Range 引数に “シート名$” を指定します。
DoCmd.TransferSpreadsheet _
acImport, acSpreadsheetTypeExcel12Xml, _
“T_Import”, fPath, True, “商品一覧$”
Excel 取り込み前にテーブルを空にする(上書き用)
毎回完全に入れ替えたい場合は、先にテーブルを削除します。
CurrentDb.Execute “DELETE FROM T_Import”, dbFailOnError
ファイル選択ダイアログを使って取り込む
決め打ちパスではなく、
ユーザーが Excel を選べるようにするコードです。
Private Sub コマンド0_Click()
Dim fPath As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = “取り込むExcelファイルを選択”
.Filters.Clear
.Filters.Add “Excel Files”, “*.xlsx;*.xlsm”
If .Show = -1 Then
fPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
‘ 取り込み実行
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, _
“T_Import”, fPath, True
MsgBox “取り込みが完了しました。”
End Sub
<
よくあるエラーと対策
Excel が開いていて取り込めない
→ Excel を閉じるか、ReadOnly で開かれていないか確認。
日付が文字列として取り込まれる
→ Access 側のフィールド型を「日付/時刻」にしておく。
→ Excel 上の書式も「日付」に整えておく。
取り込み先テーブルの項目名が一致しない
→ Excel の1行目の見出しと完全一致させる。
補足リンク(関連記事)
まとめ
-
取り込みは TransferSpreadsheet が最も安定
-
フォームのボタンからワンクリックで実行できる
-
シート名を指定したり、テーブルを上書きしたりと応用も簡単
-
実務でも非常によく使われるテクニック