目次
ご挨拶
イデアルの藤田と申します。
どうぞよろしくおねがいします。
やりたいこと
PowerAutomateで毎月の最終営業日になったら
リマインドの通知を自動化したい。
ロジック
処理に必要な情報を書き出します。
- 毎週月曜日から金曜日のAM09:00にPowerAutomateを起動
- 当月末の日付を取得
- 当月末の月末の曜日を取得
- 曜日が土曜日であれば:取得した日付を-1日(金曜日の日付を取得するため)
- 曜日が日曜日であれば:取得した日付を-2日(金曜日の日付を取得するため)
- 取得した日付が祝日であれば:取得した日付を-1日
- 祝日と土曜が連なる場合を考慮し、ループ処理とする
※月末に祝日が連続する月は掲載時点ではありませんが、
ループ処理内に含めております。 - PowerAutomateが起動した日付と取得した最終営業日が一致した場合、Teamsに通知
PowerAutomate全体構成
PowerAutomate作成手順
スケジュール済みクラウドフロー構築
まずは、「毎週月曜日から金曜日のAM09:00にPowerAutomateを起動」を作成します。
[新しいフロー]-[スケジュール済みクラウドフロー]を選択し、
下記画像のように設定後し、作成ボタンを押下。
日本時間の年月日を取得
当月の最終営業曜日を取得するための準備として、
日本時間の年月日をyyyyMMdd
形式で取得します。
以下、作成順です。
- [+ 新しいステップ] - [組み込み]タブ - [日時] - [現在の時刻]
[+ 新しいステップ] - [組み込み]タブ - [日時] - [タイムゾーンの変換]
項目 設定値 基準時間 [現在の時刻]@body('現在の時刻') 書式設定文字列 yyyyMMdd 変換元のタイムゾーン (UTC)協定世界時 変更先のタイムゾーン (UTC)大阪、札幌、東京
変数作成
変数を作成していきます。
- [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数を初期化する]
以下、各変数の用途をざっくり記述します。
- -N日=当月の最終営業日と曜日取得時に利用
※初期値が設定されていることにご注意ください - 曜日=最終営業日と判定された曜日を格納
- 最終営業日=最終営業日と判定された年月日を格納
- ループ判定=ループ判定を格納し、分かりやすくするため
- 祝日判定結果=祝日判定結果を格納
処理
ループ処理
制御ループ処理を用いて、当月の最終営業日を取得するために[Do Until]を作成します。
- [+ 新しいステップ] - [組み込み]タブ - [コントロール] - [Do until]
- ループ処理終了条件:[ 変数:ループ判定 ] [ 次の値と等しい ] [ OK ]
月末の日付取得
ループ内にて月末の日付と曜日を取得し、変数へ格納していきます。
- [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の設定]
項目 | 設定値 |
---|---|
名前 | 年月日 |
値(※) | addDays(startOfMonth(addDays(startOfMonth(convertFromUtc(utcNow(),'Tokyo Standard Time')),32)),variables('-N日'),'yyyyMMdd') |
実行結果、[変数:年月日]には[20220430]が入ります。
※関数の処理について、ざっくり記述します
1. 現在の日時(20220415 とする)を取得。
(例 2022-04-15T00:00:00.0000000)
2. startOfMonthにてタイムスタンプの月の開始を返します。
(例 2022-04-15T00:00:00.0000000 ⇒ 2022-04-01T00:00:00.0000000)
3. 次にaddDaysにて「2. startOfMonth~」より取得した値に32日を追加します。
(例 2022-04-01T00:00:00.0000000 ⇒ 2022-05-03T00:00:00.0000000)
4. startOfMonthにて「3. 次にaddDays~」より取得した値の月の開始を返します。
(例 2022-05-03T00:00:00.0000000 ⇒ 2022-05-01T00:00:00.0000000)
5. 最後にaddDaysにて「4. startOfMonth~」より取得した値に-N日(初期値:-1)を追加します。
(例 2022-05-01T00:00:00.0000000 ⇒ 2022-04-30T00:00:00.0000000)
6. 「2022-04-30T00:00:00.0000000」をyyyyMMdd形式(年月日)で取得。
(例 2022-04-30T00:00:00.0000000 ⇒ 20220430)
月末の曜日取得
続いて、ループ内にて月末の曜日を取得し、変数へ格納していきます。
- [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の設定]
項目 | 設定値 |
---|---|
名前 | 曜日 |
値 | addDays(startOfMonth(addDays(startOfMonth(convertFromUtc(utcNow(),'Tokyo Standard Time')),32)),variables('-N日'),'dddd') |
結果、[変数:曜日]には[Saturday]が入ります。
分岐処理
取得した月末の年月日・曜日の情報をもとに、
当月の最終営業日であるか処理していきます。
取得した曜日が土曜日であるか
- [+ 新しいステップ] - [組み込み]タブ - [コントロール] - [条件]
- 分岐条件:[ 変数:曜日 ] [ 次の値と等しい ] [ Saturday ]
はいの場合
[+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の値を増やす]
項目 設定値 名前 -N日 値 -1 [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の設定]
項目 設定値 名前 ループ判定 値 NG
いいえの場合
- [+ 新しいステップ] - [組み込み]タブ - [コントロール] - [条件]
- 分岐条件:[ 変数:曜日 ] [ 次の値と等しい ] [ Saturday ]
- 分岐条件:[ 変数:曜日 ] [ 次の値と等しい ] [ Saturday ]
- [+ 新しいステップ] - [組み込み]タブ - [コントロール] - [条件]
取得した曜日が日曜日であるか判定
はいの場合
[+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の値を増やす]
項目 設定値 名前 -N日 値 -2 [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の設定]
項目 設定値 名前 ループ判定 値 NG
いいえの場合
取得した日付が祝日であるか判定
分岐条件:[ empty(variables('祝日判定結果')) ] [ 次の値と等しい ] [ false ]
はいの場合
[+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の値を増やす]
項目 設定値 名前 -N日 値 -2 [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の設定]
項目 設定値 名前 ループ判定 値 NG
いいえの場合
[+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の設定]
項目 設定値 名前 ループ判定 値 NG
簡易ではありますが、2022年4月に実行した場合の処理イメージとなります。
- 月末の日付取得(変数:-N日=-1)=20220430
- 曜日を取得=Saturday(土曜日)
- 分岐処理の結果、取得した曜日は土曜日と判定。
- [変数:-N日]の値に-1増やす。
- [変数:ループ判定] NGに設定。
- 再度、ループ処理実行。
- 月末の日付取得(変数:-N日=-2)=20220429
- 曜日を取得=Friday(金曜日)
- 分岐処理の結果、取得した曜日は土曜日ではないと判定。
- 分岐処理の結果、取得した曜日は日曜日ではないと判定。
- 日本の休日より2022年4月29日の情報取得
- 日本の休日取得結果、祝日判定(昭和の日)
- [変数:-N日]の値に-1増やす。
- [変数:ループ判定] NGに設定。
- 再度、ループ処理実行。
- 月末の日付取得(変数:-N日=-3)=20220428
- 曜日を取得=Thursday(木曜日)
- 分岐処理の結果、取得した曜日は土曜日ではないと判定。
- 分岐処理の結果、取得した曜日は日曜日ではないと判定。
- 日本の休日より2022年4月28日のイベント情報取得
- 日本の休日取得結果、祝日ではないと判定。
- 20220428が最終営業日と判定。
- [変数:年月日] 20220428に設定。
- [変数:ループ判定] OKに設定。
- ループ処理終了。
分岐処理
最終営業日と判定した年月日と
PowerAutomateが起動した年月日を比較し、
分岐処理を実行します。
- [+ 新しいステップ] - [組み込み]タブ - [コントロール] - [条件]
- 分岐条件:[ 変数:年月日 ] [ 次の値と等しい ] [ 変換後の時間 ]
- はいの場合
- [+ 新しいステップ] - [組み込み]タブ - [変数] - [変数の値を増やす]
項目 | 設定値 |
---|---|
投稿者 | フローボット |
投稿先 | フローボットとチャットをする |
Recipient | <自身のメールアドレス> |
メッセージ | <任意のメッセージ> |
- いいえの場合
- 処理なし
長々と記載しましたが、作成手順は以上です。
結果
最終営業日と判定した年月日と
PowerAutomateが起動した年月日が一致した場合のみ、Teamsに通知が来ます。
まとめ
以上の手順でPowerAutomateを作成したら、実際に通知が届くかどうかを確認してみましょう。 最終営業日にTeamsでリマインドされると、締め切りや報告などの作業を忘れずに行えます。 ただし、祝日の情報はOutlookのカレンダーに依存するため、正確さを保証するものではありません。祝日が変更された場合は、カレンダーの更新を忘れずに行ってください。
以上、お読みいただきありがとうございました。