これからPowerAutoamteで業務を効率化したいという方の参考になれば幸いです。

現場でよくある課題を、Power Automateでどう解決できるのか、一緒に見ていきましょう。
今回PowerAutomateで解決したい課題はこちら
そこで、Power Automateを使って「期限が近づいたら自動で通知する仕組み」を作ってみました。

忘れ防止に最適なフローを1手順ずつ作成していきます!
今回やること
- SharePointリストから契約情報を取得
→ 目的:契約名・期限日・担当者などのデータをフローで扱えるようにするため。 - 現在日時と7日後の日付を計算
→ 目的:契約期限が「今日から7日以内」かどうかを判定するため。 - 期限が7日以内なら担当者にメール通知
→ 目的:更新漏れを防ぎ、担当者に早めに対応してもらうため。
今回のフローに登場するアクション
-
手動トリガー(Button)
- フローをボタンで実行する方法
- 「インスタントクラウドフロー」の基本

-
SharePoint:複数の項目の取得
- SharePointリストからデータを取得する方法
$topパラメータで取得件数を制御するテクニック

-
Compose(作成)
- 現在日時を取得する式:
@utcNow()

- 日付計算(7日後):
@addDays(outputs('作成:現在日時_JST'), 7)
- アイテムのフィールド値を取り出す方法:
@item()?['field_1']
- 現在日時を取得する式:

field_1』なので注意内部名の確認方法は以下の動画を参考にしてください。
-
Foreach(For each)

- 複数アイテムをループ処理する方法
@outputs('複数の項目の取得')?['body/value']で配列を指定
-
条件分岐(If)

- 日付比較の式:
@lessOrEquals(outputs('作成_:期限日JST'), outputs('作成_:7日後のJST'))
- 日付比較の式:
-
Office 365:メール送信(Send an email V2)
- 件名・本文に動的コンテンツを挿入する方法
完成イメージ
フロー全体図はこちら

ハンズオン手順
以下の手順で進めます。
(可能な方は一緒にこの記事を見ながら手を動かしてフローを一緒に作ってみてください)
事前準備
今回のフローでは、契約情報を管理するためにSharePointリストを使います。
以下の手順でリストを作成してください。
- SharePointサイトにアクセス
会社やチームで利用しているSharePointサイトを開きます。
- 新しいリストを作成
「+新しいリスト」→「空白のリスト」を選択し、リスト名を「契約管理」に設定します。
- 必要な列を追加
以下の列を作成してください: Title(契約名)…既定のタイトル列を利用field_1(期限日)…列の種類は「日付と時刻」field_2(担当者)…列の種類は「単一行テキスト」
- サンプルデータを入力
例:
契約名 | 期限日 | 担当者
契約A | 2026-01-10 | test@example.com
契約B | 2026-01-15 | test@example.com
契約C | 2026-01-20 | test@example.com
※テストなので、担当者欄には自分のメールアドレスを入力してください。
このリストが準備できたら、Power Automateで「複数の項目の取得」アクションを使ってデータを読み込みます。

リストの作り方が動画で見たいという方はこちら↓

ここからPowerAutomateフローの作成に入っていきます
① トリガー設定
今回は「手動トリガー(ボタン)」を使います。
Power Automateで「新しいフロー」→「インスタントクラウドフロー」→「手動でフローをトリガーします」を選択。

② SharePointリストから契約情報を取得
アクション名:複数の項目の取得
カテゴリ:SharePoint
パラメータ:サイトURL、リストID
@outputs('複数の項目の取得:リストから契約期限日サンプルデータを取得')?['body/value']

③ 現在日時と7日後を計算
アクション名:作成(Compose):現在日時
式:@utcNow()

@addDays(outputs(‘作成:現在日時’), 7)
「現在日時に7日を加算した日付を返す」
つまり、今日から7日後の日時を計算する式です。

繰り返し処理(ForEach)
ここでやろうとしていることは以下の2点です。
body/value)をループ対象に設定。→契約A・契約B・契約C…と順番に処理します。
そこでForEachアクションを追加します。
アクション名:For Each
式:outputs(‘複数の項目の取得:リストから契約期限日サンプルデータを取得’)?[‘body/value’]


ForEachはなぜ必要なのかが最初は分かりにくいので、もう少し解説を追加していきます。↓
そもそもなぜFor Eachが必要なのか?
- SharePointの「複数の項目の取得」は、複数行のデータをまとめて返します。
- そのままでは「条件判定」や「メール送信」ができません。
- For Eachを使うことで、1件ずつ処理できるようになるので、契約ごとに個別通知が可能になります

複数行のデータを一行ずつして処理したい!
→For Each を使う。という流れですね。
④ 条件分岐とメール送信れ
ここからはFor Eachで1行ずつ処理するデータに対して、処理を行っていきます。
ただ、その前に、まずは取得してきたデータから『期限日』を先に取り出しておきます。


なぜ期限日を先に取り出すのか?という点について、少し詳しく解説します。↓
なぜ期限日を先に取り出すのか?
-
条件判定に使うため
「期限日 ≤ 現在+7日後?」を比較するため、期限日を明確にしておく必要があります。 -
データ型を扱いやすくするため
SharePointからの値は文字列なので、Composeで取り出すと後の式が安定します。 -
可読性を高めるため
条件式に直接@item()?['field_1']を書くと複雑になるので、先に変数化してシンプルにします。 -
再利用できるようにするため
メール本文やログにも期限日を簡単に差し込めます。
期限日を取り出したあとのフロー解説
ここからは、期限日を取り出した後に何をするのかを詳しく見ていきます。ポイントは「条件判定」と「メール送信」です。
1. 条件判定(期限が近いかどうか)
まず、取り出した期限日と「現在日時+7日後」を比較します。条件式は以下の通りです:
条件(Condition)アクションに入れる値
- 左辺(左のボックス)
期限日(動的コンテンツ)
例)作成_:期限日の 出力(Composeを使っていれば outputs(‘作成_:期限日’) に相当) - 中央(演算子)
「次の値以下」
→ 「左辺 ≤ 右辺」を判定します。 - 右辺(右のボックス)
7日後(動的コンテンツ)
例)作成_:7日後の 出力(ComposeでaddDays(現在日時, 7)を計算したもの)

この式の意味は「期限日が7日後以内ならTrue」ということです。Trueの場合のみ、次のメール送信アクションに進みます。
なぜこの条件が必要?
- 契約期限が近づいたものだけ通知したいから
- 全件通知すると、担当者に不要なメールが大量に届いてしまうから
2. メール送信(担当者に通知)
条件を満たした場合、Office 365の「メールの送信 (V2)」アクションを使います。ここで、契約名・期限日・担当者を本文に差し込みます。
契約名: @{items('For_each')?['Title']}
期限日: @{outputs('作成_:期限日JST')}
担当者: @{items('For_each')?['field_2']}
件名には「契約期限が近づいています:@{items(‘For_each’)?[‘Title’]}」と設定します。

3. フローの完了
条件を満たさない場合は何もしません。これにより、通知は必要な契約だけに送信されます。
ポイントまとめ
- 期限日を取り出す → 比較しやすくするため
- 条件判定 → 無駄な通知を防ぐため
- メール送信 → 担当者に必要な情報を届けるため
この仕組みを使えば、契約管理の「うっかり期限切れ」を防げます。
GitHubでフロー.ziplを公開していますので、ぜひ試してみてください。


コメント