Media > AI活用ユースケース > 経理 > 財務部が各銀行の口座の残高の報告をスプレッドシートに集め、Apps Script で残高の偏りと支払の予定から資金の振替の案を作る

財務部が各銀行の口座の残高の報告をスプレッドシートに集め、Apps Script で残高の偏りと支払の予定から資金の振替の案を作る

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

各銀行の口座の残高と口座別の支払の予定をスプレッドシートに集め、Apps Script で10営業日の残高の見込みと振替の案を作ります。AIはその案が口座ごとの取り決めに合うかを判定し、財務の担当は根拠付きの案を見て決めるだけにします。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Power Automate/Python
対象業界
商社/小売/建設/製造
対象部門
経理/財務
対象業務
内容確認・チェック/集計・分析
主な課題
判断に時間がかかる/属人化している/確認ミスが多い
AIで行う処理
判定
主な効果
判断支援/属人化解消/工数削減
導入難易度
★★☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
30h/月
AI導入後
12h/月
想定削減
60%
年間削減
216h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 各行のインターネットバンキングに入り、口座の残高を表に書き写す
  2. 支払の予定の表から、10営業日のうちに引き落とされる・振り込む支払を口座ごとに拾う
  3. 口座ごとに、残高から支払を引いた見込みを計算する
  4. 口座のメモを見ながら、最低限置いておく額と、置きすぎている額を決める
  5. どの口座からどの口座へいくら移すかを決め、振替の依頼書を作る
  6. 財務部長が依頼書を見て承認する
  7. 別の担当がインターネットバンキングで振替を実行する
導入後(After)
  1. 人財務の担当が、火曜と金曜の朝に各行のインターネットバンキングから残高のCSVを書き出し、ドライブの取り込みのフォルダに置く
  2. 自動時間主導のトリガーで Apps Script が動き、銀行ごとの形式でCSVを読み、口座の残高の表に書き込む
  3. 自動支払の予定の表から、10営業日の口座別の入出金を集め、日ごとの残高の見込みを出す
  4. 自動口座ごとの最低残高と上限の目安から、不足と余りを規則で計算し、振替の案を作る
  5. 自動振替の案、口座ごとの取り決めの文面、支払の予定の備考を Gemini API に渡し、案ごとの判定を JSON で受け取る
  6. 自動判定と根拠を振替の案の表に書き、財務の担当に知らせる
  7. 人財務の担当が、`conflict` と `needs_info` の案を確かめ、額を直すか、案を外す
  8. 人財務部長が案を承認する
  9. 人別の担当がインターネットバンキングで振替を実行し、実行した記録を表に付ける
各工程の詳しい説明を読む
  1. 各行のインターネットバンキングに入り、口座の残高を表に書き写す
  2. 支払の予定の表から、10営業日のうちに引き落とされる・振り込む支払を口座ごとに拾う
  3. 口座ごとに、残高から支払を引いた見込みを計算する
  4. 口座のメモを見ながら、最低限置いておく額と、置きすぎている額を決める
  5. どの口座からどの口座へいくら移すかを決め、振替の依頼書を作る
  6. 財務部長が依頼書を見て承認する
  7. 別の担当がインターネットバンキングで振替を実行する

(a)集めるだけで朝が終わる。 8行のインターネットバンキングに順に入り、15本の残高を写すだけで30分以上かかります。写し間違いは、計算の段で気づかなければそのまま振替の額に入ります。

(b)判断が担当者の頭の中にある。 「返済口座には返済額の1割増しを置く」「この銀行は月末に残高が減ると担当者から連絡が来る」といった取り決めは、一部は口座のメモにあり、一部は担当者の記憶にしかありません。 担当者が休むと、もう1人は前回の依頼書をまねて額を決めます。

(c)引落の口座の不足を見落とす。 税金と社会保険料の引落は月末に集中し、支払の予定の表の備考に「金額未確定」と書かれたままのことがあります。見込みの計算から漏れると、引落の日に残高が足りません。

