2つのCSVの差分を比較する方法
最終更新:
要点
2つのCSVを比べるときは、まずどの行とどの行が同じデータかを決める必要があります。 並び順が変わることがあるデータは、顧客コードや取引先コードなど、行ごとに一意なキー列で照合します。 同じキーが複数の行にある場合は、どの行と比べるべきか決められないため、推測で対応づけずに確認が必要です。
例:先月と今月の取引先一覧
先月の一覧(A)と今月の一覧(B)です(架空のデータです)。今月は行と列の順番が変わり、メールの列が追加されています。
取引先コード,取引先名,担当者,電話番号,締め日
S-001,株式会社カケリオ商事,山田,03-0000-0001,20日
S-002,有限会社みほん,佐藤,06-0000-0002,末日
S-003,合同会社サンプル,鈴木,052-000-0003,15日
S-004,架空物産株式会社,田中,011-000-0004,末日取引先コード,取引先名,電話番号,担当者,締め日,メール
S-003,合同会社サンプル,052-000-0003,鈴木,15日,suzuki@example.invalid
S-001,株式会社カケリオ商事,03-0000-0001,山田␣,20日,yamada@example.invalid
S-002,有限会社みほん,06-0000-0099,佐藤,末日,
S-005,架空商店,02-0000-0005,高橋,10日,takahashi@example.invalid「␣」は、見えない半角スペースを表しています。
取引先コードで照合すると、次のようになります。
| 取引先コード | 結果 | 内容 |
|---|---|---|
S-001 | 変更 | 担当者「山田」→「山田␣」(末尾の空白だけの違い) |
S-002 | 変更 | 電話番号 06-0000-0002 → 06-0000-0099 |
S-003 | 同じ | 行の順番が変わっても、値は同じです。 |
S-004 | 削除 | 今月の一覧にありません。 |
S-005 | 追加 | 今月の一覧で増えた取引先です。 |
列の順番が違っても、列名が同じなら同じ列として比べます。メールの列は「Bで追加された列」になります。
行の順番で比べるか、キー列で照合するか
| 方法 | 向いているデータ | 注意点 |
|---|---|---|
| 行の順番で比べる | 同じ手順で出力され、並び順が変わらないファイル。キー列がないデータ。 | 行が途中に追加・削除されても、その前後は正しく比べられます。並び替えた行は「削除+追加」として表示されます。 |
| キー列で照合する | 顧客コード・商品コードなど、行ごとに一意な列があるデータ。並び順が変わるデータ。 | キーが重複している行や、キーが空の行は照合できません。1列で一意にならない場合は、複数の列を組み合わせます(例:店舗コード+日付)。 |
重複キーと空のキー
同じ取引先コードが今月の一覧に2行あると、先月の1行とどちらを比べるべきかは、ファイルからは決められません。 ExcelのVLOOKUPやXLOOKUPは最初に見つかった行だけを返すため、重複があっても気づかないまま比べてしまうことがあります。 重複しているキーと空のキーは、照合せずに一覧にして、元のデータを確認するのが安全です。
見た目が同じでも違う値
- 前後の空白。「山田」と「山田␣」は画面では同じに見えますが、別の値です。
- 全角・半角。「カナ」と「カナ」、「ABC」と「ABC」は別の文字です。
- 大文字・小文字。メールアドレスなどで違いが出ることがあります。
これらを違いとして扱うかどうかは目的によって変わります。無視する場合も、値そのものは書き換えず、比べるときだけ同じとみなすのが安全です。
Kakerio(CSV Diff)での扱い
- 行の順番での比較と、キー列(複数列の組み合わせも可)での照合を選べます。
- 重複キーと空のキーは照合しません。「要確認」として、キーと行番号を一覧にします。
- 変わったセルを「前 → 後」で表示します。前後の空白やタブ、全角スペースは記号で見えるようにします。
- 前後の空白・英字の大文字小文字・全角半角(NFKC)を無視する設定は比較だけに使い、表示や保存する値は元のままです。
- 差分CSVと要約レポートを保存できます。差分CSVは1行に1セルの変更(変更・追加・削除)で、行番号は見出しを1行目として数えます。
- UTF-8・UTF-16・Shift_JISのファイルを比べられます。文字コードが違うファイルどうしでも、文字として比べます。