中級向けn8n 公式テンプレート承認済み

月次報告のスライドを自動作成

Google Chat やフォームで「9月の売上報告」と頼むと、スプレッドシートの数字から、合計・先月比・上位の項目・グラフの入った Google スライドができます。

AI(Claude)が読むのは「何月分か」だけです。数字はすべてコードが計算し、Claude が書くまとめの文も、中の数字をコードが照らします。

試したとき、Claude は 24% と 21% を勝手に足して「45%」と書きました。データにない数字なので、コードがまとめを差し替えました。

人の手間は、どう変わるか

Before(人が手でやっていたこと)

  • 毎月、シートでその月の行を絞り込み、合計と先月比を計算する
  • グラフを更新して、スライドに数字とグラフを貼り直す
  • 一言のまとめを書き、数字が合っているかを見直す

After(このワークフローを入れると)

  • チャットで「9月の売上報告」と頼むと、数字とグラフの入ったスライドのリンクが返ってくる
  • 合計・先月比・件数・平均・上位の項目は、コードがシートから計算する
  • AI のまとめにデータにない数字があれば、コードが作った素朴なまとめに差し替える

それでも人に残ること

  • スライドを開いて、中身と言い回しを確かめる
  • もとのシートを、正しく保つ

動作確認: — n8n 2.36.8 / Claude Haiku 4.5 / Google スプレッドシート・スライド・ドライブ / Google Chat(Google Workspace)

n8n 公式テンプレート: 英語版が n8n の審査を通過しました()。注記を読む

この記事で配っている JSON は、n8n に出した英語版と同じものです(審査のあとで n8n 側が手を入れていれば、公式のページの版のほうが新しい)。n8n が内容を保証するものではありません。 n8n 公式のページ(英語版)を見る

月次報告のスライドに、AI の書いた数字が紛れ込むと困ります。だからこのワークフローは、スライドに載る数字を、すべてコードに計算させます。 AI(Claude)に任せるのは、「9月の売上報告」から何月分かを読むことと、計算済みの数字から3行のまとめの文を書くことだけです。

それでも、まとめの文には数字が入ります。そこで、まとめの中の数字を、コードが1つずつ照らします。 試したとき、Claude は「Cold brew pack と Coffee beans で、合わせて売上の 45%」という意味の一文を書きました(実際の文は英語)。24% と 21% を、自分で足した数字です。指示では「数字を計算しない」と書いていました。データにない数字なので、コードはそのまとめを使わず、コードが作った素朴なまとめに差し替えました。

約29秒の予告編(音声あり。音声:VOICEVOX:雨晴はう)

monthly-report-slides.json をダウンロード(n8n 公式テンプレートとして承認された英語版と同じファイル)

頼む「9月の売上報告」Chat・フォームClaude ①何月分かを読む+ そう読んだ言葉コードが計算する月を言葉から計算して照らす合計・先月比・件数・平均・上位Report タブを書き換える(グラフ用)Claude ② + コードの照合計算済みの数字だけで3行のまとめデータにない数字 → 素朴なまとめに差し替えスライドを作って返すひな形をコピーして数字を埋めるグラフは、つながっていない画像で入れる月が読めない・未来の月・データがない → 作らずに理由を返す
スライドに載る数字は、すべてコードが計算したものです。AI が書くのは、言葉(月の読み取りと、まとめの文)だけです。

AI に任せるのは、月を読むことと、まとめの文だけ

どこで AI がすること コードがすること
依頼を読む 「9月の売上報告」から、何月分か(2026-09)と、そう読んだ言葉(「9月」)を返す その言葉が依頼文にあるかを確かめ、月を言葉から自分で計算して照らす。未来の月、データのない月は止める
数字 (何もしない) シートから、合計、先月比、件数、平均、取引先の数、上位の項目を計算する。グラフのもとになる Report タブも書き換える
まとめ 計算済みの数字だけを渡されて、3行の文を書く 文の中の数字が、渡した数字の中にあるかを1つずつ照らす。1つでもなければ、コードが作ったまとめに差し替える

まとめの照らし方は、単純です。渡した数字(「¥432,000」「+7.5%」「41%」など)を一覧にしておき、まとめの文から数字を抜き出して、一覧にないものが1つでもあれば不採用にします。

試した結果

架空のコーヒー豆の卸の売上(8月〜10月、63行)で試しました(2026年10月20日。Claude Haiku 4.5、各1回)。

依頼 どこから 結果
9月の売上報告を作って(1回目) Chat と同じ形のデータ 作成。売上 ¥432,000(8月比 +7.5%)、26件、5社。AI のまとめは不採用(「45%」)。代わりにコードのまとめを載せた
9月の売上報告を作って(2回目) Chat と同じ形のデータ 作成。AI のまとめの数字がすべて一致し、採用
今月の売上報告 Chat と同じ形のデータ 作成。月の途中なので「Oct 1–20」を「Sep 1–20」と比べた(¥306,200、−2.5%)
Sales report for last month please Chat と同じ形のデータ 作成(9月分)
7月の売上報告をお願い Chat と同じ形のデータ 止まった: 7月のデータがない
売上報告のスライドを作って Chat と同じ形のデータ 止まった: 月が書かれていない
来月の売上報告 Chat と同じ形のデータ 止まった: 「来月」から月を読めない
9月の売上報告を作って 本物の Google Chat 作成。返事まで 10.2秒。「Open the slides」のボタンで開く
8月の売上報告(最終版) 本物の Google Chat 作成。12.1秒(¥402,000)
9月の問い合わせ報告を作って Config だけ変えた(問い合わせ、経路ごとに1行1件で数える) 作成。41件、8月比 +36.7%、1位は LINE の17件(+70.0%)。サンプルを作ったときに数えた数と一致