(d)置きすぎを放っておく。 入金口座に資金がたまっても、不足が無ければ誰も動かしません。利息のつく普通預金に1行あたりの残高が偏ると、預金保険で保護される範囲を超えた額が1つの銀行に置かれたままになります。 社内で目安を決めていても、毎回の判断でそこまで見る時間がありません。

  1. 【人】 財務の担当が、火曜と金曜の朝に各行のインターネットバンキングから残高のCSVを書き出し、ドライブの取り込みのフォルダに置く
  2. 【自動】 時間主導のトリガーで Apps Script が動き、銀行ごとの形式でCSVを読み、口座の残高の表に書き込む
  3. 【自動】 支払の予定の表から、10営業日の口座別の入出金を集め、日ごとの残高の見込みを出す
  4. 【自動】 口座ごとの最低残高と上限の目安から、不足と余りを規則で計算し、振替の案を作る
  5. 【自動】 振替の案、口座ごとの取り決めの文面、支払の予定の備考を Gemini API に渡し、案ごとの判定を JSON で受け取る
  6. 【自動】 判定と根拠を振替の案の表に書き、財務の担当に知らせる
  7. 【人】 財務の担当が、conflict と needs_info の案を確かめ、額を直すか、案を外す
  8. 【人】 財務部長が案を承認する
  9. 【人】 別の担当がインターネットバンキングで振替を実行し、実行した記録を表に付ける

1番目を人の手で行うのは、この構成が銀行の接続を持たないからです。 各行の法人向けのインターネットバンキングの書き出しの形式は銀行ごとに違い、銀行とつなぐ仕組みは環境に応じた個別実装になります。 CSVの置き場を1つにするだけで、写し間違いの多くは無くなります。

7番目で人が見るのは、AIが「取り決めと食い違う」「情報が足りない」と判定した案だけです。 ok の案は、承認の前に一覧で流し見ます。

02今回想定するシステム構成

構成図
各行のインターネットバンキング(残高のCSVを書き出す)
   ▼【人】ドライブの取り込みのフォルダに置く
   ▼【トリガー】時間主導(火曜・金曜の朝)
Google Apps Script
   ├──▶ 銀行ごとの形式の表で CSV を読み、口座の残高の表へ
   ├──▶ 支払の予定の表から、10営業日の口座別の入出金を集める
   ├──▶ 口座の設定の表(最低残高・上限の目安・役割)で不足と余りを計算
   ├──▶ 規則で振替の案を作る(同じ銀行の中を優先、額は万円単位)
   ▼
Gemini API(Interactions API、構造化出力、store=false)
   │   案ごとに ok / conflict / needs_info と根拠の文
   ▼
振替の案の表(案・判定・根拠)── 財務の担当へ通知
   ▼
【人】確認 → 財務部長の承認 → 別の担当が振替を実行
役割想定する製品代替候補
実行環境Google Apps ScriptPython、Power Automate
生成AIGemini API(Interactions API、構造化出力)Claude API、OpenAI API
保管Google スプレッドシート(口座の残高・支払の予定・口座の設定・取り決め・振替の案)-
取込Google ドライブ(残高のCSVの取り込みのフォルダ)-
通知Gmail またはチャット-

最初の準備作業は、口座の設定の表と取り決めの表を作ることです。 設定の表は数値の規則(最低残高、上限の目安、口座の役割、利息のつく預金か、決済用預金か)を、取り決めの表は数値にしきれない文面(銀行との約束、借入の条件、担当者のメモ)を持ちます。数値は規則に、文面はAIに、と表の段階で分けておきます。

判定の部品は Gemini API の Interactions API です。 公式のページでは、構造化出力は /v1beta/interactions に response_format を渡し、mime_type を application/json にしてスキーマを指定するとされています。

保存の設定は最初に決めます。 公式のページでは、Interactions API は既定ですべての Interaction を保存し(store=true)、有料の層で55日、無料の層で1日保持するとされ、store=false で保存しない使い方を選べるとされています。口座の残高と取引の予定を渡すので、store=false を付けて呼びます。

