毎月・毎週のようにCSVファイルをAccessへ取り込んでいるのであれば、VBAによる自動化は非常に効果があります。特に「ファイル選択」「取込」「エラーチェック」「履歴保存」までを自動化することで、ヒューマンエラーを削減しながら業務時間を大幅に短縮できます。本記事では、Access VBAを活用したCSV取込自動化の実践方法を紹介します。
CSV取込を自動化するメリット
多くの業務システムでは、外部システムからCSVを出力し、Accessへ取り込んで分析や集計を行っています。
しかし手作業による取込では以下の課題があります。
- ファイル選択ミス
- 同じデータの二重取込
- 取込漏れ
- 担当者による作業品質のばらつき
- 作業時間の増加
VBAによる自動化を行うことで、これらの問題を大幅に改善できます。
よくある取込業務
例えば以下のようなケースです。
- 売上データの日次取込
- 点検実績データの取込
- 在庫情報の更新
- モニタリングデータの収集
- 作業実績の集計
CSV形式であれば、ほぼ同じ考え方で自動化できます。
Access標準機能によるCSV取込
まずはAccessに標準搭載されているDoCmd.TransferTextを利用します。
基本構文
DoCmd.TransferText _
TransferType:=acImportDelim, _
TableName:=”T_売上データ”, _
FileName:=”C:\Data\Sales.csv”, _
HasFieldNames:=True
このコードだけでCSVファイルをテーブルへ取り込めます。
引数の意味
| 引数 | 内容 |
|---|---|
| TransferType | インポート・エクスポート指定 |
| TableName | 取込先テーブル |
| FileName | CSVファイルパス |
| HasFieldNames | 先頭行が項目名かどうか |
AccessのCSV取込では最も利用頻度の高い命令です。
ファイル選択ダイアログを表示する
毎回ファイル名を変更する業務では、ダイアログ表示が便利です。
ファイル選択処理
Function SelectFile() As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = “CSVファイルを選択してください”
.Filters.Clear
.Filters.Add “CSV”, “*.csv”
If .Show = True Then
SelectFile = .SelectedItems(1)
End If
End With
End Function
使用例
Dim strFile As String
strFile = SelectFile()
If strFile <> “” Then
DoCmd.TransferText _
acImportDelim, _
, _
“T_売上データ”, _
strFile, _
True
End If
利用者はボタンを押してファイルを選択するだけになります。
取込前にデータを削除する
毎回フルデータを取り込む場合は、既存データを削除してから取込を実施します。
テーブル初期化
CurrentDb.Execute _
“DELETE FROM T_売上データ”, _
dbFailOnError
一連の流れ
CurrentDb.Execute _
“DELETE FROM T_売上データ”, _
dbFailOnError
DoCmd.TransferText _
acImportDelim, _
, _
“T_売上データ”, _
strFile, _
True
業務で非常によく使うパターンです。
二重取込を防止する方法
CSV取込業務では二重登録防止が重要です。
取込履歴テーブル
例として以下のテーブルを作成します。
| 項目 | 内容 |
|---|---|
| ImportDate | 取込日時 |
| FileName | ファイル名 |
| UserName | 実行者 |
履歴登録処理
CurrentDb.Execute _
“INSERT INTO T_取込履歴 ” & _
“(ImportDate, FileName) ” & _
“VALUES ” & _
“(Now(), ‘” & strFile & “‘)”
登録済確認
If DCount(“*”, _
“T_取込履歴”, _
“FileName='” & strFile & “‘”) > 0 Then
MsgBox “既に取込済です”
Exit Sub
End If
これだけでも大きな事故防止になります。
エラー処理を実装する
業務システムでは必須です。
基本パターン
On Error GoTo ERR_HANDLER
DoCmd.TransferText _
acImportDelim, _
, _
“T_売上データ”, _
strFile, _
True
MsgBox “取込完了”
Exit Sub
ERR_HANDLER:
MsgBox Err.Number & vbCrLf & Err.Description
よく発生するエラー
- ファイルが存在しない
- 共有フォルダ接続エラー
- 項目不足
- データ型不一致
- ロックエラー
業務アプリでは必ず実装しましょう。
トランザクション処理を利用する
データの整合性を保つためにはトランザクションも有効です。
サンプル
Dim ws As DAO.Workspace
Set ws = DBEngine.Workspaces(0)
On Error GoTo ERR_HANDLER
ws.BeginTrans
CurrentDb.Execute _
“DELETE FROM T_売上データ”
DoCmd.TransferText _
acImportDelim, _
, _
“T_売上データ”, _
strFile, _
True
ws.CommitTrans
Exit Sub
ERR_HANDLER:
ws.Rollback
MsgBox Err.Description
途中で失敗した場合でもロールバックできます。
取込後にデータチェックを行う
CSVは外部から受け取るデータのため、チェック処理が重要です。
レコード件数確認
Dim lngCnt As Long
lngCnt = DCount(“*”, _
“T_売上データ”)
MsgBox lngCnt & “件取込完了”
必須項目チェック
If DCount(“*”, _
“T_売上データ”,
“顧客コード Is Null”) > 0 Then
Msgox “顧客コード未設定データがあります”
End If
金額異常チェック
If DCount(““, _
“T_売データ”, _
“売上金額 < 0”) > 0 hen
MsgBox “異常金額があります”
End I
実務では非常に有効な手法です。
フォルダ監視型の自動取込
さらに発展させると、特定フォルダへ配置されたCSVを定期的に取り込むことも可能です。
イメージ
- CSV出力
- 共有フォルダへ保存
- Access起動
- 自動取込
- 完了ログ出力
これにより利用者の操作をほぼゼロにできます。
実務でおすすめの構成
CSV取込機能を作る際は以下の構成がおすすめです。
テーブル
- T_売上データ
- T_取込履歴
- T_エラーログ
フォーム
- F_取込メニュー
モジュール
- M_File
- M_Import
- M_Log
役割を分離することで保守性が向上します。
VBA化による改善効果
実際の業務では以下のような改善事例があります。
自動化前
- 1日10分
- 月20日稼働
- 月200分
自動化後
- 1日1分未満
- エラー削減
- 作業品質統一
年間では数十時間規模の削減につながることも珍しくありません。
CSV取込自動化で活用できる関連関数
ファイル存在確認
If*Dir(strFile) <> “” Then
*MsgBox “存在します”
End If
現在日時取得
Now*)
“*
レコード数取得
DCount(“*”, “T_売上データ”)
“
SQL実行
CurrentDb.Execute strSQL
これらはCSV取込処理で頻繁に利用されます。
まとめ
Access VBAによるCSV取込自動化は、比較的少ないコード量で大きな効果を得られる業務改善テーマです。
特に、
- TransferTextによる高速取込
- ファイル選択ダイアログ
- 二重取込防止
- エラー処理
- 取込履歴管理
- トランザクション制御
- データ検証
まで実装すると、業務利用に耐えうる堅牢な仕組みを構築できます。
Accessは今なお現場業務で強力なツールです。単純作業をVBAで自動化し、より価値の高い業務へ時間を使える環境を作っていきましょう。

コメント