メール添付のExcelを25日締めで当月・翌月フォルダに自動振り分けする

Power Automate

毎月メールで届く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ファイルが自動保存されました。

コメント

タイトルとURLをコピーしました