Python+ChatGPTでExcel差分チェックを秒速で自動化した話

に公開

背景

仕事で「2つのExcelファイル(あるいはシート)に差異があるか確認してほしい」というタスクが発生しました。

一見シンプルですが、実際に人力でやるとなると地獄です。
数百行 × 数十列のシートを目で追って比較するなんて、まさに修行僧モード。終わる頃には悟りが開けそうです。

そこで私はこう思いました。

「これは人間の仕事じゃない。Pythonにやらせよう」

そして頼れる相棒 ChatGPT に相談しました。


実装(ChatGPTと一緒に数分で完成)

ChatGPTからのアドバイスを元に、Pythonでサクッと比較スクリプトを書きました。

import pandas as pd

file1 = "file1.xlsx"
file2 = "file2.xlsx"
sheet = 0

df1 = pd.read_excel(file1, sheet_name=sheet)
df2 = pd.read_excel(file2, sheet_name=sheet)

# 行列を揃える
df1, df2 = df1.align(df2)

# NaN を同じとみなすために fillna して比較
diff_mask = (df1.fillna("__NA__") != df2.fillna("__NA__"))

rows, cols = diff_mask.to_numpy().nonzero()

if len(rows) == 0:
    print("✅ 差異はありません")
else:
    print("❌ 差異があります。差異セルの位置:")
    for r, c in zip(rows, cols):
        print(f"行={r+1}, 列={df1.columns[c]} : {df1.iat[r, c]} vs {df2.iat[r, c]}")

トラブル解消(NaN vs NaN 問題も即解決)

最初に試したときは「NaN と NaN」まで「差異あり」と出てしまいました。

そこで ChatGPT に相談したところ…

「NaN同士は一致扱いにしたいなら fillna("NA") してから比較すると良いですよ」

と言われ、即解決。数秒で詰まりポイントが消えました。

出力例

例えば、こんな結果が出ます👇

❌ 差異があります。差異セルの位置:
行=10, 列=金額 : 100 vs 120=15, 列=ステータス : 承認済み vs 未承認

余計な出力がなく、本当に違うところだけがわかります。
まさに「お前が見たいのはこれだろ?」という感じ。

学びポイント

  • NaNの扱いは要注意
    → データ比較では「空欄同士を同じとする」か「違うとする」かを決めるのが大事。

  • 人力でやると膨大な作業も、プログラムを使えば数分で終わる。

  • **ChatGPTを相談相手にすると超速で前進できる。**独学なら半日悩むところも、即フィードバックで解決。

まとめ

もし今回のタスクを人力でやっていたら、丸1日消えていたと思います。
でも ChatGPT と Python の力を借りれば、発生 → 実装 → 完了まで10分足らず。

効率化できただけでなく「なるほど、NaNの扱いはこうすればいいのか」と、ちゃんと学びもありました。

次に「Excelファイル比べて!」と言われても、もう怖くありません 。

おまけ

この記事もChatGPTにお願いして書いてみました。😎

Discussion