銀行明細CSVを仕訳データへ自動変換するツールの作り方

業務改善

毎月の月末、ネットバンキングから明細をダウンロードして、1行ずつ確認しながら会計ソフトへ手入力していませんか。実はその作業、仕組み化できることを知らないだけかもしれません。

この記事では、銀行明細CSV(Excelなどで開ける表形式のファイル)を読み込ませると仕訳形式のCSVに変換されるツールの作り方を紹介します。非エンジニアの方でもAIの力を借りて実践できる形で、作るもの・必要なもの・手順・つまずきやすい注意点までを一通り押さえます。

この記事で作るもの/ビフォーアフター

作るのは、銀行明細CSVを読み込ませると、勘定科目の目星がついた仕訳形式のCSVに変換してくれるツールです。

  • Before:ネットバンキングから明細CSVをダウンロードし、1行ずつ内容を確認しながら会計ソフトへ手入力。月末はこれだけで数時間かかります。
  • After:CSVをツールに読み込ませると、勘定科目の候補付きで仕訳形式のCSVが数秒で出力されます。最後は人が数分でチェックするだけです。

断っておくと、これは「全自動」の仕組みではありません。位置づけとしては、あくまで「下書きを自動で作る」ツール。最終チェックは必ず人が行う前提で設計します。

銀行明細CSV変換のビフォーアフター(手入力で数時間→ツールで数秒+人のチェック数分)を示す図

必要なもの・前提

  • Windows PC(普段お使いのもので構いません)
  • Python(無料で使えるプログラミング言語)
  • AIチャットツール(ChatGPTやClaudeなど。コードを書く部分を手伝ってもらいます)
  • 銀行・カードのネットバンキングからダウンロードできる明細CSV
  • 会計ソフト側の仕訳インポート用CSVフォーマット(freee・マネーフォワード・弥生などで列構成が異なります)
  • pandas(表データを扱うためのPythonの追加ライブラリ。標準では入っていないため別途インストールが必要です)

pandasなどの追加ライブラリの導入も、つまずいたらAIチャットに聞きながら進めれば迷いません。コードを書くこと自体が初めてでも大丈夫。AIと対話しながらプログラムを組み立てる「バイブコーディング」という考え方が助けになります。非エンジニア向けの入門編は近日公開予定。

Google Workspaceを使っている会社には、GASという代替案もあります。GASとは、Googleスプレッドシート等を自動化するGoogle Apps Scriptの略称。ここではPythonでの作り方に絞って解説します。

なお、明細データを外部のクラウドAIに見せるのが不安な場合は、社内だけで処理が完結するローカルLLM入門という選択肢もあります。

作り方のステップ

  1. Step1:銀行明細CSVのフォーマットを確認する
    自分の銀行・カードの明細CSVを一度開いてみましょう。文字コード(文字をコンピューターが認識するための符号化方式)、列の並び、不要なヘッダー行や合計行の有無を確認します。ここを飛ばすと、後の処理でつまずきます。

  2. Step2:CSVを読み込む処理を作る
    Pythonの表計算ライブラリ「pandas」を使い、CSVを読み込んで列名を統一します。

import pandas as pd

# 銀行明細CSVを読み込む(文字コードは事前に確認。ここではShift-JISの例)
df = pd.read_csv("bank_statement.csv", encoding="shift_jis")

# 列名を自社ルールに合わせて統一する
df = df.rename(columns={"取引日": "date", "摘要": "description", "出金金額": "amount"})
  1. Step3:摘要から勘定科目候補を紐づける対応表を作る
    最初はシンプルな対応表(辞書)方式で十分。摘要に特定の文字列が含まれていたら、対応する勘定科目を返す仕組みにします。精度を上げる発展形は、この後の記事③で扱う予定です。なお、実際の明細データでは摘要が空欄の行も珍しくありません。空欄のままだとエラーになるため、事前に空文字で埋めておきます。
# 摘要のキーワードと勘定科目の対応表(最初はシンプルに)
account_rules = {
    "電気": "水道光熱費",
    "家賃": "地代家賃",
    "〇〇銀行": "支払手数料",
}

def guess_account(description):
    for keyword, account in account_rules.items():
        if keyword in description:
            return account
    return "要確認"  # 対応表にないものは人が見る

df["description"] = df["description"].fillna("")  # 摘要が空の行を空文字に(エラー防止)
df["account"] = df["description"].apply(guess_account)
  1. Step4:会計ソフトの仕訳インポート形式に変換して書き出す
    使っている会計ソフトの列構成に合わせて並べ替え、ファイルに書き出します。
output = df[["date", "account", "description", "amount"]]
output.to_csv("journal_entries_draft.csv", index=False, encoding="utf-8-sig")
  1. Step5:自社の実データで試し、対応表を育てていく
    最初は「要確認」だらけかもしれません。それでも問題なし。実データで試しながらルールを1つずつ足していくと、数ヶ月で見違えるほど精度が上がっていきます。

銀行明細CSVを仕訳データへ変換するツールの作り方5ステップのフロー図

つまずきやすい注意点

  • 文字コードの違い:Shift-JISで文字化けする、UTF-8で開き直す必要がある、といったことがよく起きます。encoding="shift_jis"でUnicodeDecodeErrorが出た場合は、encoding="cp932"(丸数字など一部の記号に対応した文字コード)を試すと解決することがあります
  • 銀行ごとの列順・ヘッダーの違い:銀行によってCSVの列順や不要な合計行の位置がバラバラです
  • 摘要の表記ゆれ:同じ取引先でも毎回微妙に文言が違うため、一発で完璧なルールは作れません
  • 「1つのルールで全部を賄おうとしない」のがコツです。対応表にない摘要は「要確認」のまま残し、例外は人が見る前提で設計してください。

免責・専門家確認

  • 勘定科目の最終判断・税務上の扱いは、必ず顧問税理士に確認してください
  • 自動変換した仕訳はあくまで「下書き」です。人の目で必ずダブルチェックしてから会計ソフトに反映する運用にしてください

まとめ

手入力の数時間が、下書きづくり数秒+人によるチェック数分に変わる。それがこのツールのビフォーアフターです。対応表は一度作って終わりではなく、実際の運用の中で少しずつ育てていくものだと考えてください。

次の行動としては、まず1ヶ月分の明細データだけで試してみることをおすすめします。いきなり全社導入を目指す必要はありません。

経理を自動化できるアイデアの全体像は「中小企業の経理を自動化するアイデア20選」(一覧に戻る)でまとめています。

精度をさらに上げたい方には、ローカルLLMを使って勘定科目の提案や異常検知をする続編(③)を用意しています。

自社のCSVフォーマットに合わせて一緒に作ってほしい、という方はお気軽にご相談ください。

コメント

タイトルとURLをコピーしました