毎朝、売上レポートを確認して、Excelを開き、数字をまとめ、関係者へメールやTeamsで共有する。
この作業を手動で行うと、送信遅れ・コピペミス・宛先違いが起きてしまいます。
さらに「土日祝日・年末年始・お盆・臨時休業など、会社指定の休みは配信しない」運用にすると、
1.休み明けに送り忘れるといった問題が起きやすくなります。
そこでおすすめなのが、Power Automateのクラウドフローを使って“営業日だけ配信する方法です。
スケジュール実行でフローを動かし、休業日はスキップ、休み明けは自動で「前営業日」を計算して配信します。
フローは以下の手順を想定して作成します。
クラウドフローで動かすため、売上レポートExcelは SharePoint/OneDrive(Business) に置きます。
Power AutomateでExcelから行を取得する定番は 「List rows present in a table」です。
このアクションは「テーブル」が前提なので、集計表はテーブル化します。
さらに、実装を安定させるために 日付比較用の 文字列キー列を用意します。
●テーブル名(例):SalesDailySummaryDateKey(文字列):yyyy-MM-dd 形式(例:2026-03-31)
●売上:SalesTotal(数値)注文数:Orders(数値)粗利:GrossProfit(数値)Excelの「日付」列が日付型のままだと、コネクタ側の比較でハマりやすいので、DateKey(文字列)があると一気に安定します。
会社の休業日(祝日・年末年始・お盆・臨時休業など)を 一元管理するため、SharePointリストを用意します。
●リスト名:休業日マスタHolidayKey(1行テキスト)… yyyy-MM-ddHolidayName(1行テキスト)… 例:祝日/年末年始/お盆/臨時休業 など
●Category(選択)… 祝日/会社休業/その他(任意)「HolidayDate(日付)」列でも作れますが、SharePointの日時判定は環境差で詰まりやすいです。この記事では HolidayKey(文字列)で照合します。
これにより、実装が楽になります。
ここからは Power Automate(クラウド) のアクション名で説明します。
画面は新旧デザインで多少違いますが、やることは同じです
トリガー:繰り返し(Recurrence)
・Frequency:DayTokyo Standard Time(日本の時刻で設定する)ここでタイムゾーンを正しく設定するのが大事です。
アクション:作成(Compose)(名前例:NowJST)
convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time')
アクション:作成(Compose)(名前例:TodayKey)
formatDateTime(outputs('NowJST'), 'yyyy-MM-dd')
アクション:作成(Compose)(名前例:TodayDOW)
dayOfWeek(concat(outputs('TodayKey'), 'T00:00:00+09:00'))
dayOfWeek() はWorkflow式としてPower Automateでも使えます。
(+09:00 を付けてJST基準にするのがポイントです)
条件(Condition)
●左:outputs('TodayDOW')0(日曜)6(土曜)Sunday=0, Saturday=6 の仕様は
dayOfWeekに記載があります。
この条件が Yes(=土日) の場合は、後続処理に進まずスキップします。
アクション:SharePoint – Get items(項目の取得)
●Site Address:休業日マスタがあるサイト休業日マスタ1(1件見つかれば十分なので軽くします)Filter Queryの書き方(OData)は公式チュートリアルで例が出ています。
条件(Condition:休業日かどうか)
詳細モード(高度なモード)で、次の式にすると分かりやすいです。
ここまでで「本日が土日」「本日が休業日」の判定ができます。
●土日ならスキップスキップする場合は Terminate(終了) を使い、ステータスは Succeeded にしておくと「正常にスキップ」扱いになります。
Terminate(Succeeded)
●Message:今日は休業日のため配信しません(@{outputs('TodayKey')})
ここが一番大事です。
休み明け(例:月曜)に「前日=日曜」ではなく、前営業日=金曜を自動で選ぶために、前日からさかのぼって「営業日」を探します。
6-1. 変数を用意
変数を初期化(Initialize variable)
●vCandidate(String)… 前営業日候補(最初は“今日-1日”)
vFound(Boolean)… falseaddDays() など日付系関数もWorkflow式として使えます。
6-2. Do until で「営業日が見つかるまで繰り返す」
Do until:vFound is equal to true の中に以下を入れます。
Compose:CandidateDOW
dayOfWeek(concat(variables('vCandidate'), 'T00:00:00+09:00'))Condition:土日なら1日戻して continue
もしCandidateDOW が 0 or 6 ならvFound は触らず、次のループへ) 土日でなければ、休業日マスタを確認します。
SharePoint – Get items(項目の取得)(名前例:Get_items_candidate)
●Top Count:1
Condition:休業日なら1日戻して continue
●休業日(length>0)なら ●Set variable vCandidate:同様に1日戻す●休業日ではないなら
●Set variable vFound = true(これでDo untilが抜けます)
このパターンは「土日」「祝日」「年末年始」「お盆」すべてに対応できます。
(祝日も休業日マスタに登録しておけばOKです)
前営業日が vCandidate に確定したら、それが TargetDate です。
7-1. Excelの行を取得(List rows present in a table)
Excel Online (Business) – List rows present in a table
●File:売上レポートExcelSalesDailySummary DateKey eq '@{variables('vCandidate')}'
このアクションは 既定で256行までなので、行数が多いテーブルを対象にする場合はページネーション(Pagination)を検討してください。
7-2. 行が取れなかった場合の分岐(運用上ほぼ必須)
Condition:取得件数が0なら
@equals(length(body('List_rows_present_in_a_table')?['value']), 0)
0件なら、
●管理者へ通知(Teams or メール)「0件=売上がゼロ」なのか「データ未更新」なのかは運用次第なので、まずは通知して止めるがおすすめです。
8-1. サマリー(1行だけの想定)
日次集計テーブルが「1日1行」なら、最初の行を取ればOKです。
Compose:row(最初の1行)
first(body('List_rows_present_in_a_table')?['value'])
Compose:SalesTotal
outputs('row')?['SalesTotal']
(Orders/GrossProfitも同様)
8-2. 表(HTMLテーブル)
拠点別など複数行を送る場合は、Create HTML table を使うと楽です。
(必要なら、事前に Select で列名を整える)
Office 365 Outlook – Send an email (V2)
●To:配信先(メーリングリスト推奨)【売上速報】@{outputs('TodayKey')}(対象:@{variables('vCandidate')})
●Body(HTML):OutlookコネクタのBodyはHTMLとして扱う項目になっています。
メールを見ない方に、Teamsで「要点+リンク」だけ流す運用でもよいです。
ここでは、実際に現場で使いやすい活用例を3つ紹介します。
(1)休業日判定がうまく動かない
eq するconvertTimeZone を使う
Power Automateを使えば、土日祝日・年末年始・お盆・臨時休業など会社指定の休みを除外しつつ、毎朝の売上レポートを自動配信できます。
ポイントは2つです。
Outlookの添付をSharePointへ自動保存する具体手順(応用:フォルダ分け/上書き防止)
Excelのテーブルを使った台帳自動更新(空欄・重複に強い設計)
Forms受付→自動返信→担当通知→進捗管理(問い合わせ対応の型)
「この作業も自動化できるかな?」というご相談や、部署全体での内製化に向けた研修も承っています。