access PR

Access VBA|Excelの列を選択してインポートできるフォームの作り方

記事内に商品プロモーションを含む場合があります

【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 の各引数の意味

引数内容
TransferTypeacImport(取込)/acExport(出力)
SpreadsheetTypeExcel形式(通常 acSpreadsheetTypeExcel12Xml)
TableNameAccess の取り込み先テーブル名
FileNameExcelファイルのフルパス
HasFieldNames先頭行をフィールド名にするか

フォームのボタンからExcel取り込みを実行する

Access フォームにボタンを1つ配置し、
ボタンを押すと Excel を取り込む仕組みを作ります。

フォームの作成手順

  1. Access のフォームをデザインビューで開く

  2. ボタンを1つ配置

  3. ボタンを右クリック →[イベントのビルド]

  4. 「コードビルダー」を選択

すると次のコード枠ができます。

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 が最も安定

  • フォームのボタンからワンクリックで実行できる

  • シート名を指定したり、テーブルを上書きしたりと応用も簡単

  • 実務でも非常によく使われるテクニック