【PR】AccessやVBAの基礎をしっかり学びたい方には、
以下の入門書が分かりやすくておすすめです。
今回のような“テーブル構造”や“VBAでの自動化”を理解しやすくなります
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 が最も安定
フォームのボタンからワンクリックで実行できる
シート名を指定したり、テーブルを上書きしたりと応用も簡単
実務でも非常によく使われるテクニック
