Power Automateでのメール送信自動化ステップ
Power Automateでのメール送信自動化は、主に以下の4ステップで実現できます。
- ファイルの特定: OneDrive上の集計結果Excelファイルを指定
- 全データ取得: Excelファイルからすべてのテーブル情報を取得
- メッセージ作成: 取得したデータからメール本文を作成
- タイトル (例: 月末締め売上報告) を作成
- 各テーブルのデータをメッセージ本文に追記
- メール送信: 作成したメッセージを指定の宛先へ自動送信
ファイルの特定
まず集計しているExcelがどこにあるのか教えます。
PowerAutomate自体はクラウドなので
PCのデスクトップ等にあるローカルファイルは直接読込めません。
なので前提としてOneDriveなどでクラウドとローカルを
同期させていることが条件となります。
つまり今回はOneDriveに同期されている
集計ファイルを探し出してアクセスします。

「変数」という情報を保持しておく箱を3つ準備しておきます。
この段階ではまだ箱の中身は空っぽです。
- filePath: OneDrive上のExcel集計ファイルが存在する場所
- output: 最終的にメールで送る文章
- name: 4つの集計のタイトル名

「アクションの追加」から「OneDrive」のパーツから
「フォルダー内のファイルの検索」を選びます。
ここで「OneDrive for Buisiness」という似たパーツがありますが
これは法人用のラインセスで使えるOneDriveとなります。
今回は個人用のライセンスで使えるOneDriveを使用します。

今回Excelファイル名が「作成用.xlsx」なので
検索クエリに「作成用」と入力します。
またOneDrive上のフォルダを指定しています。

「パスによるフォルダー内のファイルの検索」を使うと
検索結果が1つであっても
必ず複数データが保持できる形式(アレイ: 配列)で返ってきます。
そのため複数のデータから1つずつデータを取り出すパーツ
「Apply to each」というパーツが自動で生成されます。
※画像上では「ファイルパスを取得」という名前に変更してます
この「ファイルパスを取得」というパーツ内で
「変数の設定」というアクションを追加します。
「filePath」変数に、ファイルの識別子となる「ID」を選択し、変数にセットさせます。
「ID」じゃなくて「パス」じゃないの?と思うが
何度やっても失敗するので注意してください。
全データ取得

「アクションの追加」でExcelパーツの中から
「テーブルの取得」を選び「filePath」をセットします。
これでExcel内の
「店舗別売上」「商品カテゴリー別売上」「支払い方法別売上」「顧客タイプ別売上」
の4つのテーブルを全て取得できました。
メッセージ作成

先ほども触れた「Apply to each」を追加し
「value(テーブルのデータ)」をセットすることで
テーブルを1つずつ取り出し、それぞれに処理を枠組みができます。
画像上では既に「Apply to each」の中身が出来上がっていますが
それぞれ解説していきます。

「表内に存在する行を一覧表示」というアクションを追加します。
「ファイル」には集計ファイルの識別情報を保持させた「filePath」変数をセット。
「テーブル」には「名前」を選んでセットします。
例えば「Apply to each」の1回目のループは「店舗別売上」のテーブルが読込まれます。
という事は、店舗別売上のテーブルデータが「value」に格納されている状態です。
「名前」は「value」に格納されているテーブル名が呼び出されるため
「filePath」に存在するテーブル名「店舗別売上」の行データを取得する事になります。

こんなメッセージを作る場合
まず赤下線のタイトル部分を作成する処理を作っていきます。

「スイッチ」を追加し「オン」に「名前」をセットします。
これは「名前」の値(テーブル名)によって処理を分岐させています。
例えば画像の一番左のブロックは
テーブル名が「店舗別売上」に等しい場合は
「name」という変数に「店舗名」という文字を設定しています。
これは集計テーブルの1列目の列名とイコールにさせておく。
・店舗別売上:「店舗名」
・商品カテゴリー別売上:「商品カテゴリー」
・支払い方法別売上:「支払い方法」
・顧客タイプ別売上:「顧客タイプ」
ここは後で話しが繋がってきます。
とりあえずこの様にテーブル4パターンの分岐を作っておきます。
この変数nameを使って
メッセージ文を動的に対応させます。

「スイッチ」処理の続きに「変数の設定」というアクションを追加します。
※画像上では「タイトル追加」という名前に変更しています
ここで「output」変数にタイトル文となる文字列を保持させます。
例えば店舗別売上テーブルの場合は
「■店舗名別売上」という文字列を自動で生成させたい。
この場合「値」には下記の様な式を入力します。
concat('■', variables('name'), '別売上', '<br>')
concat関数はそれぞれの文字列を結合させます。
また variables(‘name’) = name変数の値(テーブル名) なので
店舗別売上テーブルの場合は「■店舗名別売上」という結果になるのです。
また改行は<br>というHTMLで表現させます。

次は赤枠のデータ文を作ります。

Step1の「表内に存在する行を一覧表示」という処理で
テーブルの行データを取得しました。
なので1行ずつ読込み、output変数にデータ文を追加していきます。
1行ずつ読込むためにまた「Apply to each」を追加します。
「value(テーブルから取り出した1行分のデータ)」をセットします。
中身に「変数の設定」というアクションを追加します。
※画像上では「データ追加」という名前に変更しています
ここで「output」変数にデータ文となる文字列を保持させます。
例えば店舗別売上テーブルの1行目場合は
「・名古屋ファッション:66,537円」という文字列を自動で生成させたい。
この場合「値」には下記の様な式を入力します。
concat('・', item()?[variables('name')], ':', formatNumber(float(coalesce(item()?['売上金額'], '0')), 'N0', 'ja-JP'), '円', '<br>')
「item()」には1行分のデータが呼び出されます。
またname変数は集計テーブルの1列目の列名とイコールです。
つまり店舗別売上テーブルの1行目の場合
「item()?[variables(‘name’)]」=「item()?[店舗名]」=「名古屋ファッション」
という文字列が生成されます。
売上金額も同様に呼び出し、表示形式を整えております。
この様に全ての行にこれらの工程を繰り返せば
メッセージのデータ文が完成しますね。
そしてこれまでの工程を
各テーブルで繰り返していけばメッセージ文が完成します!
完成したメッセージ文はoutput変数に保持されている状態になります。
メール送信

今回はGmailで送信します。
「メールの送信」ステップを追加し宛先や件名、本文を入力します。
本文に先ほど作りこんだoutputという変数をセットします。

これでこのようなメールが自動で届くようになります!
もちろんスケジュールを設定して自動実行させることもできます!
まとめ

- PowerQueryで売上データを自動集計
- PowerAutomateでレポート作成&メール送付
この仕組みを導入すれば、毎月の売上報告を
手作業ほぼゼロで運用できます!
「これまで1時間以上かかっていた作業が、ボタン1つで完了」
そんな環境を作りましょう!
私と一緒に「社内の効率化先生」を目指してみてはいかがでしょうか?