Power Automateでは、「毎月15日に動かす」のように日付が決まっている処理は、繰り返し(Recurrence)トリガーの設定だけで組めます。
ただ、動かしたい日が月や年によって変わる場合、繰り返しトリガーでは設定できません。そこで私は、毎日フローを起動して「今日が処理を実行する日かどうか」を判定し、該当しない日は何もせずに止める形で実装しました。
この記事でできること
- 処理を実行する日をSharePointリストで管理する
- 毎日フローを起動して、今日が該当日かどうかを判定する
- 該当しない日は何もせず、成功した状態で停止する
- 該当した日は、後続の処理を行う
完成イメージ


フローは平日の朝に動きます。該当しない日は条件のFalse側にある終了アクションで止まり、実行履歴には成功として記録されます。該当した日だけ、条件の下に並べた処理へ進みます。
全体の実装構成
上から順に、次のアクションを並べています。
| アクションの順番 | アクション | 役割 |
|---|---|---|
| 1 | 繰り返し(Recurrence) | 平日の毎朝7時に起動する |
| 2 | InitMonth(変数を初期化する) | 今日の「月」を整数で持つ |
| 3 | InitDay(変数を初期化する) | 今日の「日」を整数で持つ |
| 4 | GetScheduleRulesB(複数の項目の取得) | 起動日リストの全行を取得する |
| 5 | FilterBStartDay(アレイのフィルター処理) | 今日と一致する行だけに絞り込む |
| 6 | 条件 | 絞り込んだ件数が1件以上かどうかで分ける |
| 7 | 終了(Terminate) | 条件のFalse側に置き、該当日でない日はここで止める |
6の条件の下に、実際に動かしたい処理を並べます。この記事では判定するところまでを扱うので、後続の処理の中身は問いません。
実装手順
Step1|起動日を管理するリストを用意する
SharePointリストを1つ作ります。1行が1回の起動日にあたります。
| 列(内部名) | 種類 | 中身 |
|---|---|---|
| Title | 1行テキスト | 起動日の名前(人が見て分かる用) |
| RuleMonth | 数値 | 起動する月 |
| RuleDay | 数値 | 起動する日 |

列の内部名は、日本語で作成すると式の中で列名を扱うときに分かりにくくなるため、英語で作成しています。
このリストには年を持たせていません。判定に使うのは月と日だけです。
Step2|毎朝決まった時間に起動するトリガーを置く
トリガーは繰り返し(Recurrence)です。私は次の設定にしました。
| 項目 | 設定値 |
|---|---|
| 間隔 | 1 |
| 頻度 | 週 |
| タイムゾーン | (UTC+09:00) 大阪、札幌、東京 |
| 設定曜日 | 月・火・水・木・金 |
| 設定時刻 | 7 |
| 設定分 | 0 |
フローは平日の朝に動きますが、実際に処理まで進むのはSharePointリストの起動日だけです。残りの日は次のStepで作る判定に引っかからず、何もせずに終わります。
Step3|今日の月と日を変数に取り出す
「変数を初期化する」を2つ置き、種類は整数にします。
// InitMonth の値
int(convertFromUtc(utcNow(),'Tokyo Standard Time','MM'))
// InitDay の値
int(convertFromUtc(utcNow(),'Tokyo Standard Time','dd'))
変数名はそれぞれ intMonth・intDay にしています。
utcNow() はUTCの時刻を返すため、そのまま月日を取り出すと日本時間とずれる日が出ます。convertFromUtc で東京の時刻に変換してから、月と日を取り出しています。
int() で全体を囲んでいるのは、このあとでリストの数値列と比較するときに型をそろえるためです。
Step4|リストの起動日と今日を突き合わせる
「複数の項目の取得」でStep1のリストを取得し、続けて「アレイのフィルター処理」で絞り込みます。
差し込み元(From)には、取得アクションの出力を指定します。
// アレイのフィルター処理の「差し込み元」
outputs('GetScheduleRulesB')?['body/value']
フィルターの条件は詳細モードに切り替えて、次の式を入れます。
// フィルター条件(詳細モード)
and(equals(item()?['RuleMonth'], variables('intMonth')),
equals(item()?['RuleDay'], variables('intDay')))

リストの各行について、月と日の両方が今日と一致するかを見ています。
このアクションが返すのは配列です。今日が起動日として登録されていれば1件入り、登録されていなければ0件になります。次のStepでは、この件数を見て分けます。
Step5|起動日でない日は何もせずに止める
該当日でない日に後続の処理をスキップさせるため、条件アクションを置きます。設定は次のとおりです。
| 項目 | 設定値 |
|---|---|
| 左辺(式) | length(body('FilterBStartDay')) |
| 演算子 | 以上 |
| 右辺 | 1 |
そして、True側は空のままにし、False側にだけ「終了(Terminate)」を置いて、状態を「Succeeded」にします。
True側を空にするのは、実行したい処理をすべてTrue分岐の中に入れると入れ子構造になって読みにくいためです。状態を「Succeeded」にするのは、該当日でないこと自体は異常ではないためです。
終了アクションはフロー全体を止めます。該当しない日をFalse側の終了アクションで止めておけば、該当日に実行したい処理を条件の下にそのまま並べられます。
ハマりポイントまとめ
| 項目 | 起きたこと | 対処 |
|---|---|---|
| フィルターの条件 | 基本モードのままでは、2つの条件を組み合わせた指定ができない | 詳細モードに切り替えて and() の式で書く |
| 比較する値の型 | リストの数値列が小数として渡ってくることがある | 型を int() で整数にそろえる |
まとめ
今回のポイントは次の3つです。
- 繰り返し(Recurrence)トリガーに書けない日程は、毎日起動して「今日が該当日か」を判定する形にすると扱える
- 実行する日はフローの中ではなくリストで持つと、日付が変わってもフローを直さずに済む
- 該当しない日は、条件のFalse側に置いた終了アクション(Succeeded)で止める
判定の型を1つ作っておくと、他の業務にそのまま流用できます。Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。
あわせて読みたい
条件を通過した後に動かす処理の例(Plannerのタスク設定)として、次の記事も参考にしてください。




コメント