PA45 第22回|ハンズオン手順
Officeスクリプト × Power Automate で自動集計経費(ExpenseTable)の合計を、スクリプトで集計してTeamsに通知するまで。順番どおりに進めればできます。
今日つくるもの: Excelの経費(Amount)を自動で合計集計し、その結果を Teams に通知するフロー。
🖱️ ボタンで開始→
⚙️ スクリプトで集計→
📣 Teamsに通知
⬇
まず最初に:サンプルExcelをダウンロード
pa45-vol22-survey.xlsx(経費表 ExpenseTable)/クリックすると Excel がそのまま開けます(zipではありません)
STEP 0
準備(サンプルExcel+Copilotを開く)
サンプルの経費表(ExpenseTable)を OneDrive に置き、ブラウザのExcelと M365 Copilot チャットを開きます。
⬇ サンプルExcel(経費表 ExpenseTable)をダウンロード
- ダウンロードした pa45-vol22-survey.xlsx を、OneDrive(職場・学校)にアップロードします。
- 迷ったら OneDrive の PA45 という新しいフォルダに入れておくと、あとで探しやすいです。
- OneDrive でそのファイルをクリックして開く(ブラウザのExcelで開きます)。表の名前は「ExpenseTable」、列は Name/Amount/Date です。
- 別のタブで M365 Copilot チャットを開いておきます(職場・学校アカウントでサインインした Copilot。例:copilot.microsoft.com、または Teams・Office 画面の Copilot ボタン)。
⚠️ 「自動化」タブが出ないときは:
- 会社・学校アカウント(法人・教育の Microsoft 365)でサインインしているか確認(個人向け Personal・Family は非対応)。正しいアカウントでサインインし直すと出ます。
- ファイルは OneDrive for Business / SharePoint に置いたものを開く(ローカルや個人 OneDrive はNG)。
- それでも出なければ、管理者が Officeスクリプト をオフにしている可能性(M365 管理センターで確認・反映に時間がかかることあり)。
※「自動化」タブは条件がそろえば自動で表示されます。リボンから“追加”する設定ではありません(=出ない時はアカウント/ライセンス/管理者設定のどれかが原因)。
STEP A
Copilot にスクリプトを書いてもらう
コードは書きません。やってほしいことを日本語で伝えるだけ。Copilot が Officeスクリプトを書いてくれます。
- M365 Copilot チャットの入力欄に、下の 「お願い文」をコピーして貼り付けます。
- 続けて、Excelの表(見出し+データ)をコピーして貼り付けます(Name・Amount・Date)。
- 表をドラッグして選択 → Ctrl+C → Copilotの入力欄で Ctrl+V。
- 送信すると、Copilot が Officeスクリプト(コード)を書いてくれます。そのコードをコピーします(次の STEP B で使います)。
🟣 Copilotへのお願い文(コピーして貼る)
次のExcelの表について、Officeスクリプト(ExcelScript / TypeScript)を書いてください。
・表の名前は「ExpenseTable」(列:Name・Amount・Date)
・「Amount」列の合計を計算する
・合計を、表の2つ下のセルに「経費 合計」というラベルと並べて書き出し、そのセルを黄色に着色する
・見出し行を緑色+白文字(太字)にする
・計算した合計を、関数の戻り値(return)として返す ← Power Automateで使うため
main関数の戻り値の型は number にしてください。
💡 一番大事なのは最後の一行:「合計を戻り値(return)で返す」。これが無いと、あとで フローが合計を受け取れません。だからお願い文に必ず入れておきます(初心者がつまずく所を、文章で先回り)。
⚠️ AIのコードは、たまに一発で動かないことがあります。 エラーが出たら、次の STEP B の 「完成版(お守り)」を貼ればOK。今日は「書けなくても、頼めば作れる」体験が目的です。
STEP B
Excel に貼って、保存して実行
Copilot が書いたコードを、Excelの「自動化」タブに貼って動かします。
- Excel(Web)→ 自動化 タブ →「新しいスクリプト」を選びます(コードエディターが開きます)。
- 最初から入っているコードをすべて消して、STEP A で Copilot が書いたコードを貼り付けます。
- スクリプト名を 「経費の集計」 に変更し、「スクリプトの保存」を押します。
- 「実行」を押して、Excelで見出しに色がつき、表の下に合計が書き出されるか確認します。
実画面:「自動化」タブ →「新しいスクリプト」。表は ExpenseTable(Name・Amount・Date)。
🛟 完成版(お守り): Copilot の結果がうまく動かないときは、下のコードをそのまま貼れば必ず動きます(getValuesで合計を計算し、戻り値でも返します)。当日は全員これを配ります。
経費の集計(完成版・お守り)
function main(workbook: ExcelScript.Workbook): number {
// 表「ExpenseTable」を取得(無ければ最初の表)
let table = workbook.getTable("ExpenseTable");
if (!table) { table = workbook.getTables()[0]; }
// ① 見出し行に色をつける(緑+白字・太字)
const header = table.getHeaderRowRange();
header.getFormat().getFill().setColor("#217346");
const headerFont = header.getFormat().getFont();
headerFont.setColor("#FFFFFF");
headerFont.setBold(true);
// ②「Amount」列の合計を計算
const headerValues = header.getValues()[0].map(v => String(v));
const amountIndex = headerValues.indexOf("Amount");
const bodyValues = table.getRangeBetweenHeaderAndTotal().getValues();
let sum = 0;
for (const row of bodyValues) {
const n = Number(row[amountIndex]);
if (!isNaN(n)) { sum += n; }
}
const total = sum;
// ③ 表の2つ下に「経費 合計」+数値を書き出す
const below = table.getRange().getLastRow().getOffsetRange(2, 0);
below.getCell(0, 0).setValue("経費 合計");
const totalCell = below.getCell(0, 1);
totalCell.setValue(total);
totalCell.getFormat().getFont().setBold(true);
totalCell.getFormat().getFill().setColor("#FFF7ED");
// ④ 合計を返す(フローのTeams通知で使う)
return total;
}
⬇ 完成版スクリプトをファイルでダウンロード
このスクリプトがやること: 見出しに色をつけ → Amount の合計を計算 → 表の下に書き出し → 合計を “返す”。最後の「返す」があるので、次のフローで結果を受け取って Teams に流せます。
実画面:「実行」して スクリプトが正常に実行されました と出ればOK。表の下に合計が入ります。
STEP C
Power Automate で自動化する
make.powerautomate.com を開いて、手動で動くフローを1本作ります。保存したスクリプトを呼び出し、結果を Teams に通知します。
- 左メニューの 「作成」 →「インスタント クラウド フロー」を選びます。
- フロー名を 「Vol22 経費を集計して通知」 などに。トリガーは 「フローを手動でトリガーします」を選び、「作成」。
- 手動トリガー=ボタンを押すと動くフロー。今日はこれで十分です。
- +(新しいステップ) →アクションを追加。検索ボックスに スクリプトの実行 と入れ、Excel Online (Business) の 「スクリプトの実行」を選びます。
- サインインを求められたら、会社・学校のアカウントでサインイン。
- 「スクリプトの実行」に、次を指定します。
- 場所(Location):OneDrive for Business
- ドキュメント ライブラリ:OneDrive
- ファイル:フォルダの絵から pa45-vol22-survey.xlsx を選ぶ
- スクリプト:経費の集計 を選ぶ
- + →アクションを追加。Teams メッセージを投稿 で検索し、Microsoft Teams の 「チャットまたはチャネルでメッセージを投稿する」を選びます。
- Teams の投稿先を指定します。
- 投稿者:Flow bot
- 投稿先:Chat with Flow bot(自分あて)※チャネルでもOK
- Recipient(宛先):自分(デモなら講師のアカウント)
- メッセージ:下の例のように書き、合計の部分は動的コンテンツの result(=スクリプトの実行の戻り値)を挿入
実画面:「スクリプトの実行」で ファイル と スクリプト(経費の集計) を選ぶ。
Teams メッセージ本文(例)
📊 経費の集計が終わりました。
経費の合計は 【ここに result を挿入】 円 です。
(このメッセージは Power Automate が自動送信しています)
💡 合計の入れ方: 本文の入力欄で「動的コンテンツ」を開き、スクリプトの実行 → result を選びます。式で書くなら body('スクリプトの実行')?['result'] です。
実画面:投稿者=Flow bot/本文の合計に result を差し込む。
- 右上の 「保存」を押します。
仕上げ:テストして動かす
- 右上の 「テスト」 →「手動」 →「テスト」→「実行」。
- 数秒待つと、各ステップに緑のチェック ✓ が付けば成功です。
- Teams を開いて、Flow bot からの通知(経費の合計)が届いているか確認します。
- Excel も見ると、見出しに色がつき、表の下に「経費 合計」が書き出されています。
実画面:テスト成功。3つのステップすべてに 緑チェック ✓ が付けばOK。
うまくいかないとき:
- 「スクリプトが見つからない」→ スクリプトの保存先が OneDrive になっているか確認。
- ファイルが選べない → サンプルExcelが OneDrive(職場・学校)に置いてあるか確認。
- 合計が入らない → Teams本文の合計部分に、動的コンテンツ result を入れたか確認。
知っておく上限: 1日 約1,600回まで/1回 120秒以内/ファイル 25MBまで/スクリプトから外部サイトの呼び出しは不可。ふつうの集計なら当たりません。(出典:Microsoft Learn)