【PowerAutomate】メール受信をトリガーにしたスプレッドシートへの自動同期術!

Power Automateでの自動同期

フロー概要

Power Automate側のフローは、以下のステップで構成されています。

  1. トリガー (メール受信): 「新しいメールが届いたとき」アクションを使用し、特定のメール(例: 件名に「顧客データ」を含む)を受信したらフローを開始するように設定します。
  2. 添付ファイルの処理 (OneDriveへの一時保存):
    • 重要ポイント! Power Automateは、メールに直接添付されたExcelファイルの中身を直接読み取ることができません。
    • そのためメールから添付ファイルを取得し、「ファイルの作成」アクションで一度OneDriveにそのファイルを保存します。
  3. Excelデータの取得: OneDriveに保存したExcelファイルに対して、「テーブルの取得」アクションを実行します。ここで、各シートのデータを取得します。
  4. Googleスプレッドシートへの書き込み:
    • 取得したExcelの各テーブルデータに対して、「Apply to each」(繰り返し処理)アクションを使用します。
    • 抽出した各テーブルデータの行データに対して「表内に存在する行を一覧表示」アクションを使用します。
    • ループの中で「行の挿入 (Google Sheets)」アクションを使い、ExcelのデータをGoogleスプレッドシートの対応する列に1行ずつ書き込んでいきます。

作成ステップ

トリガーをメール受信で開始

「新しいメールが届いたとき」アクションを使用し
特定のメール(例: 件名に「顧客データ」を含む)を受信したらフローを開始するように設定します。

また添付ファイルが存在する想定なので
「添付ファイルあり」は「はい」を選んでおきます。

変数の設定

「変数を初期化する」アクションを選び
OneDriveに保存する添付ファイルの情報を保持させておく変数 fileID を作っておく。

添付ファイルの処理(OneDriveへの一時保存)

「OneDrive」の「ファイルの作成」というアクションを選ぶと
おそらく自動で「Apply to each」が生成されると思います。

これはそういう仕様で仕方ないためそのまま作りこみます。
「Apply to each」は複数のデータを1つずつ読込み、同じ処理をさせる繰り返し処理のパーツです。

繰り返し対象のデータ(以前の手順から出力を選択)には「添付ファイル」を選びましょう。

では「ファイルの作成」について

  • フォルダーのパス:添付ファイルを作成するOneDrive上の場所を選択。
  • ファイル名:添付ファイルを作成するときのファイル名。今回は「受信日時」と「添付ファイル 名前」を組合わせた。
  • ファイルコンテンツ:添付ファイルの中身。「添付ファイル コンテンツ」を選んだ。

最後「変数の設定」アクションで
変数 fileID に OneDrive上に作成したファイルの「ID」を設定します。

このようにメールを受信する度に、添付ファイルがOneDrive上に作成されます。

Excelデータの取得

OneDriveに保存したExcelファイルに対して、「テーブルの取得」アクションを実行します。
ここで各シートのデータを取得します。

Googleスプレッドシートへの書き込み

取得したExcelの各テーブルデータ(新規・既存・休眠)に対して
「Apply to each」(繰り返し処理)アクションを使用します。
「以前の手順から出力を選択」には「value」を選びます。

そして各テーブルデータの行データを取得するため
「表内に存在する行を一覧表示」アクションを使用します。
「ファイル」にはOneDrive上のファイル場所を示す「fileID」変数をセット。
「テーブル」には繰り返し処理で取り出したテーブル名(新規 or 既存 or 休眠)を示す「名前」をセット。

次に取り出した1つのテーブルに対して
各行のデータをGoogleスプレッドシートに出力させたい。

そこでさらに「Apply to each」を設置し、各行に対して処理を行う。
どんな処理かと言うと、そのループの中で「行の挿入 (Google Sheets)」アクションを使い、
ExcelのデータをGoogleスプレッドシートの対応する列に1行ずつ書き込んでいきます。

スプレッドシートは予め新規・既存・休眠というシート名を準備しておきます。
また列名も予め準備しておく。

「行の挿入 (Google Sheets)」の各項目は

  • ファイル:予め準備しておいたスプレッドシートのパス情報。
  • ワークシート:出力先のシート名。ここはExcelのテーブルデータの「名前」をセットする事で、スプレッドシートのシート名と連動する。
  • 行:これは挿入する行データの情報をセットする。詳しくは下記で説明する。
{
  "顧客ID": "@{items('Apply_to_each:_各行データ処理')?['顧客ID']}",
  "会社名": "@{items('Apply_to_each:_各行データ処理')?['会社名']}",
  "担当者名": "@{items('Apply_to_each:_各行データ処理')?['担当者名']}",
  "メールアドレス": "@{items('Apply_to_each:_各行データ処理')?['メールアドレス']}",
  "電話番号": "@{items('Apply_to_each:_各行データ処理')?['電話番号']}",
  "住所": "@{items('Apply_to_each:_各行データ処理')?['住所']}",
  "登録日": "@{formatDateTime(addDays('1899-12-30', int(items('Apply_to_each:_各行データ処理')?['登録日'])), 'yyyy/MM/dd')}",
  "売上金額": @{float(items('Apply_to_each:_各行データ処理')?['売上金額'])}
}

行には上記のように
{ “列名”: “値” } という表記で情報をセットします。
ここでスプレッドシートに列名が予め存在していない
紐づかずに何も出力されないので注意です!

Excelの日付データ(シリアル値)を正しい日付形式でスプレッドシートに出力したい場合は
下記の数式を参考にしてみてください。

"@{formatDateTime(addDays('1899-12-30', int(items('Apply_to_each:_各行データ処理')?['登録日'])), 'yyyy/MM/dd')}"

また下記のように「PowerAppsId」という列がどうしても自動で生成されるため
列を非表示にしておくと良いと思います。

まとめ

このExcel・スプレッドシート自動同期の仕組みを導入することで、以下のような効果が期待できます。

  • 圧倒的な時間短縮: 毎日・毎週発生していたコピペ作業がゼロになります。年間で見れば数十時間、数百時間もの時間を節約できる可能性があります。
  • ミスの撲滅: 手作業によるコピペミスや転記漏れがなくなり、データの正確性が向上します。
  • リアルタイムな情報共有: メールが届けば、関係者はすぐに最新のデータをGoogleスプレッドシートで確認できます。これにより、迅速な意思決定や次のアクションにつながります。
  • 心理的負担の軽減: 単純作業の繰り返しから解放され、ストレスが軽減されます。

今回は、Power QueryとPower Automateを活用して
メールで受信したExcelデータをGoogleスプレッドシートへ自動同期する方法をご紹介しました。

「社内はExcel、共有はスプレッドシート」 という環境で
日々のコピペ作業に悩まされている方は、ぜひこの自動化にチャレンジしてみてください。

1 2