CSVをAccessへ取り込んで既存データを更新したい場合、インポート先を本番テーブルに直結せず、取込専用テーブルを経由します。「同じ商品コードなら更新、存在しないコードなら追加」という二段階に分け、キーの重複・空白を検出してから実行します。

取込用テーブルと本番テーブルを分離

例として本番商品テーブルに商品コード(一意)・商品名・単価があり、CSVに同じ列があるとします。まずAccessファイルを別名バックアップし、CSVを取込_商品テーブルへ取り込みます。CSV側で00123と123が別の商品なら、商品コードを数値へ自動変換するとキーが衝突します。列型は文字列として読み、両テーブルで一致させます。

更新キーと新規追加キーを確認

更新の前に、取込テーブルの空キーと同一キー複数行を集計します。同じ商品コードがCSV内に2回ある場合、どちらの単価を採用するか確定するまで更新を止めます。まず選択クエリで本番.商品コード = 取込.商品コードの一致行を一覧化し、更新予定の件数と変更前後の値を控えます。Access公式の更新クエリは既存行を変更しますが、新しい行を追加することはできません。

更新クエリと追加クエリを分ける

一致したキーは更新クエリで必要な列だけ書き換えます。新規コードだけを本番へ入れる場合は、取込側を起点に「本番に同一キーが存在しない」行を選択して追加クエリを使います。更新と追加を混同するとレコード増殖の原因になります。アクションクエリを実行する前に、選択クエリで対象件数を確認し、検証用DBで小規模実行してください。

変更前後の件数と重要列を検査する

本番100件、CSV10件のうち既存キー7件・新規キー3件なら、更新後も本番の件数は100件、追加後は103件が期待値です。ただしCSVに重複キーがあればこの計算は使えません。実行後は件数だけでなく、更新した7件の単価と、新規3件の主キーを照合します。更新前に戻せるバックアップと実行ログは削除しないでください。

参考資料

おすすめの記事