03どうやって実装するのか

Step1

処理の起点を決める

火曜と金曜の朝の時間主導のトリガーで動かします。 公式のページでは、時間主導のトリガーは指定した時間帯の中で実行の時刻が選ばれ、9時に設定すると9時から10時のあいだのどこかで動くとされています。財務の担当がCSVを置くのが8時半ごろなので、トリガーは9時台に置き、10時に案がそろう流れにします。

CSVが置かれていなければ、処理を進めません。 15本のうち1本でも残高が取り込めていなければ、その日の見込みは作らず、足りない口座を財務の担当に知らせて終わります。 一部の口座だけで案を作ると、足りない口座の分を見ないまま振替の額が決まります。

手動でもう一度動かせるようにしておきます。 CSVを置き直したときや、急ぎの支払が入ったときは、財務の担当がスプレッドシートのメニューから同じ処理を呼びます。インストール型トリガーは作った人のアカウントで動くと公式のページにあるので、財務部の共有のアカウントで作ります。

Step2

入力データを集める

データ中身取得元
口座の残高銀行、支店、口座の種類、口座番号の下4桁、残高、基準の日時各行のCSV(取り込みのフォルダ)
支払の予定予定日、口座、入出金の別、金額、確定か未確定か、備考支払の予定の表(経理と財務が更新)
口座の設定口座の役割、最低残高、上限の目安、利息のつく預金か、振替の手数料の区分口座の設定の表
取り決め口座ごと・銀行ごとの文面(銀行との約束、借入の条件、担当者のメモ)と、書いた人と日付取り決めの表

判定の質を決めるのは、取り決めの表です。 「返済口座」「月末注意」のような短いメモでは、AIも人も判断できません。「借入の返済口座。返済日の前営業日の終わりに、返済額の110%以上を置く(借入の契約の条件ではなく社内の取り決め)」のように、何を、いつまでに、なぜ、を1行に書きます。 書いた人と日付を付けておくと、古い取り決めを見分けられます。

支払の予定の「確定か未確定か」の列は、この構成のために足します。 税金や社会保険料のように金額が後から決まるものは、前回の実績で仮の額を入れ、未確定の印を付けておきます。 AIはこの印と備考を見て、案の判定に反映します。

Step3

データの取得方法を決める

取るものどこからどう取るか
残高のCSVドライブの取り込みのフォルダフォルダの中のファイルを読み、文字コードを変換して Utilities.parseCsv で2次元の配列にする
CSVの列の意味銀行ごとの形式の表銀行ごとに、残高の列・口座番号の列・基準の日時の列を引く
支払の予定支払の予定の表今日から10営業日の行を、口座ごとに集める
口座の設定・取り決め口座の設定の表・取り決めの表口座ごとに1行と、該当する文面をすべて

CSVの形式は銀行ごとに違います。 見出しの行の数、残高の列の位置、日付の書き方、文字コードが違うので、銀行ごとの形式の表に「何行目から」「何列目が残高」「日付の形」を書き、スクリプトはその表に従って読みます。 公式のページでは、Utilities.parseCsv は CSV の文字列を2次元の配列にし、区切りの文字も指定できるとされています。

基準の日時を必ず取ります。 前日の夜に書き出したCSVを朝に置き忘れたまま使うと、夜間の引落の前の残高で見込みを作ることになります。 基準の日時が当日の朝より前なら、その口座は取り込まずに知らせます。

Step4

