AccessシステムではCSV取込処理が非常に多く利用されています。
しかし実際の運用では、
- ヘッダー名が違う
- 列数が不足している
- 必須項目が空白
- ファイル形式が異なる
- 想定外のデータが含まれている
といった理由で取込エラーが発生するケースも少なくありません。
結論から言うと、Accessへ取り込む前にCSVファイルをチェックする仕組みを実装することで、取込エラーや障害発生率を大幅に低減できます。
近年はCSV自動取込や夜間バッチ処理の導入が進んでいますが、自動化が進むほど「取込前チェック」の重要性が高まります。本記事ではAccess VBAで実現するCSV事前検証機能について解説します。
- はじめに
- 取込前チェックとは
- なぜ事前チェックが必要なのか
- 逆引き① CSVファイルが存在するか確認したい
- 逆引き② ファイルサイズを確認したい
- 逆引き③ 先頭行を取得したい
- 逆引き④ ヘッダーを確認したい
- 逆引き⑤ 列数を確認したい
- 逆引き⑥ データ件数を確認したい
- 逆引き⑦ 必須項目を確認したい
- 実践例① 顧客マスタ取込
- 実践例② 売上データ取込
- 実践例③ 他システム連携
- エラー内容をログへ記録する
- 判定結果を返す共通関数を作る
- 夜間バッチとの組み合わせ
- 実務活用例① 本社データ連携
- 実務活用例② 営業データ統合
- 実務活用例③ 生産実績収集
- Copilot活用術① CSV検証コード作成
- Copilot活用術② エラー解析
- Copilot活用術③ テーブル設計支援
- 取込チェック導入時のポイント
- AI時代でも重要なデータ品質管理
- まとめ
はじめに
例えば次のようなCSVが届いたとします。
顧客コード,顧客名,住所
C001,東京商事,東京都
通常は問題なく取込できます。
しかし次のようなケースもあります。
コード,名称
C001,東京商事
期待するフォーマットと異なるため、
取込失敗
エラー発生
夜間バッチ停止
などの問題につながります。
そこで取込前チェックが重要になります。
取込前チェックとは
CSVを取り込む前に内容を検証する仕組みです。
例えば、
ファイル存在確認
↓
ヘッダー確認
↓
列数確認
↓
データ件数確認
↓
取込実施
という流れになります。
なぜ事前チェックが必要なのか
実務では次のようなメリットがあります。
バッチ停止防止
エラー発生を未然に防げる
障害調査の効率化
原因を特定しやすい
利用者への通知
事前に異常が分かる
保守コスト削減
トラブル対応工数を削減できる
逆引き① CSVファイルが存在するか確認したい
まず最初に実施します。
If Dir("C:\Import\Data.csv") = "" Then
MsgBox "ファイルが存在しません"
End If
非常に基本的ですが重要です。
逆引き② ファイルサイズを確認したい
空ファイル対策です。
Dim lngSize As Long
lngSize = FileLen( _
"C:\Import\Data.csv")
If lngSize = 0 Then
MsgBox _
"空ファイルです"
End If
逆引き③ 先頭行を取得したい
ヘッダーチェックに利用します。
Dim strLine As String
Dim intFile As Integer
intFile = FreeFile
Open _
"C:\Import\Data.csv" _
For Input As #intFile
Line Input #intFile, strLine
Close #intFile
逆引き④ ヘッダーを確認したい
期待値との比較を行います。
If strLine <> _
"顧客コード,顧客名,住所" Then
MsgBox _
"ヘッダーが不正です"
End If
逆引き⑤ 列数を確認したい
列不足を防止します。
Dim arrData()
arrData = Split(strLine, ",")
If UBound(arrData) <> 2 Then
MsgBox _
"列数が不正です"
End If
逆引き⑥ データ件数を確認したい
極端に少ない場合を検知します。
Dim lngCount As Long
lngCount = DCount("*", _
"T_IMPORT")
事前基準値と比較します。
逆引き⑦ 必須項目を確認したい
データ品質向上に役立ちます。
If Nz(rs!顧客コード, "") = "" Then
MsgBox _
"顧客コード未設定"
End If
実践例① 顧客マスタ取込
よくあるケースです。
CSV受信
↓
ヘッダー確認
↓
必須項目確認
↓
取込
↓
ログ保存
安定運用につながります。
実践例② 売上データ取込
夜間バッチで利用します。
ファイル確認
↓
件数確認
↓
CSV取込
↓
更新処理
実践例③ 他システム連携
外部システムとのデータ授受です。
CSV受信
↓
レイアウト確認
↓
データ確認
↓
登録
品質向上に効果があります。
エラー内容をログへ記録する
監査や調査に役立ちます。
T_IMPORT_ERROR_LOG
| 項目 |
|---|
| 発生日 |
| ファイル名 |
| エラー内容 |
記録例
CurrentDb.Execute _
"INSERT INTO " & _
"T_IMPORT_ERROR_LOG(" & _
"発生日,エラー内容)" & _
"VALUES(" & _
"Now()," & _
"'ヘッダー不正')"
判定結果を返す共通関数を作る
実務では関数化がおすすめです。
Public Function _
CheckCSVFile( _
ByVal FileName As String) _
As Boolean
If Dir(FileName) = "" Then
CheckCSVFile = False
Exit Function
End If
CheckCSVFile = True
End Function
利用例
If Not _
CheckCSVFile(strFile) Then
Exit Sub
End If
保守性が向上します。
夜間バッチとの組み合わせ
最近の運用では非常に有効です。
AM6:00
↓
CSV確認
↓
異常時ログ出力
↓
正常時取込
↓
完了通知
運用品質が向上します。
実務活用例① 本社データ連携
毎朝届くデータをチェックします。
CSV受信
↓
自動検証
↓
取込
担当者の負担を削減できます。
実務活用例② 営業データ統合
各拠点のCSVを検証します。
拠点A
拠点B
拠点C
↓
統合取込
品質向上に効果があります。
実務活用例③ 生産実績収集
工場データを管理します。
設備CSV
↓
形式確認
↓
登録
安定した運用が可能です。
Copilot活用術① CSV検証コード作成
Copilotへ次のように依頼できます。
Access VBAで
CSV事前チェック機能を
作成してください。
条件
・ファイル存在確認
・ヘッダーチェック
・列数チェック
・エラーログ出力
検証ロジック作成を効率化できます。
Copilot活用術② エラー解析
例えば、
CSV取込時に
列数不一致エラーが発生します
と依頼できます。
原因調査に役立ちます。
Copilot活用術③ テーブル設計支援
CSV取込エラーログの
設計を考えてください
と依頼することで設計品質向上につながります。
取込チェック導入時のポイント
必須項目を明確化する
事前にルールを決める
エラーをログへ残す
調査性向上
利用者へ通知する
運用負荷削減
共通関数化する
保守性向上
重要なCSVから適用する
段階的導入がおすすめ
AI時代でも重要なデータ品質管理
Copilotや生成AIによって、
- VBA作成
- SQL作成
- ドキュメント作成
- コードレビュー
は効率化しています。
しかし、
誤ったCSV
↓
誤ったデータ
↓
誤った分析
という問題は防げません。
そのため、AI時代だからこそデータ品質管理の重要性が高まっています。
まとめ
CSV取込処理はAccessシステムの中でも非常に利用頻度の高い機能です。
しかし、ファイルフォーマット違いやデータ不備による障害も多く発生します。
取込前チェック機能を実装することで、
- ヘッダー確認
- 列数確認
- 必須項目確認
- ファイル確認
- ログ記録
を自動化できるようになります。
またCopilotを活用することで、
- 検証ロジック作成
- エラー解析
- 共通関数設計
- 保守改善
も効率的に行えます。
夜間バッチや自動取込を運用しているシステムほど効果が高いため、ぜひ早い段階で導入を検討してみてください。

コメント