Power Automateでの自動同期
フロー概要

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

「新しいメールが届いたとき」アクションを使用し
特定のメール(例: 件名に「顧客データ」を含む)を受信したらフローを開始するように設定します。
また添付ファイルが存在する想定なので
「添付ファイルあり」は「はい」を選んでおきます。

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

「OneDrive」の「ファイルの作成」というアクションを選ぶと
おそらく自動で「Apply to each」が生成されると思います。
これはそういう仕様で仕方ないためそのまま作りこみます。
「Apply to each」は複数のデータを1つずつ読込み、同じ処理をさせる繰り返し処理のパーツです。
繰り返し対象のデータ(以前の手順から出力を選択)には「添付ファイル」を選びましょう。
では「ファイルの作成」について
- フォルダーのパス:添付ファイルを作成するOneDrive上の場所を選択。
- ファイル名:添付ファイルを作成するときのファイル名。今回は「受信日時」と「添付ファイル 名前」を組合わせた。
- ファイルコンテンツ:添付ファイルの中身。「添付ファイル コンテンツ」を選んだ。
最後「変数の設定」アクションで
変数 fileID に OneDrive上に作成したファイルの「ID」を設定します。

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

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

取得した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、共有はスプレッドシート」 という環境で
日々のコピペ作業に悩まされている方は、ぜひこの自動化にチャレンジしてみてください。