
こんにちは!「税理士補助スタッフのしごと帖」を運営しているゆずまるです。
月次の報告で、顧問先から「この科目、なぜ増えたんですか?」と聞かれることがあります。
以前は、元帳を1つずつ開いて前月と見比べていたので、とても時間がかかっていました。そこで、仕訳一覧から科目の増減比較表を作るPythonのプログラムを用意したところ、数秒でできるようになりました。
この記事では、その仕組みの考え方と、ダミーデータですぐに試せるサンプルコードを紹介します。プログラミングに慣れていない方にも伝わるように、やっていることを順番に説明します。
この記事でわかること
- 増減理由を探す作業を、どうやって仕組みにするか
- コピーして試せるサンプルコード
- 月次報告での使い方と、気をつけていること
月次チェック全体の流れは、こちらの記事にまとめています。
増減理由を探す作業は、なぜ時間がかかるのか
手作業の場合、科目ごとに次の3つを繰り返します。
- 前月と当月の合計を比べる
- 差が大きければ、元帳を開く
- 2か月分の取引を見比べて、差の原因を探す
1科目だけなら数分ですが、科目の数だけ繰り返すと、すぐに時間が過ぎてしまいます。しかも、やっていることは毎月同じです。毎月同じ手順を繰り返す作業は、プログラムに任せやすい作業です。
仕組みはシンプルな3ステップ
- 会計ソフトから、仕訳一覧をCSVで書き出す
- 科目ごと・月ごとに金額を集計して、増減を出す
- 増減の大きい科目について、摘要ごとの差を大きい順に並べる
ポイントは3つ目です。摘要ごとに前月と当月を比べると、差の原因は次の3つのどれかに分かれます。
- 当月だけにある取引(新しい支払い、二重計上 など)
- 前月だけにある取引(今月は発生していない、入力漏れ など)
- どちらにもあるが、金額が変わった取引
ポイント
元帳を目で見比べるときにやっていることを、そのまま順番に並べただけです。難しい計算はしていません。
サンプルコード
考え方が伝わるように、短くまとめたサンプルコードです。Pythonが入っているパソコンなら、追加のインストールなしで動きます。
仕訳一覧のCSVは、次の6つの列がある想定です。列の名前は、お使いの会計ソフトに合わせて書き換えてください。
日付,借方科目,借方金額,貸方科目,貸方金額,摘要
2026/08/05,消耗品費,3300,現金,3300,文具 まるまる文具店
2026/08/10,地代家賃,110000,普通預金,110000,事務所家賃 8月分
2026/08/15,広告宣伝費,55000,普通預金,55000,Web広告
コードはこちらです。
import csv
import re
from collections import defaultdict
CSV_FILE = "shiwake.csv" # 仕訳一覧(会計ソフトから書き出したCSV)
LAST_MONTH = "2026-08" # 前月
THIS_MONTH = "2026-09" # 当月
MIN_DIFF = 5000 # この金額以上動いた科目だけ、内訳を出す
TOP = 3 # 内訳を何件まで出すか
# 貸方に出るとプラスになる科目(売上など)
CREDIT_ACCOUNTS = {"売上高", "雑収入"}
# 増減を見ない科目(現金や預金など、貸借対照表の科目)
SKIP_ACCOUNTS = {"現金", "普通預金", "売掛金", "買掛金", "未払金", "預り金"}
totals = defaultdict(lambda: defaultdict(int)) # 科目 → 月 → 金額
details = defaultdict(lambda: defaultdict(lambda: defaultdict(int))) # 科目 → 摘要 → 月 → 金額
def to_int(text):
return int(text.replace(",", "") or 0)
def clean(memo):
# 「8月分」「9月分」のような月の表記を消して、同じ取引としてまとめる
return re.sub(r"\s*\d+月分", "", memo).strip()
def add(account, month, memo, amount):
if not account or account in SKIP_ACCOUNTS:
return
if account in CREDIT_ACCOUNTS:
amount = -amount
totals[account][month] += amount
details[account][clean(memo)][month] += amount
# 文字化けするときは encoding="cp932" に変える
with open(CSV_FILE, encoding="utf-8-sig", newline="") as f:
for row in csv.DictReader(f):
month = row["日付"][:7].replace("/", "-")
if month not in (LAST_MONTH, THIS_MONTH):
continue
add(row["借方科目"], month, row["摘要"], to_int(row["借方金額"]))
add(row["貸方科目"], month, row["摘要"], -to_int(row["貸方金額"]))
rows = []
for account, by_month in totals.items():
last, this = by_month[LAST_MONTH], by_month[THIS_MONTH]
rows.append((account, last, this, this - last))
rows.sort(key=lambda r: abs(r[3]), reverse=True)
# 増減比較表をCSVに保存(Excelで開けます)
with open("zougen.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(["科目", "前月", "当月", "増減"])
writer.writerows(rows)
print(f"■ 科目の増減({LAST_MONTH} → {THIS_MONTH})")
for account, last, this, diff in rows:
print(f"{account}:{last:,} → {this:,}({diff:+,})")
print("\n■ 増減の内訳")
for account, last, this, diff in rows:
if abs(diff) < MIN_DIFF:
continue
print(f"\n【{account}】{diff:+,}円")
items = []
for memo, by_month in details[account].items():
before, after = by_month[LAST_MONTH], by_month[THIS_MONTH]
if before != after:
items.append((memo, before, after))
items.sort(key=lambda i: abs(i[2] - i[1]), reverse=True)
for memo, before, after in items[:TOP]:
if before == 0:
note = "当月のみ"
elif after == 0:
note = "前月のみ"
else:
note = f"{before:,} → {after:,}"
print(f" {after - before:+,}円 {memo}({note})")
使い方
- 上のコードを
zougen.pyという名前で保存する - 同じフォルダに、仕訳一覧のCSVを
shiwake.csvという名前で置く - コードの上のほうにある「前月」「当月」を、比べたい月に書き換える
- コマンドプロンプトでそのフォルダを開き、
python zougen.pyと入力して実行する(動かないときはpy zougen.py)
ダミーデータで動かした結果
架空の会社のデータで動かすと、次のように表示されます。同じ内容の表が zougen.csv にも保存されるので、Excelで開けます。
■ 科目の増減(2026-08 → 2026-09)
給料手当:250,000 → 430,000(+180,000)
売上高:1,210,000 → 1,320,000(+110,000)
消耗品費:3,300 → 91,080(+87,780)
広告宣伝費:55,000 → 0(-55,000)
通信費:8,800 → 17,600(+8,800)
水道光熱費:12,400 → 13,100(+700)
地代家賃:110,000 → 110,000(+0)
■ 増減の内訳
【給料手当】+180,000円
+180,000円 給与 新入社員(当月のみ)
【売上高】+110,000円
+220,000円 売上 C設計(当月のみ)
-110,000円 売上 A商事(880,000 → 770,000)
【消耗品費】+87,780円
+87,780円 プリンター購入(当月のみ)
【広告宣伝費】-55,000円
-55,000円 Web広告(前月のみ)
【通信費】+8,800円
+8,800円 インターネット利用料(8,800 → 17,600)
この結果から、たとえば次のようなことがすぐに読み取れます。
- 給料手当は、新入社員の給与が加わって増えた
- 売上高は、C設計との取引が始まり、A商事は減った
- 消耗品費は、プリンターの購入で増えた
- 広告宣伝費は、前月だけ発生している(今月は止めたのか、入力漏れなのかを確認する)
- 通信費は、同じ摘要で金額がちょうど2倍になっている(二重計上かもしれない)
元帳を開く前に、どこを確認すればよいかの当たりがつきます。
注意
文字化けやエラーになるときは、CSVの文字コードが原因のことが多いです。コードの中の utf-8-sig を cp932 に書き換えると、読めることがあります。
月次報告でどう使っているか
私は、月次報告書をお渡しするときに、「なぜこの科目が増減しているのか」をまとめたダイジェストを一緒にお渡ししています。顧問先からも「わかりやすい」と好評です。
数字の表だけだと、増えた・減ったはわかっても、理由までは伝わりません。理由が一言そえてあるだけで、報告がぐっと伝わりやすくなります。
気をつけていること
- 最後は人の目で確認する:プログラムが教えてくれるのは「差が出ている取引」までです。それが正しい処理なのか、間違いなのかは、元帳や証憑を見て人が判断します。
- 摘要の書き方をそろえる:摘要で取引をまとめているので、書き方がばらばらだと別の取引として扱われます。サンプルでは「8月分」のような表記を自動で取り除いています。
- 顧問先のデータを外に出さない:このサンプルは、手元のパソコンの中だけで動きます。AIにコードを書いてもらうときも、実際のデータは渡さず、ダミーデータで作るのがおすすめです。
まとめ
この記事のまとめ
- 増減理由を探す作業は、毎月同じ手順の繰り返しなので、プログラムに任せやすい
- 仕訳一覧を科目ごと・月ごと・摘要ごとに集計すれば、差の原因が見えてくる
- 出てきた結果は、最後に人の目で確認する
AIやプログラムで業務を楽にした全体の話は、こちらの記事に書いています。


