📊

Power Automate の複雑な計算を Office スクリプトに実行させる

に公開

はじめに

Power Automate は複雑な計算処理が苦手です。min や max など一部の関数はサポートされていますが、合計や平均を算出する場合はループ処理が必要です。しかし、Power Automate のループは処理速度が遅く、Power Platform の要求数を消費するため注意が必要です。

https://learn.microsoft.com/ja-jp/azure/logic-apps/expression-functions-reference?WT.mc_id=M365-MVP-5002941

複雑な計算には 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