経理の仕訳を自動化する方法:明細CSV→ルール表→インポートまで(サンプルのCSVとコード付き)
結論
仕訳の自動化は、会計ソフトの機能で済む所を先に使い切り、それでも手で入れている「つながっていないデータ」だけをCSVで自動にします。
- 会計ソフトの機能で済む所は、口座・カードの連携と自動仕訳ルール、給与・経費からの連携、AIの候補 です
- CSVで作る所は、明細をCSVにする → ルール表で科目を付ける → 会計ソフトのインポートの形式に並べる → 取り込む前後に件数と合計を確かめる の4段です。この記事にダミーのCSVと、そのまま動く50行ほどのPythonを載せています
- 科目を付けるのは 人が決めたルール表 です。会計ソフトのAIが出す科目の候補は、人が確かめてから登録 します。どのルールにも当たらない行は、空欄のまま「要確認」に回します
一人でバックオフィスを回していて、時間がかかっていたのは経理・管理会計・仕訳で、自動化していちばん楽になったのも仕訳でした。
会計ソフトの画面名・インポートの形式は、マネーフォワード クラウド会計の公式サポートで 2026-09-25に確認 したものです。この記事のコードとCSVは、説明のために新しく書いたダミーです。勘定科目・税区分の決め方は、顧問の税理士の指示に従ってください。
この記事が役に立つ人
- 口座の連携や自動仕訳ルールを入れても、まだ毎月手で入れている仕訳がある経理担当の人
- 別のシステムの売上データや、Excelの台帳から、仕訳を1件ずつ打ち直している人
- Excelや簡単なプログラム(Python・Google Apps Script など)を少し触れる人
上位の記事と、この記事の違い
「経理 仕訳 自動化」で上位に出るのは、会計ソフト・経費精算ソフトの会社の機能紹介と、Excelのマクロで特定の会計ソフト向けの仕訳を作る実務者の記事が中心です。機能紹介は「自社のソフトで何ができるか」、マクロの記事は「そのソフトの形式にどう並べるか」に答えています。
この記事は、その間にある次の3つを扱います。
- どこまでを会計ソフトに任せ、どこからを自分で作るか の線引き
- ソフトに依存しない ルール表の作り方 と、当たらない行・2つ以上当たる行の扱い
- 取り込む前と後の確かめ方(件数・合計・期間・二重の取り込み)
自動化の4つの段:まず会計ソフトの機能を使い切る
手で入れている仕訳を、データの出どころで分けると、どこから手を付けるかが決まります。上から順に、会計ソフトの機能で済む所です。
| 段 | データの出どころ | 使う機能(マネーフォワード クラウド会計の例) | 人が見る所 |
|---|---|---|---|
| 1 | 銀行口座・カードの明細 | 明細を自動で取得し、「連携サービスから入力」画面に仕訳の候補が出る。自動仕訳ルール で、決まった明細に決まった科目を付けられる | 初めての取引先、金額の大きいもの、ルールが当たった明細 |
| 2 | 給与・経費精算 | 同じシリーズの給与・経費から、会計に仕訳が入るように連携する | 給与・経費の側で確定・承認したか、科目がずれていないか |
| 3 | 紙やPDFの領収書・請求書 | 「AI-OCRから入力」で、アップロードしたファイルから仕訳の候補を作る | 候補の中身を確かめて直してから登録する |
| 4 | どれにもつながっていないデータ(別のシステムの売上、Excelの台帳 など) | 仕訳帳のインポート(CSV) | この記事で作る所 |
- 段1の候補の科目は、システムが自動で提案するもので、画面で別の科目に変えられます(「連携サービスから入力」画面の使い方)。自動仕訳ルールの作り方とCSVでのまとめ登録は → 自動仕訳ルールの作り方
- 段3は、公式サポートでも「作成された仕訳候補の内容を確認して適宜修正」してから登録する流れになっています(「AI-OCRから入力」機能の使い方)
- マネーフォワード クラウド会計の製品ページでは、AIが勘定科目を学習して提案する機能も紹介されています(自動化の機能)。freee会計にも、明細に取引を自動で登録する「自動登録ルール」があります
私は給与・勤怠・経費から会計へ仕訳が入るように連携していました。段1〜3で減らせる所を先に減らしてから、残った段4だけを自分で作る方が、作る量も、壊れたときに直す量も小さく済みます。順番の考え方は → 仕訳の手入力を減らす順番
まだ手入力が中心で、会計ソフトの機能から見直す場合は、マネーフォワード クラウド会計・freee会計の公式サイトで、連携や自動仕訳の機能を確かめられます。
段4を自分で作る:全体の流れ
| 手順 | やること | 人が決めること |
|---|---|---|
| ① | 元のデータを「1行=1取引」のCSVにする | どのデータを対象にするか |
| ② | ルール表で、勘定科目・補助科目・税区分を付ける | ルール表の中身(税理士に確かめる) |
| ③ | 会計ソフトの仕訳のインポートの形式に並べる | 口座の科目名・補助科目名 |
| ④ | 取り込む前に、件数と合計を確かめる | 合わなければ止める |
| ⑤ | 取り込んだ後に、仕訳帳と残高で確かめる | 当たらなかった行の判断 |
①〜④はプログラムにできます。ルールを決めること、当たらなかった行を判断すること、取り込みのボタンを押すこと は人が行います。
① 元のデータをCSVにする
別のシステムの売上データ、請求の一覧、Excelの台帳などを、CSVに書き出します。この記事では、連携に対応していない口座の入出金の一覧を、次の4列のCSVにした例を使います。
日付,摘要,入金,出金
2026/9/1,クラウド会計 利用料,,3278
2026/9/5,振込 サンプル商事,110000,
2026/9/10,電話料金,,4400
2026/9/15,フリコミ ナゾノ,5000,
2026/9/25,クラウド勤怠 月額,,"1,200"
- 日付の書き方(1桁の月日)や、金額のカンマが混ざっていても、③でそろえます
- 列の名前は、元のデータに合わせて、スクリプトの列名を書き換えて使います
② ルール表で科目を付ける
「摘要にこの言葉があれば、この科目」という表を作ります。
キーワード,勘定科目,補助科目,税区分
クラウド会計,支払手数料,クラウド会計,
クラウド勤怠,支払手数料,クラウド勤怠,
勤怠,支払手数料,クラウド勤怠,
電話料金,通信費,電話,
サンプル商事,売掛金,サンプル商事,
ルール表を作るときの決まりは、次の4つです。
- 科目名・補助科目名・税区分の名前は、会計ソフトのマスターからコピーする。理由は③で説明します
- 税区分は、税理士に確かめた名前を入れる。このダミーでは空欄にしています
- 1つの行に当たるルールは1つだけ にする。上の表の「勤怠」は、わざと広く作った悪い例です。「クラウド勤怠 月額」に「クラウド勤怠」と「勤怠」の2つが当たるので、スクリプトはこの行を要確認に回します
- どのルールにも当たらない行は、科目を空欄のまま人に回す。推測で埋めません
補助科目を細かく切っておくと、ルール表の1行と、会計ソフトの1つの補助科目が対応するので、後で残高を確かめやすくなります。私はマネーフォワードで補助科目を細かく使っていました(ツールごと、借入ごと)。補助科目の切り方は → マネーフォワードの補助科目の使い方
③ 会計ソフトのインポートの形式に並べる
マネーフォワード クラウド会計では、「会計帳簿」>「仕訳帳」画面の「インポート」から、「サンプルフォーマットをダウンロード」 ボタンでひな形を取得できます。公式サポートでは、必ずこのサンプルフォーマットを使う ように案内されています(「仕訳帳」をインポートする)。
同じページで確かめた、作るときに効いてくる決まりは次のとおりです(2026-09-25時点)。
| 項目 | 決まり |
|---|---|
| 列の並び | 取引No・取引日・借方(勘定科目・補助科目・部門・取引先・税区分・インボイス・金額(円)・税額)・貸方(同じ並び)・摘要・仕訳メモ・タグ・MF仕訳タイプ・決算整理仕訳。この後ろの作成日時・作成者・最終更新日時・最終更新者は入力しない |
| 1行目 | ラベル行として扱われるので、編集しない |
| 必須 | 取引日・勘定科目・金額(複合仕訳で空欄になる場合を除く) |
| 取引日 | yyyy/MM/dd の形。会計年度内の日付だけ 取り込める |
| 取引No | 9桁以内の数字。取引No・取引日が同じで、貸借の合計が合う行は、1つの複合仕訳になる。その年度ですでに使われている番号のときは、「最大取引No+1」の番号で取り込まれる |
| インボイス | 空欄でも取り込めるが、空欄は「適格」として判定される |
| 名前の突き合わせ | 勘定科目・補助科目・部門・取引先・税区分は、登録済みの名前と 完全に一致 しているかで見る |
| 取り込みのたびに | 新しい仕訳として登録される。登録済みの仕訳を上書きで直すことはできない |
名前が一致しないと、どうなるか
名前が一致しなくても、取り込みは止まりません。取り込みの途中で「勘定科目の設定」などの画面が出て、「追加」か「変換」を選べます。何も選ばないと、勘定科目は「未確定勘定」、補助科目は「補助科目なし」、税区分はその勘定科目の既定の税区分として取り込まれ、元の名前は仕訳のメモ欄に残ります。また、「変換」で選んだ内容は次回のインポートに引き継がれません。
つまり、表記が1文字違うだけで、毎月同じ変換の操作をするか、見落として未確定勘定のまま残るか になります。ルール表の名前をマスターからコピーするのは、このためです。
名前の不一致とは別に、私はマネーフォワードに仕訳を取り込んだとき、CSVの形式の違いで止まったことがあります。止まったときの確かめ方は → 仕訳のインポートが止まるとき
変換するスクリプト(Python・標準ライブラリだけ)
①の明細と②のルール表から、仕訳帳の形式のCSV(仕訳_取込用.csv)と、人が見る一覧(要確認.csv)を作ります。Python 3 が入っていれば、追加のインストールなしで動きます。
#!/usr/bin/env python3
# 明細CSV → ルール表で科目を付ける → 仕訳インポート用CSV+要確認CSV
# 使い方: python3 shiwake.py 明細.csv ルール.csv
import csv, sys
from decimal import Decimal, InvalidOperation
BANK, BANK_SUB = "普通預金", "サンプル銀行" # 明細の口座(自社のマスターの名前に直す)
ENC = "utf-8-sig" # サンプルフォーマットの文字コードに合わせる
COLS = ["取引No", "取引日", "借方勘定科目", "借方補助科目", "借方部門", "借方取引先", "借方税区分",
"借方インボイス", "借方金額(円)", "借方税額", "貸方勘定科目", "貸方補助科目", "貸方部門",
"貸方取引先", "貸方税区分", "貸方インボイス", "貸方金額(円)", "貸方税額", "摘要",
"仕訳メモ", "タグ", "MF仕訳タイプ", "決算整理仕訳"]
def yen(s):
s = (s or "").replace(",", "").strip()
return Decimal(s) if s else Decimal(0)
def read(path):
with open(path, encoding="utf-8-sig", newline="") as f:
return list(csv.DictReader(f))
try:
meisai, rules = read(sys.argv[1]), read(sys.argv[2])
out, review, total = [], [], Decimal(0)
for m in meisai:
y, mo, d = m["日付"].replace("-", "/").split("/")
day = f"{int(y):04d}/{int(mo):02d}/{int(d):02d}" # yyyy/MM/dd にそろえる
inn, outt = yen(m["入金"]), yen(m["出金"])
total += inn + outt
hits = [r for r in rules if r["キーワード"] and r["キーワード"] in m["摘要"]]
if len(hits) != 1: # 当たらない・2つ以上当たる → 人が見る
review.append({**m, "理由": "ルールなし" if not hits else "ルールが2つ以上"})
continue
r = hits[0]
row = dict.fromkeys(COLS, "")
row.update({"取引No": len(out) + 1, "取引日": day, "摘要": m["摘要"]})
other = (r["勘定科目"], r["補助科目"], r["税区分"])
mine = (BANK, BANK_SUB, "")
dr, cr = (other, mine) if outt else (mine, other) # 出金は相手の科目が借方
for side, (acct, sub, tax) in (("借方", dr), ("貸方", cr)):
row.update({side + "勘定科目": acct, side + "補助科目": sub,
side + "税区分": tax, side + "金額(円)": inn or outt})
out.append(row)
# 取り込む前の検算:件数と合計が元の明細と合わなければ書き出さない
n_ok = len(out) + len(review) == len(meisai)
s_ok = sum(Decimal(r["借方金額(円)"]) for r in out) + sum(yen(r["入金"]) + yen(r["出金"]) for r in review) == total
if not (n_ok and s_ok):
sys.exit("件数か合計が合いません。書き出しを止めました")
with open("仕訳_取込用.csv", "w", encoding=ENC, newline="") as f:
w = csv.DictWriter(f, COLS); w.writeheader(); w.writerows(out)
with open("要確認.csv", "w", encoding="utf-8-sig", newline="") as f:
w = csv.DictWriter(f, list(meisai[0]) + ["理由"]); w.writeheader(); w.writerows(review)
print(f"明細 {len(meisai)}件 = 取込用 {len(out)}件 + 要確認 {len(review)}件/合計 {total}円 一致")
except (OSError, KeyError, ValueError, IndexError, InvalidOperation) as e:
sys.exit(f"止めました(ファイル名・列名・日付・金額を確かめてください): {e!r}")
使う前に書き換える所は3つです。
BANK・BANK_SUB:明細の口座の勘定科目・補助科目。マスターの名前をそのまま入れるENC:公式サポートのページに文字コードの記載がなかったので、ダウンロードしたサンプルフォーマットと同じ文字コード にします(Shift_JIS なら"cp932")COLS:2026-09-25時点のサンプルの列です(入力しない作成日時などの4列は省いています)。ダウンロードしたサンプルの1行目と見比べて、違っていれば直します
実行した結果
$ python3 shiwake.py 明細.csv ルール.csv
明細 5件 = 取込用 3件 + 要確認 2件/合計 123878円 一致
仕訳_取込用.csv(空の列が多いので、先頭の列だけ抜き出しています):
| 取引No | 取引日 | 借方勘定科目 | 借方補助科目 | 借方金額(円) | 貸方勘定科目 | 貸方補助科目 | 貸方金額(円) | 摘要 |
|---|---|---|---|---|---|---|---|---|
| 1 | 2026/09/01 | 支払手数料 | クラウド会計 | 3278 | 普通預金 | サンプル銀行 | 3278 | クラウド会計 利用料 |
| 2 | 2026/09/05 | 普通預金 | サンプル銀行 | 110000 | 売掛金 | サンプル商事 | 110000 | 振込 サンプル商事 |
| 3 | 2026/09/10 | 通信費 | 電話 | 4400 | 普通預金 | サンプル銀行 | 4400 | 電話料金 |
要確認.csv:
| 日付 | 摘要 | 入金 | 出金 | 理由 |
|---|---|---|---|---|
| 2026/9/15 | フリコミ ナゾノ | 5000 | ルールなし | |
| 2026/9/25 | クラウド勤怠 月額 | 1,200 | ルールが2つ以上 |
「フリコミ ナゾノ」は中身の分からない入金なので、人が確かめてから、ルールを足すか、その1件だけ手で入れます。「クラウド勤怠 月額」は、広すぎる「勤怠」のルールを消せば、次からは取込用に入ります。
スクリプトでしていないこと
- 科目の推測はしません。当たらない行は、空欄で出すのではなく、取込用のファイルに入れずに要確認に分けています。空欄のまま取り込むと、必須の勘定科目が欠けるためです
- 税区分は、ルール表に書いた名前をそのまま出すだけ です。空欄のときにどう取り込まれるかは、まず1か月分で試して、仕訳帳で確かめてください
- インボイスの列は空欄のまま です。空欄は「適格」として判定されます(③の注意)。適格請求書発行事業者でない相手がいるときは、税理士に確かめたうえで、ルール表にインボイスの列を足して書き出します
- 1つの明細を複数の科目に分ける(複合仕訳)ことはしていません。必要なら、同じ取引No・取引日で行を分けて書き出します
Google Apps Script や Excel でも、同じ考え方(ルール表を上から当てる → 当たらない行は別の表へ → 件数と合計を比べる)で作れます。
④ 取り込む前に確かめる
スクリプトの検算は、変換の途中で行が消えたり、金額が変わったりしていないか を見るものです。これに加えて、取り込む前に次を確かめます。
| 確かめること | 見方 | 合わないとき |
|---|---|---|
| 件数 | 元の明細の行数 = 取込用 + 要確認 | 取り込まない。元のデータの書き出しからやり直す |
| 合計 | 元の明細の入金・出金の合計 = 取込用 + 要確認の合計 | 取り込まない |
| 期間 | 取込用の日付が、すべて今の会計年度の中にあるか | 年度をまたぐ分は分ける。年度外の日付は取り込めない |
| 二重 | その月の分を、前に取り込んでいないか | 取り込まない。インポートは毎回新しい仕訳として登録される |
| 名前 | ルール表を直したとき、マスターからコピーした名前か | 取り込みの途中で設定の画面が出たら、そこで止めて直す |
二重の取り込み は、自分で作るときに特に起きやすい所です。上の表のとおり、インポートは毎回新しい仕訳として入るので、同じファイルを2回取り込めば、同じ仕訳が2つできます。取り込んだファイルは「2026-09_取込済.csv」のように名前を変えて別の場所に移し、月ごとに取り込んだ日をチェック表に書いておくと防げます。
⑤ 取り込んだ後に確かめる
取り込みが終わったら、公式サポートの手順どおり、「仕訳帳」画面で仕訳が正しく入ったかを見ます。そのうえで、次の2つを見ます。
- 未確定勘定が増えていないか。増えていれば、名前が一致しなかった行があります。メモ欄に元の名前が残っているので、ルール表の名前をマスターに合わせて直します
- 口座の残高が、通帳・ネットバンキングの月末の残高と合うか。合わなければ、その口座の分に、漏れか二重の取り込みがあります。仕訳帳を日付順に見て、通帳と1件ずつ突き合わせます
要確認に回した行を人が判断して入れ終わるまでが、その月の作業です。月次の締めの中での位置づけは → 一人経理の月次の締め
どこまで自動にするか
| 自動にしてよい所 | 人が行う所 |
|---|---|
| 元のデータの書き出し、形式の変換、日付・金額のそろえ | ルール表の中身を決める(税理士に確かめる) |
| ルール表の当てはめ、要確認の一覧づくり | 要確認の行を判断する |
| 件数・合計・期間の検算 | 取り込みのボタンを押す、取り込み後に残高を見る |
| 会計ソフトのAIが出す科目の候補 | 候補が合っているかを確かめてから登録する |
ルール表は、作った人しか中身を知らない状態になりやすい所です。なぜそのルールにしたか(税理士に確かめた日など)を、ルール表の横に1列足して残しておく と、休むときや引き継ぐときに、そのまま渡せます。一人で回して「先にやっておけばよかった」と思ったのは業務フローのルール化で、ルール表はその一部になります → 業務フローのルール化
つまずきやすい所
- ルールの言葉を短くしすぎる — 関係のない明細にも当たります。スクリプトの「ルールが2つ以上」で見つけられます
- 名前の表記の揺れ — 取り込みは進んでも、未確定勘定や補助科目なしで入ることがあります。名前はマスターからコピーします
- 同じ月を2回取り込む — インポートは上書きではなく追加です。取り込んだファイルは名前を変えて移します
- 年度をまたぐ日付 — 会計年度の外の日付は取り込めません
- サンプルフォーマットが変わる — 取り込む前に、サンプルの1行目とスクリプトの列を見比べます
- 税区分を自分で決めてしまう — 迷うものは印をつけて、税理士にまとめて聞きます
よくある質問
プログラムが書けなくても自動にできますか
段1〜3(口座・カードの連携、自動仕訳ルール、給与・経費からの連携、AI-OCR)は、会計ソフトの設定だけで使えます。段4も、Excelで「ルール表を当てる列」と「件数・合計を比べるセル」を作れば、同じ考え方で回せます。
AIに科目を付けさせてもいいですか
会計ソフトのAIの候補は、使ってかまいません。ただし、候補は候補として扱い、人が確かめてから登録 します。公式サポートでも、候補を確認・修正してから登録する流れになっています。自分で作るスクリプトの中では、当たらない行を推測で埋めずに、要確認に回す方が、間違いに気づけます。
マネーフォワード以外の会計ソフトでも使えますか
①②と、④⑤の確かめ方は、そのまま使えます。③の列の並び・日付の形・名前の突き合わせ方はソフトごとに違うので、使っている会計ソフトのヘルプで、仕訳(取引)のインポートの形式を確かめて、COLS と書き出しの部分を合わせます。
口座の明細も、このスクリプトで取り込んだ方が早いですか
連携できる口座なら、段1(連携と自動仕訳ルール)の方が、取り込みの手間がかかりません。このスクリプトは、連携できないデータのために使います。同じ口座を連携とCSVの両方で入れると同じ仕訳が2つできるので、口座ごとにどちらか一方に決めます。連携が止まった間だけCSVで入れたときは、連携が戻ったあとに同じ期間の明細が重ならないか確かめます。自動仕訳ルールをCSVでまとめて管理する方法は → 自動仕訳ルールの作り方
まとめ
- 仕訳の自動化は、会計ソフトの機能で済む所を先に使い切り、つながっていないデータだけを自分で作る
- 自分で作る所は、明細CSV → ルール表 → インポートの形式 → 取り込む前後の確認
- 科目は ルール表で決める。当たらない行・2つ以上当たる行は 要確認へ。AIの候補は 人が確かめてから登録
- マネーフォワード クラウド会計のインポートは、名前の完全一致 で突き合わせ、毎回追加 で入る。名前はマスターからコピーし、同じ月を2回入れない