毎月メールで届くExcelファイルを手作業でフォルダに振り分けていて、地味にめんどくさいなと思っていました。
しかも「25日締め」のルールがあるので、受信日が25日以下なら当月フォルダ、26日以降なら翌月フォルダに入れないといけない。
これをPower Automateで自動化したらかなり楽になったのでまとめてみます。

フロー全体像

前準備
Excelファイルの保存先として、SharePointにドキュメントライブラリを1つ作成します。
今回は例として「2025」というライブラリを作りました。

フローの作り方
新しいメールが届いたとき(V3)

トリガーは、Outlookの「新しいメールが届いたとき(V3)」にします。
詳細パラメーターは、以下の通りにします。
| 添付ファイルを含める | はい |
| 添付ファイル付きのみ | はい |
今回は受信トレイを対象にしたいので、フォルダーは「Inbox」のままにします。
アレイのフィルター処理

添付ファイルの中からExcelファイルだけを取り出すために、「アレイのフィルター処理」アクションを追加します。
| From | 新しいメールが届いたとき(V3)の添付ファイル |
Filter Queryは詳細モードにして、以下の式を入力します。
endswith(item()?['name'], '.xlsx')
endswith関数でファイル名が`.xlsx`で終わるかを判定しています。
作成(1個目)

現在の日付から「日」(1〜31)を日本時間で取得する「作成」アクションを追加します。
アクション名は後続と区別するために「作成:日」にしました。
入力には以下の式を設定します。
dayOfMonth(addHours(utcNow(),9))
3月25日なら「25」、3月26日なら「26」が返ります。
作成(2個目)

「作成:日」の値が25より大きいかどうかで、当月か翌月かを判定します。アクション名は「作成:月」にしました。入力に以下の式を設定します。
3月25日なら “2025-03-25″、3月26日なら “2025-04-25” という値が生成されます。
この値がそのままフォルダ名になる仕組みです。
if(greater(outputs('作成:日'),25),
first(split(addDays(startOfMonth(addToTime(addHours(utcNow(),9),1,'Month')),24),'T')),
first(split(addDays(startOfMonth(addHours(utcNow(),9)),24),'T'))
)
正直この式は長くて一見わかりにくいですが、やっていることは「25日を超えたら翌月の25日を返す」だけです。
ファイルの作成

SharePointの「ファイルの作成」アクションを追加して、ドキュメントライブラリにExcelを保存します。
| サイトのアドレス | 前準備で作成したドキュメントライブラリがあるSharePointサイト |
| ファイル名 | アレイのフィルター処理の「添付ファイル 名前」 |
| ファイルコンテンツ | アレイのフィルター処理の「添付ファイル コンテンツ」 |
フォルダーのパスには以下の式を入力します。`/2025/`の部分は、保存先ドキュメントライブラリのパスです。
concat('/2025/', outputs('作成:月'))
ファイル名とファイルコンテンツを設定すると、自動でFor eachが設定されます。
実行結果
2025年3月24日に実際に実行してみました。
「2025」ドキュメントライブラリに、”2025-03-25″というフォルダが作成されて、Excelファイルが自動保存されました。

作成アクションを少しいじり、26日に実行した設定にしてみました。
26日以上なので、翌月の”2025-04-25″というフォルダが作成されて、Excelファイルが自動保存されました。



コメント