Power AutomateからOfficeスクリプトを実行してExcelを自動操作する方法

Power AutomateからOfficeスクリプトを実行してExcelを自動操作する方法

Power Automateのクラウドフローだけで在庫表や集計表を自動更新しようとすると、セルの書式設定や複雑な計算式の組み立てでつまずくことがあります。

クラウドフローの標準アクションは、行の追加や値の取得は得意でも、セル単位の細かい操作は苦手です。

この苦手な部分をOfficeスクリプトに任せることで、Power Automateからワンステップでセル単位の操作や書式設定まで自動化できます。

Power AutomateとOfficeスクリプトの連携を相談する

完成イメージ(Power AutomateからOfficeスクリプトでExcelを直接操作する)

Power AutomateからOfficeスクリプトを呼び出す構成では、役割分担が明確です。

フロー全体の流れ制御はPower Automateが担い、Excelブックの中身に対する細かい操作はOfficeスクリプトが担います。

たとえばフォームの回答をトリガーに表へ行を追加する処理は、Power Automate単体でもできます。

一方、追加した行の書式を整えたり、複数シートをまたいだ集計を行ったりする処理は、Officeスクリプト側に任せたほうが確実です。

クラウドフロー単体で足りる範囲と、Officeスクリプトを併用したほうがよい範囲を先に整理しておきます。

処理内容

クラウドフロー単体

Officeスクリプト併用

表への行の追加・値の取得

得意

不要なことが多い

セルの書式設定・条件付き書式

苦手

得意

複数シートをまたいだ集計・計算式の組み立て

苦手

得意

外部サービスとの連携(メール送信・承認など)

得意

不要なことが多い

この役割分担さえ決めておけば、フロー全体を複雑にせず、Excel側の処理だけをOfficeスクリプトに切り出せます。

Officeスクリプトの事前準備(ライセンスと保存場所)

Power AutomateでOfficeスクリプトを使うには、Microsoft 365のビジネスライセンスが必要です。

Office 365 Enterprise E1ライセンスとOffice 365 F3ライセンスでも、Power Automate経由でスクリプトを使うこと自体はできます。

ただし、Excel側でPower Automateを直接統合することはできません。

スクリプトの保存場所も、この後の手順の組み方を左右する要素です。

「スクリプトの実行」アクションを使う場合、スクリプトの場所は常にOneDriveになります。

スクリプトをチームのSharePointサイトに保存している場合に使うのが、「SharePointライブラリからスクリプトを実行する」アクションです。

このアクションでは、ブックの場所とスクリプトの場所を個別に指定する形になります。

出典:Microsoft Learn「Power Automate を使用した Office スクリプトの実行」

Power AutomateからOfficeスクリプトを実行する手順

事前準備が整ったら、次の順番でOfficeスクリプトを作成し、フローから呼び出します。

Step1. Officeスクリプトを作成する

Excelの「自動化」タブから「タスクの自動化」を選び、新しいスクリプトを作成します。

操作を記録して自動生成する方法と、TypeScriptで直接書く方法のどちらでも作成できます。

Step2. フローに「スクリプトの実行」を追加する

Power Automateのフローで、Excel Onlineコネクタから「スクリプトの実行」アクションを追加します。

ブックの場所・ドキュメントライブラリ・ファイル・スクリプト名を指定すると、Step1で作成したスクリプトが呼び出せる状態になります。

Step3. パラメータを受け渡す

スクリプトとフローの間では、静的な値・式・動的コンテンツをパラメータとして渡せます。

以下は、フォームの回答値をスクリプトに渡し、表に行を追加したうえで平均値を計算してフローに返す最小構成のサンプルです。

function main(workbook: ExcelScript.Workbook, newData: string): number {
  // 新しい値を表に追加する
  const table = workbook.getTable("SurveyTable");
  table.addRow(-1, [newData]);

  // 現在の合計値を取得する
  const satisfactionColumn = table.getColumnByName("Current Satisfaction");
  const values = satisfactionColumn.getRangeBetweenHeaderAndTotal().getValues();
  let total = 0.0;
  values.forEach((value) => {
    total += value[0] as number;
  });

  // 平均値を返す
  return total / values.length;
}

テーブル名や列名は自社のブックに合わせて書き換える前提です。

入力パラメータの型は、渡し元のアクションが返す型に合わせる必要があります。

Forms連携のようにすべて文字列型で渡ってくる場合は、string型で受け取る形です。

Step4. テスト実行で確認する

フローを保存したら、手動トリガーでテスト実行し、Officeスクリプトの戻り値がフローの後続アクションに正しく渡っているかを確認します。

戻り値が想定と違う場合は、Excel側でスクリプト単体を実行し、意図した値が返るかを先に確認しておくと切り分けが早くなります。

Officeスクリプトを作成する→スクリプトの実行を追加する→パラメータを受け渡す→テスト実行で確認する、Officeスクリプト連携の4Step

Officeスクリプト実行でつまずきやすいポイント

手順どおりに組んでも、実際に運用を始めると2つの点でつまずきやすくなります。

ひとつは実行時間の制約です。

Officeスクリプトの実行には制約があるため、大量データの一括処理を1回のスクリプト実行に詰め込もうとすると、途中で止まってしまうことがあります。

具体的な条件は変更される可能性があるため、公式ドキュメントで最新の内容を確認してください。

もうひとつはエラー発生時の切り分けです。

フロー全体がエラーで止まった場合、原因がPower Automate側の設定にあるのか、Officeスクリプト側の処理にあるのかを一度に判断しようとすると時間がかかります。

まずExcel側でスクリプト単体を実行し、想定どおりの結果が返るかを確認してから、フロー側の設定を見直す順番で切り分けると原因を特定しやすい流れです。

セルへの書き込み先をSharePoint上のブックに切り替える構成については、別の記事で扱っています。


Power AutomateとOfficeスクリプトの連携でお困りではありませんか?

「クラウドフローだけではセルの書式設定まで自動化できない」「TypeScriptを書いたことがなく手順に自信が持てない」「フローとスクリプトのどちらでエラーが起きているか切り分けられない」

少しでもお心当たりがあれば、お気軽にご相談ください。

現在、Power Automateの業務自動化に関するお悩みをお伺いする 無料の個別相談 を実施しています。

Power AutomateとOfficeスクリプトの使い分けでよくある質問

Q. 追加ライセンスは必要ですか?

Power AutomateでOfficeスクリプトを使うには、Microsoft 365のビジネスライセンスが必要です。

Office 365 Enterprise E1・F3ライセンスでもPower Automate経由での利用はできますが、Excel側でのPower Automateの直接統合は含まれません。

Q. TypeScript未経験でも作れますか?

Excelの操作を記録するとTypeScriptのコードが自動生成されるため、未経験でもまず記録機能から始めることができます。

Step3のようにパラメータの受け渡しを組み込みたい場合は、記録されたコードに手を加えてパラメータや戻り値の部分を書き足す形になります。

Q. スケジュール実行だけならどちらでやるべきですか?

他のアプリと連携せず、Excel単体でスクリプトを定期実行したいだけであれば、Officeスクリプトのスケジュール機能を使うほうがシンプルです。

メール送信や他システムとの連携など複数ステップを組み合わせたい場合は、Power Automateのフローとして組んだほうが管理しやすくなります。

自動化の始め方から整理したい場合は、次の記事も参考になります。