Claude Code x openpyxl で部門別予算実績管理・差異分析レポートを完全自動化する
Claude Code + openpyxlで複数部門のExcelを自動統合し予算差異分析レポートと超過アラートメールを自動化。2日かかった月次作業を2時間に短縮する実践ガイド。
目次 クリックで開く
|
blog

▲ Claude Codeが実際に生成した実行結果
月末の予算差異レポート作成が2日から2時間になった
財務担当の田中です。毎月末、各部門から予算実績ファイルを回収し、数値を転記して差異を計算するのに丸2日かかっていました。Claude Codeに依頼したところ、ファイル統合から差異分析・アラートメール送信まで2時間で完了するようになりました。
✅ 複数部門のExcelを自動統合
✅ 予算vs実績の差異を自動計算・色分け
✅ 差異Top5の自動抽出
✅ 超過部門への自動アラートメール
✅ ウォーターフォールチャート自動生成
STEP 1:部門別Excelを自動統合する
フォルダ内の部門別Excelを全件読み込み、統合サマリーを作成します。
全ファイルを読み込んで一つの統合Excelに集約してください。
各ファイルの「予算」シートと「実績」シートを統合します。
import os, glob, pandas as pd, openpyxl
from pathlib import Path
def consolidate(input_dir, output_file):
buds, acts = [], []
for f in glob.glob(f"{input_dir}/*.xlsx"):
dept = Path(f).stem
try:
b = pd.read_excel(f, sheet_name="予算"); b["部門"]=dept; b["種別"]="予算"; buds.append(b)
a = pd.read_excel(f, sheet_name="実績"); a["部門"]=dept; a["種別"]="実績"; acts.append(a)
print(f" ok {dept}")
except Exception as e: print(f" ng {dept}: {e}")
df = pd.concat(buds+acts, ignore_index=True)
piv = df.pivot_table(values="金額",index=["部門","科目"],columns="種別",aggfunc="sum").reset_index()
piv["差異"] = piv["実績"] - piv["予算"]
piv["差異率"] = piv["差異"] / piv["予算"] * 100
with pd.ExcelWriter(output_file, engine="openpyxl") as w:
piv.to_excel(w, sheet_name="統合サマリー", index=False)
df.to_excel(w, sheet_name="全明細", index=False)
print(f"統合完了: {output_file}")
return piv
df = consolidate("./部門別予算/", "budget.xlsx")
3部門のExcelが自動読み込みされ、統合サマリーシートに集約されました。部門×科目のマトリクスで予算・実績・差異が一覧化されています。

