doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Excel×Claude×Power Automateで日次レポートを全自動化|5アクションで組む手順とハマりどころ5つ

スポンサーリンク

Excelの日次レポート自動化は「Power Automateが起動と配信、Excelがデータ保持と集計、Claude APIがコメント生成」の3層に分けるのが正解です。数値の計算はExcel側で終わらせ、AIには文章化だけを任せる——この分担が破綻しない構成の条件になります。

必要なもの(先に確認してください)

  • OneDrive for Business または SharePoint(ローカルのExcelファイルはPower Automateから触れません)
  • Power Automate Premium ライセンス(HTTPアクションはプレミアムコネクタ扱い。代替案は後述)
  • Claude APIキーAnthropic Consoleでアカウント作成後、API Keysから発行)

毎朝、前日の売上や問い合わせ件数をExcelから拾って、コメントを添えてメールやTeamsに流す。この作業を10分でも毎日やっていれば、年間で40時間以上が消えていきます。しかも人がやる以上、休むと止まります。

以下、実際に組むときの手順と、必ずつまずくポイントをまとめます。

Excel×Claude×Power Automateで日次レポートを全自動化|5アクションで組む手順とハマりどころ5つのサンプル ▲ Excel+Claude サンプル

全体構成:役割を3つに分ける

担当 具体的な仕事
Power Automate 起動・配線・配信 毎朝8時に起動、Excelから行取得、APIを叩く、Teams/メールに送る
Excel データ保持・計算 生データの蓄積、前日比・達成率などの集計
Claude API 文章化 集計済みの数値を受け取り、要約コメントを書く

重要なのはClaudeに計算させないことです。生データを丸ごと渡して「集計して」と頼むと、桁を読み違えたり合計がずれたりします。Excelの数式で確定した数値だけを渡し、Claudeには「この数字をどう説明するか」だけを任せる。ここを守るだけで信頼性が段違いに上がります。

ステップ1:Excel側を自動化に耐える形にする

  • 保存先はOneDrive for BusinessかSharePoint。ローカルのファイルはPower Automateから触れません。
  • 必ずテーブル化する(範囲を選んでCtrl+T)。Power AutomateのExcelコネクタはテーブル単位でしか行を読めません。テーブル名は「デザイン」タブからDailyDataのような分かる名前に変更しておきます。
  • 集計専用のシートを別に作る。生データ1000行をそのまま渡すのではなく、Summaryシートに「前日売上」「前日比」「今月累計」「目標達成率」など10行程度に圧縮した表を用意し、こちらもテーブル化します。渡すデータが小さいほど、速く・安く・正確になります。
  • 日付列は文字列で持つ=TEXT(A2,"yyyy-mm-dd")で別列を作っておくと、後述のシリアル値問題を丸ごと回避できます。

ステップ2:Power Automateのフローを組む

  1. 繰り返し(スケジュール)トリガー — 毎日8:00、タイムゾーンは「大阪、札幌、東京」を選択
  2. 表内に存在する行を一覧表示 — 対象はSummaryテーブル
  3. 作成 — 取得した行をJSON文字列に整形(string(body('表内に存在する行を一覧表示')?['value']))
  4. HTTP — Claude APIを呼ぶ
  5. チャットまたはチャネルでメッセージを投稿する / メールの送信 — 結果を配信

たった5アクションです。凝った分岐を入れる前に、まずこの一直線を動かしきることをおすすめします。

ステップ3:プロンプトの型を決める

自由に書かせると、日によって長さも構成も変わり、比較できないレポートになります。先に型を固めます。この文面は次のステップでsystemパラメータに入れます。

あなたは日次営業レポートのコメントを書く担当です。

出力形式:
【結論】1文で状況を言い切る
【変化】前日・前週からの変化を3点、箇条書きで
【要確認】異常値があれば1点だけ指摘。なければ「特になし」

制約:
- 与えられた数値のみ使用し、計算や推測はしない
- 全体で300字以内
- 前置きや挨拶は書かない

「前置きを書かない」の一文がないと、毎朝「承知しました。以下がレポートです」から始まる文章が届きます。地味ですが効きます。

ステップ4:HTTPアクションの完成形