AIへ渡す前に整形する

  1. 口座の突き合わせ … CSVの口座番号の下4桁と銀行・支店で、口座の設定の表の口座に結び付けます。結び付かない行は取り込みません
  2. 残高の検算 … 前回の残高と今回の残高の差が、前回からの支払の予定の合計と大きく違えば、印を付けます
  3. 営業日の計算 … 社内の休日の表を使い、10営業日の日付の列を作ります。支払の予定日が休日なら、規則で前の営業日か後の営業日に寄せ、どちらに寄せたかを記録します
  4. 見込みの計算 … 口座ごとに、日ごとの残高の見込みを出します
  5. 不足と余りの計算 … 見込みの最も低い日の残高と最低残高、最も高い日の残高と上限の目安を比べます
  6. 振替の案の作成 … 余りのある口座から不足のある口座へ、同じ銀行の中の振替を優先し、額は万円単位で切り上げて案を作ります

6番目までをすべて規則で行うのが、この設計の要です。 額と日付は計算で決まり、AIに渡すのは「計算が終わった案」です。 AIの判定がどう出ても、案の額そのものは変わりません。

6番目の振替の案は、次の順の規則で作ります。

順規則
1見込みの最も低い日に最低残高を割る口座を、不足の額の大きい順に並べる
2同じ銀行の中に、上限の目安を超える余りのある口座があれば、そこから移す
3同じ銀行に無ければ、余りの最も大きい口座から移す
4振替の元の口座が、振替のあとも10営業日のあいだ最低残高を割らないことを確かめる
5振替の予定日は、不足の日の前営業日にする

2番目で同じ銀行の中を優先するのは、手数料と実行の手間が少ないからです。 どの組み合わせで手数料がかかるかは、口座の設定の表の手数料の区分で持ちます。

3番目の休日の寄せ方は、支払の種類ごとに決めておきます。 引落は銀行の規則で後ろの営業日になることが多い一方、振込は前の営業日に前倒しする運用の会社が多いので、寄せ方を種類の列で持ちます。迷う種類は前に寄せて、不足を早めに見るようにします。

Step5

AIに処理させる

させるのは、規則が作った振替の案の1本ずつについて、口座ごとの取り決めと支払の予定の備考に照らして、採れるかどうかを判定し、根拠の文を書き出すことだけです。

判定意味例
ok取り決めと備考に食い違いが無い入金口座から支払の口座へ、両方の最低残高を守った振替
conflict取り決めの文面と食い違う月末に残高を保つと伝えてある銀行から、月末の前日に資金を抜く案
needs_info判定に要る情報が足りない振替の先の口座の引落に「金額未確定」の備考がある

判定の対象には、案に含まれない口座も入れます。 規則で不足も余りも無いと出た口座でも、取り決めの文面に「今月は増資の払込に使う」とあれば、その口座は動かしてはいけないかもしれません。 案に出ていない口座について、取り決めから気をつけることがあれば account_notes に書かせます。

させないこと理由
振替の額を変える・計算する額は規則で決める。AIの算数で額が変わると検算できない
新しい振替の案を作る案は規則で作る。AIは判定と根拠まで
取り決めの解釈を広げる書かれていないことを「おそらく」で補わない
銀行や借入の契約の条件を推測する契約の中身は取り決めの表に書かれた範囲だけ
承認・実行の可否を決める承認は財務部長、実行は別の担当

1行目がいちばん起きやすい失敗です。 案と取り決めが食い違うと、モデルは「120万円ではなく80万円にすれば取り決めに合います」と額を直そうとします。額を直すのは財務の担当で、AIには食い違いの事実と根拠だけを書かせます。

Step6

指示内容を固定する

あなたは財務部で、資金の振替の案を口座ごとの取り決めに照らして
点検する担当です。渡された「振替の案」「口座ごとの見込み」
「取り決め」「支払の予定の備考」だけを根拠にしてください。

【判定すること】
1. proposals:振替の案の1本ずつについて、verdict を
   ok / conflict / needs_info のいずれかにする。
   - ok:取り決めと備考に食い違いが無い
   - conflict:取り決めの文面と食い違う
   - needs_info:判定に要る情報が足りない(金額未確定、日付の不明など)
2. reason:判定の理由を2文以内で書く。
3. evidence:根拠にした取り決めの番号と文面、または備考の文を、そのまま写す。
4. account_notes:案に含まれない口座でも、取り決めから気をつけることがあれば書く。