STEP 2:差異を色分けしてTop5を自動抽出する
予算超過・大幅未達の項目を自動で色分けし、問題箇所を即座に把握できるようにします。
– 予算超過10%以上は赤
– 未達20%以上は黄
– 差異Top5を別シートに抽出
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill, Font
wb = openpyxl.load_workbook("budget.xlsx")
ws = wb["統合サマリー"]
red_f = PatternFill("solid", fgColor="FFCDD2")
yellow_f = PatternFill("solid", fgColor="FFF9C4")
lr = ws.max_row
ws.conditional_formatting.add(f"F2:F{lr}",
CellIsRule(operator="greaterThan", formula=["0.1"], fill=red_f,
font=Font(color="B71C1C",bold=True)))
ws.conditional_formatting.add(f"F2:F{lr}",
CellIsRule(operator="lessThan", formula=["-0.2"], fill=yellow_f,
font=Font(color="E65100")))
# Top5を別シートへ
sorted_df = df.reindex(df["差異"].abs().sort_values(ascending=False).index)
ws5 = wb.create_sheet("要注意Top5")
hdrs = ["部門","科目","予算","実績","差異","差異率"]
for c,h in enumerate(hdrs,1):
cell=ws5.cell(1,c,h); cell.font=Font(bold=True,color="FFFFFF")
cell.fill=PatternFill("solid",fgColor="C62828")
for ri,(_, row) in enumerate(sorted_df.head(5).iterrows(),2):
for ci,v in enumerate([row["部門"],row["科目"],row["予算"],row["実績"],row["差異"],f"{row['差異率']:.1f}%"],1):
ws5.cell(ri,ci,v)
wb.save("budget.xlsx")
print("差異分析完了")
予算超過10%以上が赤、未達20%以上が黄色に自動着色。要注意Top5シートに差異の大きい項目が自動抽出されました。
STEP 3:超過部門に自動アラートメールを送信する
予算を超過している部門の責任者に自動メールを送ります。
超過科目と金額の一覧を本文に含めてください。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
MGR = {"営業部":"sales@co.jp","開発部":"dev@co.jp","マーケ部":"mkt@co.jp"}
def alert_mail(dept, items):
rows = "".join(f"{i['科目']} {i['差異率']:.1f}% " for i in items)
html = (f"予算超過アラート: {dept}
"
f"科目 差異率 {rows}
")
msg = MIMEMultipart("alternative")
msg["Subject"] = f"【予算超過】{dept}"
msg["From"] = "finance@co.jp"
msg["To"] = MGR.get(dept,"")
msg.attach(MIMEText(html,"html","utf-8"))
with smtplib.SMTP("smtp.office365.com",587) as s:
s.starttls(); s.login("finance@co.jp","PW"); s.send_message(msg)
print(f"メール送信: {dept}")
for dept, grp in df.groupby("部門"):
over = grp[grp["差異率"]>10].to_dict("records")
if over: alert_mail(dept, over)
予算超過部門が自動検知され、各部門責任者に科目別詳細を含むアラートメールが送信されました。
STEP 4:ウォーターフォールチャートで差異を可視化する
財務分析の定番チャートを自動生成して経営会議の資料に使えるようにします。
プラスは緑、マイナスは赤で表現してください。
from openpyxl.chart import BarChart, Reference
ws_c = wb.create_sheet("差異チャート")
ws_c.append(["部門","透明ベース","増加","減少"])
base = 0
for dept, var in zip(df["部門"].unique(), df.groupby("部門")["差異"].sum()):
if var >= 0: ws_c.append([dept, base, var, 0]); base += var
else: ws_c.append([dept, base+var, 0, -var]); base += var
ws_c.append(["合計", 0, max(0,base), max(0,-base)])
chart = BarChart()
chart.type = "col"
chart.title = "部門別予算差異(ウォーターフォール)"
chart.grouping = "stacked"
chart.overlap = 100
data = Reference(ws_c, min_col=2, max_col=4, min_row=1, max_row=ws_c.max_row)
cats = Reference(ws_c, min_col=1, min_row=2, max_row=ws_c.max_row)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.series[0].graphicalProperties.solidFill = "FFFFFF"
chart.series[1].graphicalProperties.solidFill = "4CAF50"
chart.series[2].graphicalProperties.solidFill = "F44336"
chart.width=24; chart.height=14
ws_c.add_chart(chart,"F2")
wb.save("budget.xlsx")
print("ウォーターフォールチャート生成完了")
部門別差異をウォーターフォールチャートで可視化。増加(緑)・減少(赤)で差異構造が一目でわかるグラフが自動生成されました。
STEP 5:月末自動実行で月次レポートをゼロ工数に
毎月末日17時に自動実行し、翌朝には経営層のメールにレポートが届いている状態を作ります。
月次自動化スクリプトを作ってください。
import calendar
from datetime import datetime, date, timedelta
def is_month_end():
t = date.today()
last = calendar.monthrange(t.year, t.month)[1]
if t.day == last: return True
if t.weekday()==4 and last-t.day<=2: return True # 月末近くの金曜
return False
def monthly_job():
if not is_month_end(): print("月末でないためスキップ"); return
print(f"月次予算レポート開始: {datetime.now()}")
df = consolidate("./部門別予算/","budget_temp.xlsx")
format_report("budget_temp.xlsx","budget_final.xlsx")
send_cfo_summary("cfo@co.jp","budget_final.xlsx")
for dept, grp in df.groupby("部門"):
over = grp[grp["差異率"]>10].to_dict("records")
if over: alert_mail(dept, over)
print(f"完了: {datetime.now()}")
monthly_job()
# schtasks /create /tn "月次予算" /tr "python budget_auto.py" /sc DAILY /st 17:00 /f
月末判定が機能し、毎月末17時に予算実績レポートが自動生成・配信される仕組みが完成。毎月2日かかっていた作業がゼロになりました。
どんな現場で使われているか:活用シナリオ
実装で押さえるべき重要ポイント
- 1
部門Excelのフォーマット統一が最優先:各部門でExcelのフォーマットがバラバラだと統合が複雑になります。まずClaude Codeで読み取りロジックを作り、最終的にはフォーマット統一ルールを整備しましょう。
- 2
差異のしきい値は金額と率の両方を設定:「10万円以上または予算の5%以上の差異」のように、金額と率の両方でしきい値を設定するのが実務的です。絶対額が小さくても率が大きい場合を見逃さないためです。
- 3
前年同月比の自動比較を追加:今月の差異だけでなく前年同月比も自動計算・可視化することで、経営判断に使える深い分析レポートになります。
ビジネスインパクト
この記事のまとめ
- ✅ 複数部門のExcelファイルをフォルダから自動読み込み・統合できる
- ✅ 予算差異をRed/Yellow/Greenで色分けしてTop5超過部門を自動抽出できる
- ✅ 超過部門への自動アラートメールで早期対処が可能になる
- ✅ 毎月2日かかっていたレポート作成を数時間に圧縮できる
よくある質問(FAQ)
💰 この自動化を活用している業種・ケース
製造業の管理会計では、工場別・製品別の原価差異分析を月次で自動化して、採算管理の精度と速度を大幅に向上させています。
小売・チェーン店では、店舗別の売上・費用差異を本部が自動集計して、高速な経営判断を実現しています。
IT・SaaS企業では、部門別のコスト実績をクラウドコストや人件費まで自動集計して、予算消化状況をリアルタイムで可視化しています。
非営利法人・行政では、複数の事業別予算管理を自動化して、補助金・助成金の申請資料作成にかかる工数を削減しています。
予算差異分析の自動化は経営スピードの向上と管理コストの削減を同時に実現できます。
関連記事
Claude Codeの導入を、プロに任せてみませんか?
Aurant TechnologiesはClaude Code導入支援・業務自動化の専門チームです。
初回相談は無料。御社の課題をヒアリングして最適な自動化プランをご提案します。