本記事は https://qiita.com/sonooh/private/2759f1cd8ca2afd8b668 の続きです。
前回は Power Automate を用いて稼働入力表を自動作成するフローを構築しましたが、祝日の設定を手動で行う必要があるという課題が残っていました。今回はその部分を改善してみます。
やりたいこと
前回の記事で紹介した稼働入力表の自動作成フローでは、祝日の一覧は Office スクリプト内に事前入力しておく必要がありました。現在のコードでは今年分の祝日しか入力されていないため、毎年祝日を確認して更新をする必要があるわけです。一度作成すると、後から構造や手順を忘れてしまいがちなので、可能な限りメンテナンス不要で使い続けられるような構成にしておきたいところです。
「年に一度の更新だから手動でもいいのでは?」という考え方もありますが、今回は自動化による利便性向上を目指します。
これを何とかして外部から取得し、毎年祝日を更新しなくてもいい状態にしたいと思います。
// 祝日一覧(ISO形式)
const holidays: string[] = [
"2025-01-01", "2025-01-13", "2025-02-11", "2025-02-23", "2025-02-24",
"2025-03-20", "2025-04-29", "2025-05-03", "2025-05-04", "2025-05-05", "2025-05-06",
"2025-07-21", "2025-08-11", "2025-09-15", "2025-09-23", "2025-10-13",
"2025-11-03", "2025-11-23", "2025-11-24"
];
上記の配列の内容を自動的に格納するには、何らかの手段で外部から祝日を取得して Office スクリプトに配列として渡してやる必要がありそうです。
まずは「日本の祝日」を外部から取得する方法を考えてみましょう。
「日本の祝日」を取得してみよう
Power Automate から Office 365 Outlook のコネクタのアクション「イベントのカレンダー ビューの取得(V3)」をフローに追加することで、Outlook に登録されているカレンダー情報として特定の期間の祝日情報をカレンダー形式で取得することができます。
上記の例で Start Time と End Time に謎の文字列が入っていますね。ここには PowerFx で次月の初日( startOfMonth(addToTime(utcNow(), 1, 'Month')) )と次月の最終日( formatDateTime(addDays(startOfMonth(addToTime(utcNow(),2,'Month')),-1),'yyyy-MM-dd') )を設定します。
PowerFx の詳細な説明は割愛しますが、フロー起動日が 10 月であった場合は 11 月の初日から最終日までの期間の祝日の情報が取得できると思ってください。
このように設定することで、フローの後段で取得したカレンダーの情報を扱うことができます。
最終的に得たい情報はこれらの配列であるため、取得できたカレンダーの情報を「JSON の解析」で加工したのち、「変数を初期化する」で定義した配列に追加していきます。
「JSON の解析」は、「イベントのカレンダー ビューの取得(V3)」で取得した body 情報の内容を、構造化して必要な情報(今回でいうと祝日が情報として記録されている部分) を抽出するための処理です。
一度「イベントのカレンダー ビューの取得(V3)」までを追加したうえでテスト実行し、得られた body の情報を「サンプルペイロードを使用してスキーマを生成する」のフォームに入力することで、"Schema"が自動入力されて以降の処理で後続化した情報を扱えるようになります。
取得した「日本の祝日」を Office スクリプトに渡してみよう
さて、前セクションまでで Power Automate クラウド フロー上は配列に祝日を入力するところまで実装できました。ここからは Office スクリプト側でこの取得した祝日の配列を受け取れるよう修正していきます。
Office スクリプト側の修正箇所
該当箇所としてはこんな感じです。Power Automate 側から配列を受け取れるよう、引数として任意の名称の文字列配列を定義してやります。
// Office スクリプト側で引数として文字列の配列を受け取れるように holidayInput を定義する
+function main(workbook: ExcelScript.Workbook, holidaysInput: string[]) {
-function main(workbook: ExcelScript.Workbook) {
const users = ["田中", "佐藤", "鈴木", "高橋"];
...
// 祝日一覧(ISO形式)を「日本の祝日」で取得した配列にする
+ const holidays: string[] = holidaysInput;
- const holidays: string[] = [
- "2025-01-01", "2025-01-13", "2025-02-11", "2025-02-23", "2025-02-24",
- "2025-03-20", "2025-04-29", "2025-05-03", "2025-05-04", "2025-05-05", "2025-05-06",
- "2025-07-21", "2025-08-11", "2025-09-15", "2025-09-23", "2025-10-13",
- "2025-11-03", "2025-11-23", "2025-11-24"
- ];
Power Automate 側の修正箇所
Power Automate フロー側では、Office スクリプトに対して配列を渡すよう設定します。
「スクリプトの実行」アクションで再度ファイルとスクリプトを指定すると、以下のようにスクリプトのパラメータを入力する欄が表示されます。動的コンテンツで、先ほど配列として定義し祝日の情報を入力した変数を指定してやりましょう。
全体構成・動作確認
全体の構成としてはこんな感じです。Excelファイル側に前の記事で作成したシートが残っている場合は削除し、再度テストを起動してうまく祝日の着色がされていれば成功となります。
取得した祝日が反映され、「文化の日」の 11/3 に着色されている

まとめ
いかがだったでしょうか。今回の改善により、今後の稼働入力表作成の手間が大幅に削減できるはずです。
このように Power Automate フローのアクションで取得した各情報を、Office ファイル内の自動化に用いることができることも Office スクリプトと Power Autoamte フローの合わせ技のメリットです。
ぜひいろいろな場面で活用してみてください。