【厳守事項】
- 振替の額を変えたり、別の額を提案したりしないでください。
- 新しい振替の案を作らないでください。
- 取り決めに書かれていないことを、推測で補わないでください。
- 銀行との契約や借入の契約の中身を推測しないでください。
  取り決めの表に書かれた範囲だけを根拠にしてください。
- 取り決めの書いた日付が古く、いまの支払の予定と合わないと思われる場合は、
  needs_info にし、reason にその旨を書いてください。
- 承認してよい、実行してよいとは書かないでください。

【基準日】{as_of}
【振替の案】{proposals}
【口座ごとの見込み(10営業日)】{forecast}
【取り決め】{rules_text}
【支払の予定の備考(未確定の印付き)】{payment_notes}

「額を変えない」を最初の厳守事項にしているのは、前の表の1行目のためです。 何も言わなければ、モデルは食い違いを見つけると親切に額を直します。直された額は誰も検算していない数字です。

取り決めの日付が古い場合を needs_info にするのは、担当者が替わって取り決めが残ったままのことがあるからです。 3年前の担当者のメモに従って資金を動かすより、いまの担当が取り決めを書き直すほうが先です。

指示は、Interactions API の system_instruction に置きます。 公式のページでは、system_instruction はその Interaction だけに効くとされているので、呼ぶたびに同じ指示を渡します。 取り決めや備考は入力の側に置き、指示と分けます。

Step7

出力形式を固定する

次の形のJSONで受け取ります。

{
  "as_of": "2026-11-03",
  "proposals": [
    {
      "proposal_id": "P-01",
      "verdict": "ok | conflict | needs_info",
      "reason": "",
      "evidence": [
        { "source": "rule | payment_note", "ref": "R-07", "quote": "" }
      ]
    }
  ],
  "account_notes": [
    { "account_id": "", "note": "", "ref": "" }
  ]
}

1つ目の理由は、規則の層と判定の層を分けられることです。 振替の案の表には、規則が書いた額・振替の元・振替の先の列と、AIが書いた verdict・reason・evidence の列が並びます。AIの出力に額の欄が無いので、AIが額を変える余地がありません。

2つ目の理由は、スキーマで判定の値を縛れることです。 verdict を enum にしておけば、3つ以外の値は返りません。公式のページでは、enum・required・minItems・maxItems が使える一方、minLength・maxLength はエラーにならずに外されるとされています。reason の長さはスキーマで縛れないので、受け取ったあとに Apps Script で字数を数え、長すぎれば確認の印を付けます。

3つ目は、evidence の ref で取り決めの表に戻れることです。 財務の担当は、conflict の案を見たときに取り決めの番号から原文を開き、AIの読み方が正しいかを数秒で確かめられます。

振替の案の表は、次の形に並べます。

列出どころ
案の番号、振替の元、振替の先、額、予定日規則(Apps Script)
振替の元・先の見込みの最低額と最低残高規則(Apps Script)
判定、理由、根拠Gemini API
担当の確認、直した額、部長の承認、実行の記録人
Step8

システムへ連携する

つなぎ先方式内容
ドライブの取り込みのフォルダDriveApp残高のCSVを読む。読んだファイルは日付のフォルダへ移す
スプレッドシートの各表SpreadsheetApp残高・支払の予定・設定・取り決めを読み、案と判定を書く
Gemini APIUrlFetchApp で Interactions API を呼ぶ案ごとの判定と根拠
通知メールまたはチャット案がそろったこと、CSVが足りない口座

Gemini API の呼び出しは、muteHttpExceptions を有効にして、応答の番号を見ます。 公式のページでは、muteHttpExceptions を有効にすると失敗の応答でも例外を投げないとされています。エラーのときは案を判定なしで表に書き、「判定なし」の印を付けて知らせます。 判定が無くても、規則の案は財務の担当が従来どおり確かめられます。