作って見つけた5つの落とし穴

1. 「計算するな」と書いても、AI はまとめの中で計算した

まとめを書かせる指示には、「数字を計算・丸め・変換しない。事実に書かれたとおりに写す」と書いていました。それでも1回目のまとめには、次の一文がありました。

Cold brew pack surged +194.1% to ¥90,000, while Coffee beans 1kg grew +83.3% to ¥105,600, collectively representing 45% of total sales.

「合わせて売上の45%」の 45% は、21% と 24% を足した数字です。

足し算自体は正しいのですが、スライドに載せる数字は、コードが計算したものだけというのが、この作りの約束です。指示だけでは守られないので、コードで照らす部分が要ります。2回目は、渡した数字だけを使ったまとめになり、そのまま採用されました。同じ指示でも、回によって守られたり守られなかったりします。

2. シートとつながったグラフは、前の月の資料まで変える

最初は、ひな形に、シートとつながったグラフ(リンクされたグラフ)を置き、スライドを作るたびに「更新」させていました。ところが、コピーしたスライドのグラフも、元のシートとつながったままです。Report タブは毎回書き換わるので、9月の資料でグラフの「更新」を押すと、最後に作った月のグラフに変わってしまうはずです(押して確かめてはいません)。

そこで、グラフは つながっていない画像 として入れる形に変えました(Slides API の createSheetsChart で、linkingMode を NOT_LINKED_IMAGE にする)。作ったスライドが、あとから変わることはありません。Slides API で、入ったものがグラフではなく画像であることを確かめました。

グラフを置く場所は、ひな形に {{chart}} と書いたテキストボックスを置いてもらい、その位置と大きさに入れて、テキストボックスは消します。利用者が、自分のひな形のどこにでも置けるようにするためです。

3. 数字を照らすコードに、私のバグがあった

1回目で不採用になったまとめには、「45%」のほかにも、データにないと判定された数字がありました。「¥432,000,」のように、数字の後ろの読点まで拾っていたのが原因で、正しい数字まで「データにない」とされていました。照らす側のコードが間違えると、正しいまとめまで捨てることになります。数字を抜き出す正規表現を直してから、2回目以降を試しています。

4. n8n の式の中に }}} があると、壊れる

サンプルのシートにグラフを足す処理で、送る JSON の終わりが }}} になり、n8n が式({{ }})の終わりと読み違えて、エラーになりました。中身が固定の JSON は、式にせず、そのまま書くと避けられます。

5. Google スライドの API の細かい決まり

ひな形をワークフローで作るときに、2つ詰まりました。どちらも、エラーの文から分かりました。

  • スライドを作るときのレイアウトは、predefinedLayout を直接ではなく、slideLayoutReference: { predefinedLayout: 'TITLE' } の形で指定する
  • スライドなどに付ける ID(objectId)は、5文字以上でないといけない

売上以外の報告にも使える

Config で、使うタブと列、スライドに出す言葉を指定します。日付の列、分ける列、数える列がある表なら、報告にできます。数える列を空にすると、1行を1件として数えます。

報告の例 日付の列 分ける列 数える列
売上(サンプル) 売上日 商品 金額
問い合わせ 受付日 経路(電話・メール・LINE) 空(1行1件)
経費 利用日 費目 金額
残業 日付 部署 時間

1行1件で数えるときは、「平均」の行が意味を持たないので、ひな形からその行を消してください。

使うための設定

  1. 認証情報: Google スプレッドシート、Google ドライブ、Google スライド(いずれも OAuth2)、Anthropic
  2. スプレッドシート: データのタブ(サンプルは Sales:date, customer, product, amount)と、グラフを1つだけ置いた Report タブ。グラフの範囲は、A〜C列で、分ける項目の数+見出しの行まで
  3. スライドのひな形: 次の文字を、好きな場所に置く。グラフを入れたい場所には、{{chart}} とだけ書いたテキストボックスを置く {{report_title}} {{period}} {{prev_period}} {{prepared_on}} {{value_label}} {{group_label}} {{entry_label}} {{average_label}} {{distinct_label}} {{total}} {{vs_last_month}} {{entries}} {{average}} {{distinct}} {{top_groups}} {{summary}}
  4. Config: シートとひな形の ID、使う列、スライドに出す言葉、通貨、タイムゾーン、まとめの言語
  5. フォームで試す。 Google Chat から頼むには、請求書の下書きの記事と同じ準備(Google Workspace、Chat アプリ、外から届く n8n)が要ります

確認していないこと

  • 実際の会社の売上データ。 試したのは、架空のデータです
  • ほぼ同時に2つの報告を頼んだとき。 Report タブを共有しているので、グラフが混ざる可能性があります
  • グラフの「更新」を押すと前の月の資料が変わる件は、つながったグラフをやめる前に、押して確かめてはいません(仕組みからの推測です)
  • まとめが数字を別の書き方(「43万2千円」など)で書いた場合は、照らせずに不採用になるはずです(試していません)

次に読む

次に読む