PR

Access VBA逆引き集|CSV取込エラーをゼロに近づける「取込前チェック機能」実践テクニックとCopilot活用術

VBA

AccessシステムではCSV取込処理が非常に多く利用されています。

しかし実際の運用では、

  • ヘッダー名が違う
  • 列数が不足している
  • 必須項目が空白
  • ファイル形式が異なる
  • 想定外のデータが含まれている

といった理由で取込エラーが発生するケースも少なくありません。

結論から言うと、Accessへ取り込む前にCSVファイルをチェックする仕組みを実装することで、取込エラーや障害発生率を大幅に低減できます。

近年はCSV自動取込や夜間バッチ処理の導入が進んでいますが、自動化が進むほど「取込前チェック」の重要性が高まります。本記事ではAccess VBAで実現するCSV事前検証機能について解説します。


スポンサーリンク

はじめに

例えば次のような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を活用することで、

  • 検証ロジック作成
  • エラー解析
  • 共通関数設計
  • 保守改善

も効率的に行えます。

夜間バッチや自動取込を運用しているシステムほど効果が高いため、ぜひ早い段階で導入を検討してみてください。

Access VBA逆引き大全 600の極意 Microsoft 365/Office 2021/2019/2016/2013対応 | E-Trainer.jp[中村峻] |本 | 通販 | Amazon
AmazonでE-Trainer.jp[中村峻]のAccess VBA逆引き大全 600の極意 Microsoft 365/Office 2021/2019/2016/2013対応。アマゾンならポイント還元本が多数。E-Trainer.jp…

コメント

タイトルとURLをコピーしました