財務會計

財會人員必學:用 Python 自動對帳,告別手動核對 Excel 的噩夢

## 你有沒有這個困擾?

每個月底,你要把**銀行對帳單**和**公司帳務系統**的資料一筆一筆核對,找出哪些金額或日期不一樣。用 Excel 的 VLOOKUP 做?還是一行一行看?

光是這個工作,就要花半天甚至一整天。而且越到月底越緊張,深怕漏掉哪筆。

今天我們就用 **Python + Pandas** 來解決這個問題!

---

## 準備工作

你需要準備兩份 Excel:
1. `bank_statement.xlsx`(銀行對帳單)
2. `company_ledger.xlsx`(公司帳本)

兩份都要有:`日期`、`金額`、`摘要/說明` 這幾個欄位。

安裝必要套件(在命令提示字元輸入):
```bash
pip install pandas openpyxl
```

---

## 完整程式碼

```python
import pandas as pd

# 讀取兩份 Excel
bank = pd.read_excel("bank_statement.xlsx")
ledger = pd.read_excel("company_ledger.xlsx")

# 統一欄位名稱(依你的實際欄位名稱修改)
bank = bank.rename(columns={"交易日期": "date", "交易金額": "amount", "說明": "desc"})
ledger = ledger.rename(columns={"日期": "date", "金額": "amount", "摘要": "desc"})

# 四捨五入金額,避免浮點數誤差
bank["amount"] = bank["amount"].round(2)
ledger["amount"] = ledger["amount"].round(2)

# 合併對帳(以金額和日期為對帳依據)
merged = pd.merge(
bank, ledger,
on=["date", "amount"],
how="outer",
indicator=True
)

# 分類
matched = merged[merged["_merge"] == "both"]
bank_only = merged[merged["_merge"] == "left_only"] # 只在銀行出現
ledger_only = merged[merged["_merge"] == "right_only"] # 只在帳本出現

# 輸出結果
with pd.ExcelWriter("reconciliation_result.xlsx") as writer:
matched.to_excel(writer, sheet_name="已對帳", index=False)
bank_only.to_excel(writer, sheet_name="僅銀行有", index=False)
ledger_only.to_excel(writer, sheet_name="僅帳本有", index=False)

print(f"✅ 對帳完成!")
print(f" 已配對:{len(matched)} 筆")
print(f" 僅銀行:{len(bank_only)} 筆 ← 需確認")
print(f" 僅帳本:{len(ledger_only)} 筆 ← 需確認")
```

---

## 執行結果

你會得到一份 **`reconciliation_result.xlsx`**,裡面有三個分頁:
- **已對帳**:兩邊都有、金額相符的,放心!
- **僅銀行有**:可能是漏入帳的,需確認
- **僅帳本有**:可能是銀行漏記的,需確認

以前要花半天的工作,現在不到 10 秒完成!

---

## 下一步升級

1. 加入**日期區間篩選**,只對帳特定月份
2. 加入**顏色標記**(用 openpyxl 把差異列標成紅色)
3. 對帳完自動寄 Email 給主管

這就是「**領域知識 + AI 工具**」的威力——你懂對帳邏輯,Python 幫你執行!

留言討論(0)

發表留言