インターネットバンキングにも会計の仕組みにも書き込みません。 この構成が書くのはスプレッドシートの案の表だけで、振替の実行と会計への計上は人の手で、従来の手順のまま行います。

Step9

人が確認する

財務の担当が見るのは、conflict と needs_info の案と、account_notes です。 ok の案は一覧で流し見ます。

  1. CSVの取り込みの漏れを先に見る … 足りない口座があれば、その日の案は出ていません
  2. conflict の根拠を開く … 取り決めの原文を読み、AIの読み方が正しければ額を直すか案を外します。正しくなければ、取り決めの文面を直す候補として記録します
  3. needs_info の情報を埋める … 未確定の支払の額を経理に確かめ、支払の予定の表を直して、もう一度処理を呼びます
  4. account_notes を読む … 案に出ていない口座の注意を見て、必要なら手で案を足します
  5. 財務部長に承認を依頼する … 直した額と理由を表に残したまま依頼します

2番目でAIの判定に従って額を直すときも、直すのは人です。 直した額は表の「直した額」の列に書き、規則が出した額を上書きしません。 後から、規則の額とAIの判定と人の判断を並べて振り返れるようにします。

Step10

例外に対処する

起きること対応
一部の口座のCSVが無いその日の案を作らず、足りない口座を知らせる
CSVの基準の日時が古いその口座を取り込まず知らせる
CSVの形式が変わった銀行ごとの形式の表と合わなければ取り込まず知らせる。推測で列を読まない
残高の検算で大きな差が出る印を付けて案は作る。財務の担当が明細を確かめる
余りのある口座が無く、不足が埋まらない不足の口座と額だけを出し、借入の枠や定期預金の扱いは財務の担当が決める
Gemini API が応答しない・エラー案を「判定なし」で表に書き、知らせる
応答がスキーマに合わない1回だけ呼び直し、だめなら「判定なし」にする
実行の時間に間に合わない実行の締めの時刻を表に持ち、その時刻を過ぎた案に印を付ける

1行目で一部の口座だけで案を作らないのは、第7章のトリガーのとおりです。 足りない1口座が、ちょうど不足の口座だったときに、その日の判断がまるごと外れます。

公式のページでは、スクリプトの1回の実行は6分までとされています。 15口座と10営業日の計算に、1回の API の呼び出しを足すだけなので、この時間に収まります。口座が増えて時間がかかるようになったら、残高の取り込みと案の作成を別の実行に分けます。

Step11

記録を残す

  • 取り込んだCSVのファイルと、取り込んだ日時・基準の日時
  • 日ごとの残高の見込みと、計算に使った口座の設定の表の版
  • 規則が作った振替の案と、AIに渡した内容・返した JSON の全文
  • 財務の担当が額を直した記録 … どの案を、いくらからいくらに、なぜ
  • 財務部長の承認の日時と、実行した担当・実行の日時
  • 取り決めの表を直した記録(誰が、いつ、どの文面を)

4つ目と6つ目は、取り決めを育てる材料になります。 同じ口座で同じ直しが続くなら、その口座の最低残高の数値か、取り決めの文面が実態に合っていません。 数値なら設定の表を、文面なら取り決めの表を直します。

04実装レベルの3段階

最小構成:案と取り決めをAIの画面に貼り、判定させる / 取り決めとの突き合わせ
半自動化:上記+CSVの取り込み、見込みの計算、規則での案の作成、判定の書き込みと通知までを Apps Script にする / 残高の取り込みから案と判定まで
本格構成:上記+銀行とのデータの接続で残高を自動で取り込み、会計の仕組みの支払の予定と同期する / 残高と支払の予定の取り込みまで

