Power Automate の複雑な計算を Office スクリプトに実行させる
はじめに
Power Automate は複雑な計算処理が苦手です。min や max など一部の関数はサポートされていますが、合計や平均を算出する場合はループ処理が必要です。しかし、Power Automate のループは処理速度が遅く、Power Platform の要求数を消費するため注意が必要です。
複雑な計算には Excel が適しています。Office スクリプトを利用すると、Excel のセル値を読み書きし、数式の計算結果をフローに返すことができます。本記事では、Office スクリプトを使って Excel で計算処理を実行する方法を説明します。
実行手順
Excel のテンプレート ファイルを作成します。この Excel ファイルは商品明細と商品の合計を管理します。小計および合計のセルには数式を設定します。数式は Excel ファイル内で設定できますが、Office スクリプトからも設定可能です。

Office スクリプトを作成します。商品明細の配列をパラメーターとして受け取り、Excel ファイルに書き込み、数式の結果を返します。作成した Office スクリプトは OneDrive ではなく、SharePoint ドキュメント ライブラリに保存します。

function main(
workbook: ExcelScript.Workbook,
items: {
name: string,
price: number,
quantity: number
}[]
): number {
const worksheet = workbook.getActiveWorksheet();
const values: (string | number)[][] = [];
for (let i = 0; i < items.length; i++) {
values.push([
items[i].name,
items[i].price,
items[i].quantity
]);
}
const range = worksheet.getRangeByIndexes(1, 0, items.length, 3);
range.setValues(values);
const cell = worksheet.getCell(1, 5);
return cell.getValue() as number;
}
フロー全体の流れは以下の通りです。

商品明細を配列変数として宣言し、Office スクリプトのパラメーターとして渡します。

Excel のテンプレート ファイルをコピーします。SharePoint のファイル コピーのアクションでは変更後のファイル名を指定できないため、新しいファイル名でコピーし、後からファイル名を変更します。

ファイル名を変更するアクションはないため、REST API を利用してファイル名を変更します。新しいファイル名はタイムスタンプ形式です。

変更したファイルに対して Office スクリプトを実行します。

実行結果
計算結果が正しく返されることを確認できます。

Excel ファイルでも計算結果を確認できます。

おわりに
今回は簡単な計算処理の例を紹介しました。Power Automate と Office スクリプトを組み合わせることで、大量データの集計や複雑なロジックも自動化できます。複数シートの集計や条件付き計算なども Excel の機能を活用して効率的に処理可能です。業務自動化や省力化を目指す際は、Office スクリプトの活用も検討してみてください。
Discussion