Accessシステムを長期間運用していると、避けて通れないのが「重複データ」の問題です。
例えば、
- 顧客マスタの重複登録
- 商品マスタの二重作成
- CSV取込による重複データ増加
- 名寄せされていない取引先情報
- Excel連携時の重複レコード
などが発生します。
結論から言うと、Access VBAを利用して重複データの検出・統合機能を実装することで、データ品質を大幅に向上できます。
さらにCopilotを活用することで、重複検出ロジックやSQL作成、VBAコード生成も効率化できます。
- はじめに
- 重複データが発生する原因
- 重複チェックの基本
- 逆引き① 重複件数を確認したい
- 逆引き② 登録前に重複チェックしたい
- 逆引き③ CSV取込前に確認したい
- 逆引き④ 重複一覧を作成したい
- 逆引き⑤ 最古データだけ残したい
- 重複データ削除の考え方
- 実践例① 顧客マスタ名寄せ
- 実践例② 商品マスタ整理
- 実践例③ CSV大量取込
- 名寄せ支援テーブルを作る
- ログ管理を実装する
- 類似データの検出
- 実務活用例① 営業支援システム
- 実務活用例② 保守管理システム
- 実務活用例③ 受発注管理
- エラー処理も忘れない
- Copilot活用術① 重複チェックコード生成
- Copilot活用術② SQL作成支援
- Copilot活用術③ 名寄せ設計支援
- 重複対策で重要な考え方
- AI時代でも重要なデータ品質
- まとめ
はじめに
例えば顧客マスタに次のようなデータが存在するとします。
| 顧客コード | 顧客名 |
|---|---|
| C001 | 東京商事 |
| C002 | 東京商事 |
| C003 | 大阪産業 |
この状態では、
顧客数集計誤り
売上分析誤り
メール重複送信
などの問題が発生します。
そのため定期的な重複確認が重要になります。
重複データが発生する原因
現場では次のようなケースが多くあります。
手入力
担当者ごとの登録差異
CSV取込
過去データとの重複
他システム連携
コード体系の違い
組織改編
取引先統合
特にCSV連携が増えるほど重複発生率も高くなります。
重複チェックの基本
まず重複件数を確認します。
SELECT
顧客名,
Count()
FROM
T_顧客
GROUP BY
顧客名
HAVING
Count() > 1;
重複している顧客のみ抽出できます。
逆引き① 重複件数を確認したい
VBAから確認します。
Dim lngCnt As Long
lngCnt = DCount( _
"*", _
"T_顧客", _
"顧客名='東京商事'")
重複判定に利用できます。
逆引き② 登録前に重複チェックしたい
フォーム登録時の基本です。
If DCount( _
"*", _
"T_顧客", _
"顧客コード='" & _
Me!顧客コード & "'") > 0 Then
MsgBox _
"既に登録されています"
Exit Sub
End If
二重登録防止になります。
逆引き③ CSV取込前に確認したい
取込処理前に判定します。
If DCount( _
"*", _
"T_顧客", _
"顧客コード='" & _
strCode & "'") > 0 Then
GoTo NextRecord
End If
既存データとの重複を防げます。
逆引き④ 重複一覧を作成したい
レポート用です。
SELECT
顧客名,
Count() AS 件数
FROM
T_顧客
GROUP BY
顧客名
HAVING
Count() > 1
ORDER BY
Count(*) DESC;
管理資料として利用できます。
逆引き⑤ 最古データだけ残したい
名寄せ時によく使います。
SELECT
Min(ID)
FROM
T_顧客
GROUP BY
顧客名;
残すデータの判定に利用します。
重複データ削除の考え方
いきなり削除は危険です。
推奨フロー
重複検出
↓
バックアップ
↓
確認
↓
削除
慎重な運用が必要です。
実践例① 顧客マスタ名寄せ
よくあるケースです。
東京商事
東京商事㈱
株式会社東京商事
を統合します。
実践例② 商品マスタ整理
商品コード重複を検出します。
商品A
商品A
商品A
管理精度が向上します。
実践例③ CSV大量取込
夜間処理に有効です。
CSV受信
↓
重複判定
↓
未登録のみ追加
取込品質が向上します。
名寄せ支援テーブルを作る
実務では便利です。
T_DUPLICATE_CHECK
| 項目 |
|---|
| 確認日 |
| 対象テーブル |
| キー値 |
| 状態 |
調査履歴を残せます。
ログ管理を実装する
重複除去履歴も残しましょう。
T_DUPLICATE_LOG
| 項目 |
|---|
| 処理日時 |
| 対象 |
| 件数 |
| 実行者 |
登録例
CurrentDb.Execute _
"INSERT INTO " & _
"T_DUPLICATE_LOG(" & _
"処理日時,件数)" & _
"VALUES(" & _
"Now(),10)"
監査対応にも有効です。
類似データの検出
完全一致だけでは不十分です。
例えば、
東京商事
東京 商事
東京商事㈱
のような表記ゆれがあります。
VBAで補正処理を行います。
strName = Replace( _
strName, _
" ", "")
比較前に正規化すると効果的です。
実務活用例① 営業支援システム
顧客重複を防止します。
顧客登録
↓
重複確認
↓
登録
営業効率向上につながります。
実務活用例② 保守管理システム
設備マスタを整理できます。
設備登録
↓
重複判定
↓
台帳更新
データ品質向上に有効です。
実務活用例③ 受発注管理
取引先マスタの保守です。
発注先
↓
重複確認
↓
登録
誤発注防止につながります。
エラー処理も忘れない
重複処理でも重要です。
On Error GoTo ErrHandler
'処理
Exit Sub
ErrHandler:
MsgBox Err.Description
安定運用に欠かせません。
Copilot活用術① 重複チェックコード生成
Copilotへ次のように依頼できます。
Access VBAで
重複チェック機能を作成してください
条件
・顧客コード判定
・CSV取込対応
・ログ出力あり
・エラー処理あり
実践的なコード作成を支援してくれます。
Copilot活用術② SQL作成支援
例えば、
重複データを抽出する
Access SQLを作成してください
と依頼できます。
SQL作成時間を短縮できます。
Copilot活用術③ 名寄せ設計支援
顧客マスタの
名寄せルールを考えてください
という相談も有効です。
運用設計の改善に役立ちます。
重複対策で重要な考え方
登録時に防止する
後処理より効果的
定期チェックする
月次監査がおすすめ
ログを残す
履歴管理を行う
表記ルールを統一する
入力品質向上
CSV取込前に確認する
障害予防につながる
AI時代でも重要なデータ品質
Copilotや生成AIによって、
- VBAコード生成
- SQL作成
- ドキュメント作成
- エラー解析
は効率化されています。
しかし、
重複データ
↓
誤った分析
↓
誤った判断
という問題はAIでも解決できません。
だからこそ、システム側でのデータ品質管理が重要になります。
まとめ
重複データはAccessシステムの品質を大きく低下させる要因の一つです。
今回紹介した方法を活用することで、
- 重複検出
- 重複防止
- CSV取込チェック
- 名寄せ支援
- ログ管理
を実現できます。
またCopilotを活用することで、
- VBAコード作成
- SQL生成
- 重複判定ロジック設計
- 保守改善
も効率化できます。
データ量が増えるほど重複問題は深刻になります。トラブルが発生する前に、重複管理の仕組みを導入し、品質の高いAccessシステムを維持していきましょう。


コメント