2つのCSVファイルの差分を比較する方法
「先月と今月のマスタデータ、どこが変わった?」「他のチームから受け取ったCSV、前回と何が違う?」——CSVを扱う業務では、2つのファイルを比較して差分を確認したい場面が頻繁にあります。
この記事では、CSVファイルの差分を比較する方法をExcel、コマンドライン、専用ツールの3パターンで紹介します。それぞれのメリット・デメリットも整理したので、自分の状況に合った方法を選んでみてください。
方法1:Excelで比較する
一番手軽に試せるのがExcelです。関数を組み合わせれば、2つのCSVの違いを見つけることができます。
EXACT関数でセル単位比較
2つのCSVをExcelの別々のシートに開き、3枚目のシートで=EXACT(Sheet1!A1, Sheet2!A1)のように比較する方法です。値が同じならTRUE、違えばFALSEが返ります。
ただし、この方法は行の順番が同じであることが前提です。片方のCSVに行が追加されたり、行の順序が変わっていたりすると、うまく機能しません。
VLOOKUPでキー列マッチング
IDなどのキー列がある場合は、VLOOKUP(またはXLOOKUP)でマッチングできます。片方にあって片方にないレコードを見つけるには、=ISNA(VLOOKUP(A2, Sheet2!A:A, 1, FALSE))のような式を使います。
動くことは動くのですが、列が多いと式をたくさん並べる必要があり、数千行を超えるとExcelの動作も重くなります。「急いでいるから手早く確認したい」という場面ではやや力不足です。
方法2:コマンドラインで比較する
Mac/Linuxユーザーなら、ターミナルのdiffコマンドが使えます。
# 基本的な差分表示
diff old.csv new.csv
# 並列表示(見やすい)
diff --side-by-side old.csv new.csv
# 変更箇所だけ表示
diff --changed-group-format='%<' --unchanged-group-format='' old.csv new.csv
diffは行単位のテキスト比較ツールなので、CSVの構造(列やセル)を意識した比較はできません。たとえば、行の順序が違うだけの2つのCSVでも「全行が異なる」と表示されてしまいます。
ソート済みのCSVを比較するなら実用的ですが、行の順序が保証されないCSVでは使いにくい場面があります。
# ソートしてから比較する(キー列がID=1列目の場合)
diff <(sort old.csv) <(sort new.csv)
Pythonスクリプトで本格的に比較
柔軟にやりたいなら、Pythonで比較スクリプトを書くのも手です。pandasを使えば数行で書けます。
import pandas as pd
old = pd.read_csv('old.csv')
new = pd.read_csv('new.csv')
# マージして差分を確認
merged = old.merge(new, indicator=True, how='outer')
print(merged[merged['_merge'] != 'both'])
自由度は高いですが、「ちょっと確認したいだけ」なのに毎回スクリプトを書くのは面倒です。定期的に同じ形式のCSVを比較するなら、スクリプト化する価値はあります。
方法3:専用ツールで比較する
CSVの構造を理解した専用ツールを使えば、追加行・削除行・変更行を色分けで一目で確認できます。
CSV Rescueの差分比較ツールでは、変更前と変更後のCSVをそれぞれドロップするだけで、行単位・セル単位の差分をハイライト表示します。キー列を指定すれば、行の順序が違っていてもIDベースで正しくマッチングします。
色分けのルールはシンプルで、追加された行が緑、削除された行が赤、変更された行が黄色です。変更されたセルには旧値が取消線つきで表示されるので、「何がどう変わったか」が直感的にわかります。
2つのCSVをドロップするだけ。追加・削除・変更をセル単位で色分け表示。
CSV差分比較ツール →方法の使い分け
どの方法を使うかは、状況によって変わります。数行の小さなCSVをサッと見比べるだけならExcelで十分です。定型作業として繰り返し比較するならPythonスクリプトの方が効率的です。そして、「いま手元にある2つのCSVの違いをすぐに知りたい」という場面では、専用ツールが一番早いです。
重要なのは、CSVの差分比較には「行の順序」と「キー列」という2つの概念があることです。行番号で比較するのか、IDのようなキー列で行をマッチングするのかで、結果はまったく変わります。目的に合った方法を選びましょう。
よくあるユースケース
ECサイトの商品マスタ更新
月次で商品情報を更新するとき、前回のマスタCSVと今回のマスタCSVを比較すれば、新規追加商品、削除商品、価格変更や説明文の修正を一覧で確認できます。商品IDをキー列に指定するのがポイントです。
会計データの月次照合
先月と今月の仕訳データCSVを比較して、修正仕訳の有無を確認するケースです。伝票番号をキー列に指定すれば、修正された行だけを絞り込めます。
システム移行時のデータ検証
旧システムからエクスポートしたCSVと、新システムにインポート後にエクスポートしたCSVを比較して、データが正しく移行されたかを検証します。全行が「一致」になればOKです。
まとめ
CSVの差分比較には、Excel(手軽だが大量データに弱い)、コマンドライン(柔軟だがCSV構造を意識しない)、専用ツール(直感的で速い)という選択肢があります。
共通して重要なのは、「何をキーにして行をマッチングするか」を明確にすることです。それさえ決まれば、どの方法でも必要な差分は見つけられます。