本記事の想定は半自動化で、1件15分が6分になります。 残るのは、CSVの書き出しと置き場への保存、conflict と needs_info の確認、承認の依頼です。 本格構成の銀行とのデータの接続は、銀行ごとの提供の形に応じた個別実装になります。 半自動化で CSV の書き出しが手間の中心だと分かってから、取引の多い銀行から順につなぐのが順当です。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
120 件
1件あたり現在時間
15 分
1件あたり導入後時間
6 分
現在  120件 × 15分 ÷ 60 = 30 時間/月
導入後 120件 × 6分 ÷ 60 = 12 時間/月
月間削減時間
18h
削減率
60%
年間削減時間
216h
年間金額換算(時間単価4,500円)
97万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 取引のある銀行が5行以上あり、売上の入金口座・支払の引落口座・借入の返済口座・給与の口座が銀行ごとに分かれている製造業・商社など。週に1〜2回、財務の担当が各行の残高を集めて表にまとめ、どの口座からどの口座へいくら移すかを決めている場合。銀行との約束や借入の条件など、口座ごとの取り決めが担当者の頭の中やメモにある場合。Google Workspace を使える場合。
向いていない
  1. 取引銀行が1〜2行で、口座間の振替がほとんど無い場合。グループの資金を一括で管理するキャッシュマネジメントの仕組みで、口座間の資金の集中と配分がすでに自動で行われている場合。振替の実行そのものを自動にしたい場合は、この構成では扱いません(案と判定までです)。

07最小構成で試す方法

  1. 過去2か月分の振替の依頼書から、16回分を選ぶ(うち数回は、担当者が規則と違う判断をした回を入れる)
  2. その回の残高と支払の予定を再現し、口座の設定の表と取り決めの表を作る
  3. 規則で振替の案を作り、当時の依頼書と並べる
  4. Gemini の画面に、案・取り決め・備考を貼り、「案ごとに、取り決めと食い違うか、情報が足りないかを判定し、根拠の文を写してください。額を変えないでください」と指示する
  5. 判定を、当時の担当者が規則と違う判断をした理由と突き合わせる

16回は必ずやってください。 スクリプトを組む前に、「担当者の判断の理由が、取り決めの表に書けるか」を確かめます。

出てきた内容判断
担当者が額を変えた回で conflict が出たスクリプトの組み立てに進む
額を直した案を書いた指示の書き方で直る。構成は有効
担当者の判断の理由が、取り決めのどこにも書かれていない取り決めの表が先。 AIの問題ではない

3行目が出ることは珍しくありません。 失敗ではなく、判断が担当者の頭の中にあったことが確かめられたということです。 当時の担当者に理由を聞き、取り決めの表に1行ずつ足してから、同じ16回でもう一度試します。

08実装時につまずきやすいポイント

問題対策
AIが額を直した案を書く出力のスキーマに額の欄を置かず、指示に明記する
一部の口座だけで案を作るCSVが1本でも欠けたら、その日の案を作らない
古いCSVで見込みを作る基準の日時を取り、当日の朝より前なら取り込まない
CSVの列の位置が変わる銀行ごとの形式の表と合わなければ止める。推測で読まない
未確定の支払が見込みから漏れる仮の額と未確定の印を入れ、needs_info に回す
休日の支払の寄せ方を間違える支払の種類ごとに前寄せか後ろ寄せかを持つ
store を既定のまま呼ぶstore=false を付ける。既定では保存される
maxLength で長さを縛ったつもりになるエラーにならずに外されるので、受け取ったあとに数える
取り決めが古いまま残る書いた人と日付を持ち、古いものは needs_info に回す
承認した人が実行もする案を作る人、承認する人、実行する人を分ける

