複数の銀行口座の入出金を毎日集めて、口座間の資金移動の指示案まで作る
複数の銀行口座の残高と入出金明細を毎朝集め、摘要から相手先と取引区分を判別して、当日の支払予定と照らした口座別の過不足を出します。担当者の作業は、各行のサイトを回って集計することから、過不足の一覧を見て資金移動を決めることに変わります。
- 利用ツール
- ChatGPT/Claude/Gemini/Google Apps Script/Power Automate/Python
- 対象業界
- 商社/小売/建設/物流/製造
- 対象部門
- 経理/財務
- 対象業務
- データ入力・転記/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 分類
- 主な効果
- 判断支援/属人化解消/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 朝、各行のインターネットバンキングに順にログインする
- 12口座の前日残高と、当日朝の入出金明細を画面から拾う
- 表計算ソフトの残高一覧に手で転記する
- 入金明細の摘要を見て、どの取引先からの入金かを判断する
- 会計システムの売掛金一覧と突き合わせ、消込の対象を確認する
- 当日と翌営業日の支払予定(手形、振込、口座振替、給与、税金)を確認する
- 口座ごとの過不足を計算する
- 不足する口座へ、余裕のある口座から振り替える指示を作る
- 上長の承認を受け、インターネットバンキングで振替を実行する
- 自動毎営業日の朝、各口座の残高と入出金明細を取り込む
- 自動明細の摘要から、相手先と取引区分(売掛回収/仕入支払/経費/振替/利息/その他)を判別する
- 自動売掛金一覧と照らして、消込の候補を付ける
- 自動販売管理システムと会計システムから、当日・翌営業日の支払予定を集める
- 自動口座ごとに「当日の予定を差し引いた後の残高」を計算する
- 自動不足する口座と余裕のある口座を突き合わせ、資金移動の案を作る
- 自動判別できなかった明細を、要確認として一覧に出す
- 人資金担当が過不足の一覧を見て、資金移動を決める
- 人上長の承認を受け、インターネットバンキングで振替を実行する
各工程の詳しい説明を読む
- 朝、各行のインターネットバンキングに順にログインする
- 12口座の前日残高と、当日朝の入出金明細を画面から拾う
- 表計算ソフトの残高一覧に手で転記する
- 入金明細の摘要を見て、どの取引先からの入金かを判断する
- 会計システムの売掛金一覧と突き合わせ、消込の対象を確認する
- 当日と翌営業日の支払予定(手形、振込、口座振替、給与、税金)を確認する
- 口座ごとの過不足を計算する
- 不足する口座へ、余裕のある口座から振り替える指示を作る
- 上長の承認を受け、インターネットバンキングで振替を実行する
問題は4つあります。
(a)ログインして回るだけで時間がかかる。 5行分のログイン(ワンタイムパスワードの入力を含む)と画面の遷移だけで、15分前後かかります。
(b)摘要の読み取りが属人化している。 振込名義は半角カナで略されており、正式名称と一致しません。ベテランは見た瞬間に分かりますが、代わりの担当者には分かりません。担当者が休むと、その日の資金繰りが止まります。
(c)判断の根拠が残らない。 「なぜその日にその金額を振り替えたのか」は記録されていません。翌月に見返しても再現できません。
(d)当座貸越の利息が出ている。 移動の判断が遅れて、ある口座が一時的にマイナスになることがあります。別の口座に十分な残高があっても、気づかなければ利息が発生します。
- 【自動】 毎営業日の朝、各口座の残高と入出金明細を取り込む
- 【自動】 明細の摘要から、相手先と取引区分(売掛回収/仕入支払/経費/振替/利息/その他)を判別する
- 【自動】 売掛金一覧と照らして、消込の候補を付ける
- 【自動】 販売管理システムと会計システムから、当日・翌営業日の支払予定を集める
- 【自動】 口座ごとに「当日の予定を差し引いた後の残高」を計算する
- 【自動】 不足する口座と余裕のある口座を突き合わせ、資金移動の案を作る
- 【自動】 判別できなかった明細を、要確認として一覧に出す
- 【人】 資金担当が過不足の一覧を見て、資金移動を決める
- 【人】 上長の承認を受け、インターネットバンキングで振替を実行する
自動化されるのは「集める」「摘要を読む」「突き合わせる」「過不足を計算する」「案を作る」の5つです。残るのは、資金移動を決めることと、実行することです。
02今回想定するシステム構成
各行のインターネットバンキング / 全銀形式の入出金明細ファイル │ (API連携が使える行はAPI、使えない行はファイルの取り込み) ▼ 明細の取り込みフォルダ(Google ドライブ) │ ▼【トリガー】時間主導型トリガー(毎営業日 8:00) Google Apps Script │ ├──▶ 明細を正規化(日付・金額・摘要・口座) │ ├──▶ Claude API ── 摘要から相手先と取引区分を判別 │ ├──▶ 取引先マスタ・売掛金一覧と照合(Google スプレッドシート) │ ├──▶ 支払予定を取得(販売管理システム / 会計システムのエクスポート) │ ├──▶ 口座別の過不足を計算 │ └──▶ 資金ポジション表(スプレッドシート)を作成 │ ▼ 資金担当が確認 ──【人】資金移動を決める │ ▼ 上長が承認 ──【人】 │ ▼ インターネットバンキングで振替を実行 ──【人】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Python、Power Automate |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 集計 | Google スプレッドシート | Excel |
| 保管 | Google ドライブ | SharePoint、Box |
資金管理システム(CMS)や、金融機関が提供する複数行の残高照会サービスがあるなら、まずそちらを検討してください。 複数の銀行の残高を1画面で見る機能は、既製のサービスが持っています。自前で組む価値があるのは、「摘要から取引区分を判別して、自社の支払予定と突き合わせる」部分です。
振替の実行は、どの構成でも自動化しません。 理由は後述します。
03どうやって実装するのか
処理の起点を決める
毎営業日の決まった時刻(朝8時)を起点にします。Google Apps Script の時間主導型トリガーは、1分おきから月1回までの間隔でスクリプトを実行できます。日次の実行はこの範囲に収まります。
営業日の判定を必ず入れてください。 土日祝に実行すると、前営業日の明細を重複して取り込むことになります。祝日は年によって変わるため、カレンダーのシートを持つか、カレンダーサービスを参照します。
入金が午後に反映される銀行があるため、朝だけでなく午後にもう一度実行する構成も考えられます。 ただし最初は朝1回で始め、必要が出てから増やしてください。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 口座残高 | 口座ごとの前日残高・当日残高 | 各行のAPIまたは明細ファイル |
| 入出金明細 | 日付、金額、入出金区分、摘要(振込依頼人名など) | 同上 |
| 取引先マスタ | 正式名称、振込名義(半角カナ)、取引先コード | スプレッドシート |
| 売掛金一覧 | 取引先、請求番号、請求額、入金予定日 | 会計システムのエクスポート |
| 支払予定 | 支払先、金額、支払日、支払方法、引落口座 | 販売管理システム・会計システム |
| 口座マスタ | 口座の用途、最低維持残高、当座貸越の枠 | スプレッドシート |
データの取得方法を決める
入出金明細: 銀行によって取得方法が違います。3通りを想定します。
| 方式 | 内容 |
|---|---|
| API連携 | 銀行が提供するAPIで残高と明細を取得する。利用可否と手続きは銀行に確認する |
| ファイル取り込み | インターネットバンキングから全銀形式またはCSVで明細をダウンロードし、フォルダへ置く |
| 手作業 | 上記が使えない口座は、担当者が画面から転記する |
すべての口座をAPIにする必要はありません。 残高の大きい主要口座だけAPIにして、残りはファイル取り込みでも、この構成は成立します。利用可否と費用は銀行ごとに異なるため、個別に確認してください。
取引先マスタ: 振込名義(半角カナ)の列を持たせることが要です。「カ)マルマルショウジ」と「株式会社マルマル商事」を結びつける表がないと、AIも判別できません。この列は最初は空でも構いません。 運用しながら、判別できなかった明細を人が確定するたびに追記していきます。
支払予定: 会計システムから日次でエクスポートします。手形の期日、口座振替の引落日、給与、税金・社会保険料を漏らさないでください。 月末に集中するこれらを見落とすと、過不足の計算が意味をなしません。
AIへ渡す前に整形する
- 明細の正規化 … 銀行ごとに違うCSVの列を、共通の形(日付/口座/入出金/金額/摘要)に直します
- 重複の除去 … 同じ明細を2回取り込まないよう、「口座+日付+金額+摘要」で既存データと照合します
- 半角カナの正規化 … 摘要の半角カナを全角に直し、記号(
().など)を統一します。この処理だけで、機械的に一致する明細が大きく増えます - 機械的に一致するものの先行処理 … 取引先マスタの振込名義と完全一致する明細は、AIを通さずに確定します。全明細をAIに渡す必要はありません。 費用も処理時間も減ります
AIに処理させる
前処理で機械的に一致しなかった明細だけをAIへ渡します。月1,800明細のうち、実際に渡るのは2〜3割程度のはずです。
| 処理 | 内容 |
|---|---|
| 相手先の推定 | 略された振込名義から、取引先マスタの候補を挙げる |
| 取引区分の判別 | 売掛回収/仕入支払/経費/口座間振替/利息・手数料/税金・社会保険/給与/その他 |
| 消込候補の提示 | 金額と相手先から、売掛金一覧の該当しそうな請求を挙げる |
| 分割・合算の検出 | 1件の入金が複数請求の合算である、1請求が分割入金されている、といった形を指摘する |
| 確信度 | high / medium / low |
金額の計算はAIにさせません。 過不足の計算、合算の検算はすべて表計算側で行います。AIにさせるのは「この明細は何か」という区分づけだけです。
指示内容を固定する
あなたは財務部の資金担当を支援する担当者です。
銀行の入出金明細の摘要から、相手先と取引区分を判別してください。
【厳守事項】
- 金額、日付、口座番号を書き換えないでください。明細の値をそのまま引き継いでください。
- 相手先は、下の取引先マスタにあるものからのみ選んでください。
マスタに候補がない場合は counterparty_code を null にし、
reason に摘要のどの部分が手がかりになったかを書いてください。
**新しい取引先を作らないでください。**
- 取引区分は、下の区分一覧からのみ選んでください。判断できない場合は「その他」にし、
confidence を low にしてください。
- 消込候補は、下の売掛金一覧に存在する請求からのみ挙げてください。
金額が一致しない場合でも、合算・分割の可能性があれば候補として挙げ、
match_type に「合算」「分割」と書いてください。
- 金額の計算をしないでください。合計や差額を出さないでください。
- 推測で取引の内容を補わないでください。摘要に書かれた文字だけを手がかりにしてください。
【取引区分の一覧】
売掛回収 / 仕入支払 / 経費 / 口座間振替 / 利息・手数料 / 税金・社会保険 / 給与 / その他
【判別する明細】
{transactions}
【取引先マスタ(正式名称 / 振込名義 / コード)】
{counterparty_master}
【売掛金一覧(未消込・相手先と金額が近いもの)】
{receivables}
「新しい取引先を作らない」の1行が重要です。 これを書かないと、AIは摘要をそのまま取引先名として返します。存在しない取引先コードが台帳に入ると、後の集計がすべて狂います。
出力形式を固定する
{
"transaction_id": "",
"account_code": "",
"value_date": "",
"direction": "in | out",
"amount": 0,
"raw_description": "",
"counterparty_code": "",
"counterparty_name": "",
"category": "売掛回収 | 仕入支払 | 経費 | 口座間振替 | 利息・手数料 | 税金・社会保険 | 給与 | その他",
"matched_receivables": [
{ "invoice_no": "", "amount": 0, "match_type": "完全一致 | 合算 | 分割" }
],
"confidence": "high | medium | low",
"needs_review": [],
"reason": ""
}
JSON Schema を指定して出力を固定します。Claude API では output_config.format に json_schema を渡すことで、応答をスキーマに沿った形に制約できます。
金額は数値で受け取り、AIが返した値と元の明細の値が一致するかを機械で検算してください。 書き換えないよう指示していても、検算は必ず入れます。一致しなければその明細を破棄して人へ回します。
システムへ連携する
判別結果と口座残高から、資金ポジション表をスプレッドシートに作ります。Apps Script は SpreadsheetApp でシートの範囲を読み書きできるため、行の追記と書式の設定はスクリプト内で完結します。
表の構成は次のとおりです。
| シート | 中身 |
|---|---|
| 口座別サマリー | 口座ごとの当日残高、当日の支払予定、差引後残高、最低維持残高との差 |
| 資金移動の案 | 不足口座、充当元口座、金額、理由 |
| 明細一覧 | 判別結果つきの全明細。confidence が low の行に色を付ける |
| 要確認 | 相手先が特定できなかった明細、金額の検算が合わなかった明細 |
資金移動の案は「案」として出すだけです。 振替の実行データを作ったり、インターネットバンキングへ送ったりはしません。
消込候補は、会計システムへ自動反映しません。入金消込の確定は、別の業務として人が行う前提です。 ここではあくまで「この入金はこの請求らしい」という情報を、資金担当が相手先を特定するための手がかりとして使います。
人が確認する
資金移動は、全件、人が決めます。承認も人が行います。
理由は、金銭の移動を伴うためです。この構成で減らしているのは「集めて読んで計算する時間」であって、「いくら動かすかを決める責任」ではありません。
確認を速くするための設計が効きます。
- 口座別サマリーを、差引後残高が少ない順に並べる
- 最低維持残高を下回る口座を赤で表示する
- 当座貸越の枠に入る見込みの口座を最上部に出す
confidenceが low の明細の件数を、サマリーの先頭に出す(多い日は過不足の計算自体が怪しい)- 前日に人が確定した相手先を、取引先マスタへ追記する導線を作る
最後の項目が、運用の質を決めます。判別できなかった明細を人が確定するたびにマスタが育ち、翌月以降の判別率が上がります。 この仕組みを入れないと、いつまでも同じ明細で迷います。
例外に対処する
| 起きること | 対応 |
|---|---|
| 銀行のサイトが一時的に使えない | その口座を「取得できず」として表示する。古い残高を最新として表示しない |
| 明細の取り込みが重複した | 「口座+日付+金額+摘要」で重複を検出し、後から来たものを破棄する |
| 相手先が特定できない | counterparty_code を null にして要確認へ。推測で当てない |
| AIが返した金額が元と違う | 検算で検出し、その明細を破棄して人へ回す |
| 1件の入金が複数請求の合算 | match_type を「合算」として候補を並べる。消込の確定は人が行う |
| 新規取引先からの入金 | 要確認へ。人が確定してから取引先マスタへ追記する |
| 祝日に実行された | 営業日判定でスキップする |
| 支払予定のエクスポートが失敗した | 過不足の計算を行わず、残高一覧だけを表示する。 支払予定なしの過不足は誤った数字になる |
| 月末に支払が集中して不足口座が多数出る | 案を出すだけにとどめ、優先順位は人が決める。自動で配分しない |
| 外貨預金口座がある | この構成の対象外とする。為替の評価が必要なため別扱いにする |
記録を残す
この業務のログは、資金の動きの説明責任に直結します。
- 取り込んだ明細の原本(銀行から取得したファイルまたはAPIの応答)
- 判別結果(相手先、区分、
confidence) - 人が修正した相手先・区分と、修正前後の値
- 資金ポジション表の日次スナップショット
- 資金移動の案と、実際に実行した内容の差
- 承認者、承認日時
「案と実際の差」を残すことに意味があります。 案のとおりに動かさなかった日が続くなら、案の作り方に前提の抜けがあります。
日次スナップショットは、後から「その日、なぜその判断をしたか」を再現する材料になります。月次で圧縮して保管しても構いません。
04実装レベルの3段階
半自動化の時点で、45分が18分程度になります。 摘要の読み取りと過不足の計算が消えるためです。本格構成では13分になりますが、減るのは各行へのログインの手間です。 API連携は最後でよい、というのがこの構成の考え方です。ファイルをダウンロードして所定のフォルダへ置く作業は、1口座あたり1分程度です。 判別と計算が自動化されていれば、そこだけ手作業でも効果は十分に出ます。
05工数削減シミュレーション
導入後 40件 × 13分 ÷ 60 = 8.7 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 銀行口座が5口座以上あり、拠点や事業ごとに口座を分けている企業。毎日の残高確認と口座間の資金移動を人が判断している場合。当座貸越や短期借入の利息を減らしたい場合。入出金明細の摘要から相手先を読み取る作業が手作業になっている場合。
- 口座が1〜2口座で、残高を見れば判断が済む場合。資金管理システム(CMS)や全社的なプーリングの仕組みを導入済みの場合。入出金の件数が月数十件で、通帳を見れば足りる場合。
07最小構成で試す方法
- 直近1か月の入出金明細を、口座をまたいで300明細ぶん用意する(CSVで足りる)
- 取引先マスタの「正式名称/振込名義」の2列を、上位50社ぶんだけ作る
- 表計算ソフトで、振込名義と完全一致する明細を機械的に判別する
- 一致しなかった明細を、生成AIのチャット画面に貼り付けて判別させる
- 相手先と取引区分が正しかった件数を数える
まず3番の「機械的な一致だけで何割片付くか」を測ってください。 ここが7割を超えるなら、AIに渡す量は少なく、費用も小さく収まります。
| 機械一致 + AI判別の合計正解率 | 判断 |
|---|---|
| 9割以上 | 自動化する価値がある |
| 7〜9割 | 使える。要確認の件数が1日10件程度なら実用の範囲 |
| 7割未満 | 取引先マスタの振込名義の整備が足りない。まずそこを埋める |
銀行のAPI連携を試す前に、この検証を済ませてください。 API連携には銀行との手続きが必要で、時間がかかります。判別の精度が出ないと分かってから手続きするのは無駄になります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 銀行ごとにCSVの列が違う | 取り込み時に共通の形へ正規化する。銀行ごとの変換定義を表で持つ |
| 半角カナで一致しない | 正規化(全角化・記号統一)を前処理に入れる。これだけで一致率が上がる |
| 存在しない取引先コードが作られる | マスタからのみ選ばせる。null を許す |
| 金額が書き換えられる | 元の明細と機械で検算する。一致しなければ破棄 |
| 同じ明細を2回取り込む | 「口座+日付+金額+摘要」で重複を検出する |
| 祝日に実行して古い明細を再取得する | 営業日判定を入れる。祝日カレンダーを持つ |
| 支払予定に手形や税金が入っていない | 支払予定の元データの範囲を、経理と決めてから作る |
| 取引先マスタが育たない | 人が確定したらマスタへ追記する導線を作る。これがないと精度が上がらない |
| 資金移動を自動実行してしまう | 実行の経路を作らない。案の提示までで止める |
| 外貨預金を同じ表に混ぜる | 対象外にする。為替評価が必要なため別管理にする |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 口座番号、残高、入出金の相手先と金額。自社の資金繰りの状況と、取引先との取引規模が読み取れる情報です。
- 外部AIへ渡す範囲を絞る … 口座番号と残高をAIへ渡す必要はありません。 判別に必要なのは摘要と金額だけです。渡すデータを最小限にしてください。取引先名と金額だけでも十分に機微な情報です
- 認証情報の管理 … 銀行のAPIの認証情報、インターネットバンキングのIDを、スクリプトに直接書かないでください。スクリプトのプロパティや秘密情報の保管機能を使い、閲覧できる人を限定します
- 学習利用 … 入力を学習に使わないことが契約で保証されるサービスを選びます
- アクセス権限 … 資金ポジション表の閲覧を、財務部と経営層に限定します。全社共有のドライブに置かないでください
- 振込先口座の扱い … この構成で、振込先口座を自動で更新する処理を絶対に作らないでください。 取引先を装って口座変更を依頼する手口の詐欺があります。口座情報の変更は、必ず別の経路での確認を経て人が行います
- 自動実行してよい範囲 … 明細の取得、区分の判別、過不足の計算、案の提示までです。資金移動の実行、承認、会計システムへの消込の反映は自動化しないでください
誤りが起きた場合のリスクは、誤った資金移動、必要な口座への手当ての漏れによる引落不能、相手先の誤認による消込の誤りです。いずれも金銭または取引先との関係に直接影響します。日次のスナップショットと承認ログを残し、後から追跡できる状態にしてください。
10まず何から始めるか
1週目:機械一致で何割片付くかを測る
直近1か月の明細300件と、取引先マスタの上位50社で、振込名義の完全一致だけを試します。ここで7割を超えるなら、この構成は軽く作れます。 超えないなら、まず振込名義の列を埋めることから始めてください。
2週目:支払予定の元データをそろえる
当日・翌営業日の支払予定を、どこから取るかを経理と決めます。手形の期日、口座振替の引落日、給与、税金・社会保険料の4つが漏れやすい項目です。 ここが揃わないと、過不足の計算が成り立ちません。
3〜4週目:ファイル取り込みの半自動化を作る
API連携はまだ作りません。各行から明細をダウンロードしてフォルダへ置く運用で、判別と過不足の計算だけを自動化します。資金担当1名が2週間使い、1回あたりの時間と要確認の件数を実測します。
2か月目以降: 効果が確認できたら、残高の大きい主要口座からAPI連携を検討します。同時に、導入前3か月の当座貸越の発生日数と金額を集計し、比較できる状態にしておいてください。 時間削減より、こちらのほうが説明しやすい効果になることがあります。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Google Apps Script の時間主導型トリガーが、1分おきから月1回までの間隔でスクリプトを実行できること。フォーム送信時などのインストール型トリガーも用意されていること | Google: Installable triggers | 2026-09-21 |
| Apps Script が SpreadsheetApp を通じてスプレッドシートの範囲を読み書きし、行の追記や書式の設定を行えること。スクリプトをスプレッドシートに紐づけて動かせること | Google: Extending Google Sheets | 2026-09-21 |
Claude API で output_config.format に json_schema を渡すと、応答をスキーマに沿った形に制約できること | Claude Docs: Structured outputs | 2026-09-21 |
銀行のAPIの利用可否、料金、明細ファイルの形式は金融機関によって異なります。この部分は取引銀行への個別確認が必要です。 会計システム・販売管理システムからの支払予定のエクスポート方式も、製品によって異なります。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0143)についてのご相談はこちらから。