以下がそのまま動く最終形です。プロンプトはsystem、データはmessagesに分離しています。

  • メソッド: POST
  • URI: https://api.anthropic.com/v1/messages
  • ヘッダー: x-api-key(APIキー)、anthropic-version: 2023-06-01content-type: application/json
  • 本文:
{
  "model": "claude-haiku-4-5-20251001",
  "max_tokens": 600,
  "system": "あなたは日次営業レポートのコメントを書く担当です。\n\n出力形式:\n【結論】1文で状況を言い切る\n【変化】前日・前週からの変化を3点、箇条書きで\n【要確認】異常値があれば1点だけ指摘。なければ「特になし」\n\n制約:\n- 与えられた数値のみ使用し、計算や推測はしない\n- 全体で300字以内\n- 前置きや挨拶は書かない",
  "messages": [
    {
      "role": "user",
      "content": "@{json(concat('\"以下は前日の営業サマリです。\n', outputs('作成'), '\"'))}"
    }
  ]
}

モデルは、定型的な日次要約なら軽量なHaikuで十分です。「なぜ落ちたのか」といった解釈まで求めるならclaude-sonnet-5に上げます。最初はHaikuで動かし、物足りなければ差し替える——モデル名の1行を変えるだけです。

レスポンスから本文を取り出す式はこれです。配列アクセスにも?を付けておくと、空レスポンスが返った日にフローが落ちません。

body('HTTP')?['content']?[0]?['text']

APIキーは絶対にフローへ直書きしないでください。Power Platformの「環境変数」か、可能ならAzure Key Vaultに置き、そこから参照します。フローはエクスポートで持ち出せるため、直書きは鍵を配って歩くのと同じです。

なお、HTTPアクションはプレミアムコネクタです。標準ライセンスだけで完結させたい場合は、Office ScriptsのfetchからClaude APIを呼ぶ手もありますが、外部API呼び出しをテナントのポリシーでブロックしている組織が多いため、ライセンス以前に管理者へ疎通可否を確認してください。

実際にハマる5つのポイント

1. 取得できる行が256件で止まる Excelコネクタの既定値です。アクションの「設定」からページ分割(pagination)をオンにし、しきい値を5000程度に上げます。

2. ある日突然HTTPが400で落ちる(JSONエスケープ) 最も原因が分かりにくいトラブルです。Excelのセルにダブルクォート・改行・\が入った瞬間、@{outputs('作成')}を素で埋め込んだJSONは壊れます。上のようにjson()で文字列化して埋めるか、replace(replace(outputs('作成'),'\','\\'),'"','\"')で先にエスケープしてください。「昨日まで動いていたのに」の犯人はたいていこれです。

3. 日付が「45678」のような数字で返る Excelのシリアル値です。式で変換するならaddDays('1899-12-30', int(<値>), 'yyyy/MM/dd')。前述のとおり、Excel側で文字列列を作っておくほうが確実です。

4. 日付が1日ずれる utcNow()をそのまま使うと、朝8時の実行でも前日扱いになることがあります。convertTimeZone(utcNow(),'UTC','Tokyo Standard Time','yyyy-MM-dd')で明示的に変換します。

5. APIが落ちた日にフローごと止まる HTTPアクションに「再試行ポリシー」(指数間隔・4回程度)を設定し、後続の配信アクションの実行条件に「失敗した場合」を追加して、エラー時は数値だけのシンプルなレポートを送ります。コメントが付かなくても数字は届く設計です。

ただし、静かにフォールバックすると誰も障害に気づきません。本文の冒頭に「※コメント生成に失敗しました(数値のみ)」の一行を必ず入れ、管理者宛てのメールも1通飛ばしておく。ここまでやって初めて運用として完結します。

コストと運用の現実

トークン量で見積もると判断しやすくなります。集計10行なら入力は500トークン前後、出力も300字=400トークン程度。1日1回・月30回動かしても合計3万トークンほどで、軽量モデルなら誤差のような金額です(単価は改定されるため、実際の費用は公式の料金ページで最新値を突き合わせてください)。削減できる工数を考えれば、回収は一瞬です。

運用で効くのは、生成されたコメントもExcelに追記して残すことです。フローの最後に「表に行を追加」を挟み、日付・入力データ・出力コメントを蓄積しておく。プロンプトを直したときの比較材料になり、「先月のこの日は何て書いてたっけ」にも即答できるようになります。

まとめ

  • 計算はExcel、文章化はClaude、配線と配信はPower Automate——役割を混ぜない
  • Excelはテーブル化+集計シートを作り、渡すデータを小さくする
  • プロンプトはsystem、データはmessages。APIキーは環境変数へ
  • 256行制限・JSONエスケープ・シリアル値・タイムゾーン・エラー時フォールバックの5点を先に潰す

まずは「毎朝8時にSummaryシートを読んでTeamsに投げるだけ」のフローを作ってみてください。Claudeを挟むのはその後で構いません。動く1本があれば、そこから育てるのは驚くほど簡単です。


関連記事

あわせてチェック