上の2行が、この構成の失敗のほとんどです。 どちらも、資金を動かす数字が、検算されないまま案に入るところから起きます。額は規則、判定はAI、決定は人、という分け方を守れるかで、運用に乗るかが決まります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 口座の残高、口座番号の下4桁、取引銀行、支払の予定(相手先と金額)、借入の返済の予定、銀行との取り決めです。会社の資金の状態そのものです。

  1. API に保存させない … 公式のページのとおり、Interactions API は既定で保存します。store=false を付け、呼び出しの設定をコードの先頭で固定します
  2. AIに渡す範囲を絞る … 口座番号は渡さず、口座の識別子(「A行 入金口座」など)で渡します。支払の予定の相手先の名前も、判定に要らなければ渡しません
  3. APIのキーをシートに置かない … スクリプトのプロパティに置き、スプレッドシートの共有から切り離します
  4. 職務を分ける … 案を作る人、承認する人、実行する人を別にし、インターネットバンキングの振替の権限を案の作成者に持たせません
  5. 預金の置き方の目安は社内で決める … 預金保険機構のページでは、当座預金や利息のつかない普通預金などの決済用預金は全額保護され、利息のつく普通預金や定期預金などの一般預金等は1金融機関ごとに合算して元本1,000万円までと利息等が保護されるとされています。上限の目安をどう置くかは、この仕組みを踏まえて社内で決め、AIに決めさせません
  6. スプレッドシートの共有を絞る … 閲覧と編集は財務部に限り、取り決めの表の編集は財務部長と担当に限ります

誤りが起きた場合のリスクは、引落の口座の残高が足りなくなることと、検算されていない額で資金を動かすことの2つです。 前者は未確定の支払を needs_info に回す規則とCSVの欠けで止める規則で、後者は額を規則だけで決める設計で守ります。

10まず何から始めるか

1週目:口座の設定の表と取り決めの表を作る

15本の口座の役割、最低残高、上限の目安を設定の表に書きます。担当者に聞き取り、頭の中にある取り決めを1行ずつ文面にします。 書いた人と日付を付けます。

2週目:16回分で試す

過去の振替の依頼書から16回分を選び、規則の案とAIの判定を作って、当時の判断と並べます。担当者が規則と違う判断をした回に、conflict が出るかを最優先で見ます。

3週目:CSVの取り込みを作る

銀行ごとの形式の表を作り、取り込みのフォルダのCSVを残高の表に書き込むところまでを Apps Script で組みます。この時点では、手で写した残高と取り込んだ残高を並べ、全口座で一致するかを確かめます。

4週目:見込みと案と判定をつなぐ

支払の予定の集計、見込みの計算、規則の案、Gemini API の判定までをつなぎます。財務の担当は従来どおり依頼書を作り、案の表と比べます。

2か月目: 案の表を振替の依頼書として使い始め、財務部長の承認を表の上で行います。3か月目以降: 1件15分が何分になったかを実測します。担当者が休んだ回でも、もう1人が同じ根拠で案を承認に回せた時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-27/最終更新:2026-10-27
確認した内容情報源確認日
時間主導のトリガーが指定した時間帯の中で実行の時刻が決まること。インストール型トリガーが作成者のアカウントで動くことGoogle: Installable Triggers2026-10-27
スクリプトの1回の実行が6分までであることGoogle: Quotas for Google Services2026-10-27
Utilities.parseCsv が CSV の文字列を2次元の配列にし、区切りの文字を指定できることGoogle: Class Utilities2026-10-27
UrlFetchApp.fetch の method・contentType・headers・payload と、muteHttpExceptions で失敗の応答でも例外を投げないことGoogle: Class UrlFetchApp2026-10-27
構造化出力が /v1beta/interactions の response_format(mime_type を application/json、スキーマ)で指定されること。enum・minItems・maxItems などが使え、minLength・maxLength はエラーにならずに外されることGoogle AI for Developers: Structured output2026-10-27
Interactions API が既定で保存し(store=true)、有料の層で55日・無料の層で1日保持すること。store=false を選べること。system_instruction がその Interaction だけに効くことGoogle AI for Developers: Interactions2026-10-27
決済用預金(当座預金・利息のつかない普通預金など)が全額保護され、一般預金等は1金融機関ごとに合算して元本1,000万円までと利息等が保護されること預金保険機構: 保護の範囲2026-10-27

預金の置き方の目安や口座ごとの最低残高は、自社の資金管理の規程と財務部長の判断で決めてください。 本記事は公開仕様と公的機関のページで確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-2061)についてのご相談はこちらから。

AI活用について相談する
目次