今日もローコードで業務改善をしたい

Power AutomateやPower Appsなど、Power Platformに関して学んだことを書いています。

行事の〇日前になったら対象者に自動でメールを送る

はじめに

業務で行事の○日前になったら対象者にメールを送りたいということありませんか?

今回はメールを送信する対象者をExcelテーブルで作成し、
Power Automateで行事の前日に対象者に自動メールを送るフローをご紹介します!

フロー全体図


毎日決まった時間にフローを実行して、Excelテーブルに翌日の日付があるレコードがあったらメールを送るという仕組みにしています。

用意するもの

Excelテーブル

今回はこんなExcelテーブルを用意しました。
メールを送信することを考えていますので、「メールアドレス」と「送信日(日付が入る)」列は必ず作成してください。
また、「送信日」列が対象者の行事日ということにします。

Excelの保存先はSharePointもしくはOneDriveになりますが、今回はSharePointに保存したことを前提に説明します。

フローの作成手順

1.繰り返し

トリガーにはスケジュールから「繰り返し」アクションを選択し、以下画像のように設定します。

設定時刻は任意で決めてください。タイムゾーンを(UTC+09:00)大阪、札幌、東京にすることを忘れずに!

これで1日1回、決まった時間にフローが自動実行されます。

2.作成

「+新しいステップ」からデータ操作の「作成」アクションを選択し、「式」から以下をコピペします。

addDays(addHours(utcNow(),9),1,'yyyy/MM/dd')


ここのアクションで、1日後の日付を作成しています。

もし1日前の日付を作成したい場合は、以下のようにするといいです。
addDays(addHours(utcNow(),9),-1,'yyyy/MM/dd')

当日の日付を作成したい場合は、もうお分かりかと思いますが、以下になります。
addDays(addHours(utcNow(),9),0,'yyyy/MM/dd')
フロー実行時に今日の日付が入ったレコードにメールを送りたい場合は、上記の式が使えます♪

3.表内に存在する行を一覧表示

「+新しいステップ」からデータ操作の「作成」アクションを選択し、以下を指定します。
※DataTime形式は必ず「Serial Number」にしてください。

4.Apply to each

「+新しいステップ」からコントロールの「Apply to each」アクションを選択し、動的なコンテンツより「表内に存在する行を一覧表示」の「value」を選択します。

5.条件

Apply to eachアクション内の「アクションの追加」からコントロールの「条件」アクションを選択し、以下を指定します。

右辺:動的なコンテンツより「作成」アクションの「出力」
左辺:式から以下をコピペ

if(empty(items('Apply_to_each')?['送信日']),null,addDays('1899-12-30',int(items('Apply_to_each')?['送信日']),'yyyy/MM/dd'))

Excelの日付形式の値は、1900年1月1日を1としてカウントアップされた数値になっています。
そのため、Power AutomateでExcelの日付を扱うときは日付形式に変換する必要があります。

各列の形式の判定は、Excelテーブルの1行目のデータを基に判定しているため、1行目の日付が空白だと日付形式に変換されないことが起きます。

そこで、今回は都度日付形式に変換する式にしました。
これで送信日が決まっていないレコードがあっても大丈夫です!

6.メールの送信(V2)

条件アクション「はいの場合」の「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下を指定します。

宛先:表内に存在する行を一覧表示アクションの「メールアドレス」
件名:なんでもどうぞ
本文:こちらもなんでもいいですが、分かりやすく表内に存在する行を一覧表示アクションの「名前」を指定してみました。

フローの実行

早速手動実行してみましょう。
ブログ記載時点では2022/6/22なので、成功すれば1日後の日付が入っている高橋 四郎さんへメールが届きます。

実行ポチッ!

届きました!

さいごに

本記事では空白行があっても大丈夫なフローを紹介しましたが、そもそも空白行を省く方法がありますので、ついでにご紹介します。

「表内に存在する行を一覧表示」アクションで「フィルタークエリ」を以下にします。

送信日 ne ''


これをすると、送信日列が空白のレコードはそもそも取得されなくなります。

上記を行った場合は、「条件」アクションの左辺には以下をコピペします。

addDays(‘1899-12-30’,int(items(‘Apply_to_each’)?[‘送信日']),'yyyy/MM/dd')

条件アクションで都度日付形式に変更する方法とフィルタークエリを利用する方法、お好みの方をお使いください!