「昨日のCSVと今日のCSVで何が変わったか」を調べるとき、行番号どうしを比較すると簡単に崩れます。
途中に1件追加されただけで、以降の行番号が全部ずれるからです。
CSVの差分は、ID、商品コード、顧客番号などのキー列で同じレコードを対応付けてから、追加・削除・変更の3種類に分けると整理しやすくなります。
行番号比較が危険な理由
旧CSV:
id,name,amount
A001,田中,1000
A002,佐藤,2000
A003,鈴木,3000
新CSV:
id,name,amount
A001,田中,1000
A004,高橋,1500
A002,佐藤,2200
A003,鈴木,3000
2行目どうしを比べると、
A002,佐藤,2000
A004,高橋,1500
で「全部変わった」ように見えます。
しかし実際には、
A004が追加A002の amount が2000→2200へ変更
です。
行位置ではなく id を対応付ける必要があります。
1. まずキー列を決める
キーは、同じ対象を一意に識別できる列です。
候補は次のようなものです。
- 顧客ID
- 商品コード
- 注文番号
- 社員番号
- システム側で付与された一意ID
名前だけをキーにすると、同姓同名や表記ゆれで誤判定しやすくなります。
キーが重複している場合は、差分比較の前にその重複を解決するか、複合キーを検討します。
2. 差分をAdded / Removed / Changedに分ける
キーを決めたら、差分は3種類に整理できます。
Added:新CSVにだけある
旧CSVに A004 がなく、新CSVにだけあるなら追加です。
Removed:旧CSVにだけある
旧CSVに存在し、新CSVから消えたキーは削除候補です。
ただし「削除された」と断定する前に、抽出条件や期間が違っていないか確認します。
Changed:両方にあるが属性が違う
A002 は両方に存在しますが、amountが違います。
旧: A002,佐藤,2000
新: A002,佐藤,2200
これが変更です。
3. ExcelならXLOOKUPで存在確認できる
2つのCSVをExcelへ取り込んだ場合、XLOOKUPを使って旧一覧から同じIDを探せます。
新一覧のA列がID、旧一覧のA列がIDなら、たとえば存在確認用の列で次のようにできます。
=XLOOKUP(A2,旧一覧!$A:$A,旧一覧!$A:$A,"未登録")
MicrosoftのXLOOKUPは、検索列から値を探し、同じ行の別列を返せる関数です。既定では最初に一致した項目を返します。
Excelのバージョン注意: XLOOKUPはMicrosoft 365や比較的新しいExcelで利用できます。Excel 2016 / 2019では利用できないため、その場合はINDEX/MATCHやPower Queryなど別手段を使います。
ただし、キーが重複していると「どの行を比較したのか」が曖昧になります。差分比較前の重複キー検査が重要です。
4. 変更は列ごとに比較する
同じキーが見つかったら、比較対象列を決めます。
たとえば、
- name
- amount
- status
を比較するなら、列ごとに旧値と新値を並べます。
| id | 項目 | 旧 | 新 |
|---|---|---|---|
| A002 | amount | 2000 | 2200 |
この形にすると「行が違う」ではなく、何の値がどう変わったかを記録できます。
5. キーそのものが汚れていないか確認する
差分が大量に出たときは、本当にデータが全部変わったとは限りません。
次の違いで一致しないことがあります。
00123と123- 数値123と文字列
"123" - 前後の空白
- 全角/半角
- 大文字/小文字
- 同じに見える別文字
比較前にキーの意味を確認し、必要なら「照合用キー」を別列で作ります。原本の値を上書きして正規化するのは避けます。
6. Power Queryを使う方法もある
毎月同じ比較を繰り返すなら、Power Queryで2つの一覧を取り込み、キーで結合して差分を抽出する方法もあります。
XLOOKUPは小さな比較を目で確認しやすく、Power Queryは処理手順を再実行しやすいのが利点です。
どちらを使う場合も、比較ロジックの中心は同じです。
キーで対応付ける → 片側だけを探す → 両側にある行の属性を比較する
という順です。
7. 差分結果は証跡として残す
差分を見つけたら、その場で上書きするだけでなく、結果を残しておくと後で確認できます。
最低限、
- 比較した旧ファイル名
- 新ファイル名
- 比較日
- キー列
- Added件数
- Removed件数
- Changed件数
を残します。
重要なデータなら、旧CSV・新CSV自体も保持します。
まとめ
CSVの差分比較では、行番号を合わせることより同じ対象を一意に識別できるキーを決めることが重要です。
そのうえで、
- 新しいキー=Added
- 消えたキー=Removed
- 同じキーで値が違う=Changed
と分ければ、差分が整理できます。
参考一次資料
- Microsoft Support: XLOOKUP 関数
https://support.microsoft.com/ja-jp/excel/functions/xlookup-function - Microsoft Learn: Power Query でのクエリ結合関連
https://learn.microsoft.com/ja-jp/power-query/merge-queries-overview
