Power Automate DesktopでExcel操作:転記と集計を自動にする

公開 書いた人 大林 諒

Power Automate(パワーオートメイト)で Excel の転記を自動にする方法は2つあります。パソコンにインストールした Excel を画面ごと動かす Power Automate for desktop(Power Automate Desktop)と、OneDrive や SharePoint に置いた Excel をクラウドから読み書きするクラウドフローです。この記事は前者の話で、パソコンの中にある Excel ファイルを開いて読み、別の集計表に書き写し、保存して閉じるまでを、アクションの設定値つきで書きます。例は、Microsoft 365 Business Standard を全員で使っている社員15名ほどの「サンプル工務店」です。工事の現場監督が書いた現場日報の Excel を、事務が毎週「現場日報の集計」に手で写していた作業を自動にします。インストールと最初のフローがまだなら「Power Automate Desktopの使い方:インストールから最初のフローまで」を先に済ませてください。

この記事の内容
  1. 先に決めること
  2. Excel のアクション一覧
  3. データ テーブル変数の読み方
  4. 転記の手順:現場日報から集計表へ1行ずつ
  5. 応用:集計まで自動にする
  6. クラウドフローの Excel コネクタとの使い分け
  7. VBA マクロを呼び出す
  8. できないことと、その代わり
  9. よく詰まるところ
  10. 次にやること

先に決めること

作り始める前に、次の4つを決めます。

1つ目は、Desktop とクラウドフローのどちらでやるかです。ファイルがパソコンの中にある、Excel の画面でしかできない操作(マクロ、並べ替えやフィルター、ピボットのあるブック)を使う、ファイルの中が「テーブル」になっていない。このどれかに当てはまれば Desktop です。ファイルが SharePoint にあって、テーブルに行を足すだけならクラウドフローのほうが速く、パソコンも要りません。後の節で表にして比べます。

2つ目は、Desktop が開くファイルの置き場所です。Power Automate for desktop の Excel のアクションは COM という仕組みで Excel を動かしており、OneDrive や SharePoint と同期しているフォルダーのファイルを開くと失敗することがあると、公式のリファレンスに書かれています。サンプル工務店では、日報は C:\業務\現場日報\受付、集計表は C:\業務\集計\現場日報の集計.xlsx と、同期していないフォルダーに置くと決めました。

3つ目は、日報の形を揃えることです。1行目が見出し、2行目から1行1作業、という形が全員同じでないと転記できません。サンプル工務店では、A列から順に「日付」「現場名」「作業内容」「作業員数」「作業時間」「記入者」の6列と決め、ひな形のファイルを工事チームに配り直しました。

4つ目は、同じ日報を二重に取り込まない仕組みです。取り込んだファイルは C:\業務\現場日報\取込済み に移し、集計表には取り込み元のファイル名も残します。

Excel のアクション一覧

アクション ペインの「Excel」の下にあるもののうち、転記と集計でよく使うものです。名前は 2026年10月時点のリファレンスの表記です。

アクション何をするか主な設定と生成される変数
Excel の起動Excel を新しく開く、またはファイルを開く「空のドキュメントを使用」か「以下のドキュメントを開く」、インスタンスを表示する、ReadOnly として開く、新しい Excel プロセスの配下に入れ子にする。変数 %ExcelInstance%
実行中の Excel に添付するすでに開いている Excel をつかむドキュメント名。変数 %ExcelInstance%
アクティブな Excel ワークシートを設定する読み書きするシートを切り替える名前またはインデックス(1から)
Excel ワークシートから読み取るセルや範囲の値を読む単一のセルの値、セルの範囲からの値、選択からの値、ワークシートからのすべての使用可能な値。範囲の最初の行に列名が含まれます。変数 %ExcelData%
Excel ワークシートに書き込むセルに値を書く書き込む値、書き込みモード、列、行。データ テーブルを渡すと右と下へ広げて書く
Excel ワークシートから列における最初の空の行を取得する指定した列の最初の空き行の番号を返す列。変数 %FirstFreeRowOnColumn%
最初の空き列・空き行を取得するアクション(公式リファレンスの見出しは「ワークシートから最初の空き列または行Excel取得する」)シート全体で最初の空き列と空き行を返す変数 %FirstFreeColumn%、%FirstFreeRow%
Excel ワークシートのセルを追加最初の空き行の下にまとめて足す追加モード、先頭行が見出しである
Excel を保存する開いているブックを保存する保存モード、ドキュメント形式、ドキュメント パス
Excel を閉じるExcel を閉じるExcel を閉じる前(ドキュメントを保存しない/ドキュメントを保存する/名前を付けてドキュメントを保存する)
Excel マクロの実行ブックの中の VBA マクロを動かすマクロ名と引数をセミコロンで区切って書く

行と列の番号は1から数えます。列は A のような文字でも 1 のような数字でも指定できます。

フロー デザイナーのアクション ペインで「Excel」を開き、アクションが並んでいるところ
フロー デザイナーのアクション ペインで「Excel」を開き、アクションが並んでいるところ

データ テーブル変数の読み方

「Excel ワークシートから読み取る」で範囲や全体を読むと、%ExcelData% はデータ テーブルという、行と列のある変数になります。セルの値は次のように取り出します。

%ExcelData[0][1]%        1行目・2列目(0から数える)
%ExcelData[0]['現場名']%  1行目の「現場名」列
%ExcelData.RowsCount%     行の数
%ExcelData.IsEmpty%       空かどうか

データ テーブルの行と列は0から数えます。Excel の行番号は1からなので、取り違えに注意します。「範囲の最初の行に列名が含まれます」をオンにすると、1行目の見出しは列名になり、データには入りません。列名で取り出せるので、列の順番が変わっても壊れにくくなります。

For each でデータ テーブルを回すと、1回ごとに1行(データ行)が取り出されます。取り出した行は %CurrentItem['現場名']% のように列名で読みます。

読んだ値の型は「セルの内容を取得」で決まります。既定の「入力された値」は日付を日付型、数字を数値型で返します。「プレーン テキスト」は画面に見えている文字のまま返すので、列の幅が狭くて ### と表示されているセルは ### が返ります。転記には「入力された値」を使います。

変数ペインで %ExcelData% をダブルクリックし、値ビューアーにデータ テーブルが表で表示されているところ
変数ペインで %ExcelData% をダブルクリックし、値ビューアーにデータ テーブルが表で表示されているところ

転記の手順:現場日報から集計表へ1行ずつ

サンプル工務店の現場監督C・D・E は、週ごとに現場日報の Excel を工事チームに上げています。事務B が月曜の朝にそれを C:\業務\現場日報\受付 に保存し、フローを動かします。フローは受付フォルダーの日報を1つずつ開き、6列を読み、集計表「明細」シートの最後の行の下に足していきます。

アクションの並び

順番アクション設定
1フォルダー内のファイルを取得フォルダー C:\業務\現場日報\受付、ファイル フィルター *.xlsx
2Excel の起動以下のドキュメントを開く C:\業務\集計\現場日報の集計.xlsx。生成される変数 ExcelInstance の名前を Summary にする
3アクティブな Excel ワークシートを設定する%Summary%、名前 明細
4Excel ワークシートから列における最初の空の行を取得する%Summary%、列 A
5変数の設定Row に %FirstFreeRowOnColumn%
6For each%Files% を CurrentItem に
7Excel の起動以下のドキュメントを開く %CurrentItem%、ReadOnly として開く オン。生成変数の名前を Daily に変える
8Excel ワークシートから読み取る%Daily%、ワークシートからのすべての使用可能な値、範囲の最初の行に列名が含まれます オン
9Excel を閉じる%Daily%、ドキュメントを保存しない
10For each%ExcelData% を DataRow に
11If%DataRow['日付']% が空なら「次のループ」
12Excel ワークシートに書き込む ×7%Summary% の A〜G 列、行 %Row%
13変数を大きくする%Row% を 1
14ファイルの移動%CurrentItem% を C:\業務\現場日報\取込済み へ
15Excel を閉じる%Summary%、ドキュメントを保存する

手順

  1. コンソールで「新規フロー」を選び、名前を 現場日報の転記 にして「作成」を選ぶ
  2. 「フォルダー内のファイルを取得」を置き、フォルダーとファイル フィルターを上の表のとおりに入れて「保存」を選ぶ
  3. 「Excel の起動」を置き、「Excel の起動」を「以下のドキュメントを開く」にして、ドキュメント パスに集計表のパスを入れる。ダイアログの生成される変数 ExcelInstance の名前を Summary に変えて、「保存」を選ぶ
  4. 「アクティブな Excel ワークシートを設定する」で、Excel インスタンスを %Summary%、「ワークシートをアクティブ化する基準」を「名前」、ワークシート名を 明細 にする
  5. 「Excel ワークシートから列における最初の空の行を取得する」で、Excel インスタンス %Summary%、列 A を入れる。すでに先週までの行があれば、その下の行番号が %FirstFreeRowOnColumn% に入る
  6. 「変数の設定」で、変数名を Row、値を %FirstFreeRowOnColumn% にする
  7. 「For each」を置き、反復処理を行う値に %Files% を入れる
  8. For each の中に「Excel の起動」を置き、ドキュメント パスに %CurrentItem% を入れ、「詳細」を開いて「ReadOnly として開く」をオンにする。生成変数を Daily に変える。日報は読むだけなので、読み取り専用で開けば現場監督が同じファイルを開いていても止まらない
  9. 「Excel ワークシートから読み取る」で、Excel インスタンス %Daily%、取得を「ワークシートからのすべての使用可能な値」、「詳細」の「範囲の最初の行に列名が含まれます」をオンにする
  10. 「Excel を閉じる」で %Daily% を「ドキュメントを保存しない」で閉じる。読み終わった日報はすぐ閉じておくと、Excel がいくつも開いたままにならない
  11. 2つ目の「For each」を置き、反復処理を行う値に %ExcelData% を入れ、1件ずつ取り出した値が入る変数の名前(既定は CurrentItem)を DataRow に変える
  12. その中に「If」を置き、最初のオペランド %DataRow['日付']%、演算子「空である」にして、中に「次のループ」を入れる。見出しだけで中身のない行を飛ばすため
  13. If の End の下に「Excel ワークシートに書き込む」を7つ置き、すべて Excel インスタンス %Summary%、書き込みモード「指定したセル上」、行 %Row% にして、列と値を次のようにする
A列: %DataRow['日付']%
B列: %DataRow['現場名']%
C列: %DataRow['作業内容']%
D列: %DataRow['作業員数']%
E列: %DataRow['作業時間']%
F列: %DataRow['記入者']%
G列: %CurrentItem.Name%
  1. 7つの書き込みの下に「変数を大きくする」を置き、変数名 %Row%、増加率 1 にする
  2. 内側の For each の End の下(外側の For each の中)に「ファイルの移動」を置き、移動するファイル %CurrentItem%、宛先フォルダー C:\業務\現場日報\取込済み にする
  3. 外側の For each の End の下に「Excel を閉じる」を置き、%Summary% を「ドキュメントを保存する」で閉じる
  4. 「保存」を選び、受付フォルダーに日報を2つだけ置いて「実行」で試す

試すときは、集計表をコピーしてテスト用のファイルにしておきます。書き込み先を間違えると、本物の集計表に余計な行が入ります。

完成した「現場日報の転記」フロー。For each が二重になり、内側に7つの「Excel ワークシートに書き込む」が並んでいるところ
完成した「現場日報の転記」フロー。For each が二重になり、内側に7つの「Excel ワークシートに書き込む」が並んでいるところ
「Excel ワークシートから読み取る」の設定ダイアログ。「ワークシートからのすべての使用可能な値」と「範囲の最初の行に列名が含まれます」がオンのところ
「Excel ワークシートから読み取る」の設定ダイアログ。「ワークシートからのすべての使用可能な値」と「範囲の最初の行に列名が含まれます」がオンのところ

速くしたいとき

1セルずつ書くと、日報が100行あれば700回 Excel に書き込むことになり、数分かかります。チェックが要らなければ、読んだデータ テーブルを丸ごと渡すほうが速く終わります。

  1. 内側の For each と7つの書き込みを消す
  2. 代わりに「Excel ワークシートに書き込む」を1つ置き、書き込む値に %ExcelData%、列 A、行 %Row% を入れる
  3. その下に「変数を大きくする」を置き、変数名 %Row%、増加率 %ExcelData.RowsCount% にする

データ テーブルは右と下へ広がって書かれます。この方法では取り込み元のファイル名の列は入らないので、残したいときは1行ずつの方法を使います。

応用:集計まで自動にする

転記が済んだら、同じフローで集計まで済ませます。サンプル工務店では、集計表の「月別」シートに現場ごとの作業時間の合計を出す SUMIFS の式を先に入れておき、フローは明細を足すだけにしました。式は Excel が計算し直すので、フローの側で足し算を組む必要はありません。

「現場日報の集計.xlsx」の明細シート。A〜G列に日付から取り込み元のファイル名までが並び、フローで足された行が続いているところ
「現場日報の集計.xlsx」の明細シート。A〜G列に日付から取り込み元のファイル名までが並び、フローで足された行が続いているところ

集計した結果をフローで使いたいときは、「アクティブな Excel ワークシートを設定する」で 月別 に切り替え、「Excel ワークシートから読み取る」で合計のセルを読みます。読んだ値は「Power Automate Desktopの変数・条件・ループとエラー処理」の条件分岐に使えます。たとえば、ある現場の作業時間が予定を超えたらメッセージを出す、といった形です。

毎週月曜の朝に人がいなくても動かしたいなら、クラウドフローから起動します。これは Power Automate Premium(1ユーザー月額2,248円、年払い・税抜、2026年10月時点)が要ります。設定は「Power Automate Desktopのスケジュール実行:クラウドフローから動かす・無人で動かす」に書いています。

クラウドフローの Excel コネクタとの使い分け

比べる所Desktop の Excel アクションクラウドフローの Excel Online (Business)
ファイルの場所パソコンの中(同期フォルダーは避ける)OneDrive for Business、SharePoint
必要なものWindows のパソコンとインストール済みの Excelブラウザだけ。パソコンは要らない
ファイルの形どんな形でも読める読み書きは「テーブル」に限られる
マクロVBA を「Excel マクロの実行」で動かせるVBA マクロを動かすアクションは用意されていない。Office スクリプトは「スクリプトの実行」で動かせる(.xlsm のブックにも使える)
一度に読める行シート全体既定は256行。全部読むにはページネーションをオンにする
ファイルの大きさパソコンの Excel が開ければよい25 MB まで
同時に人が開いている読み取り専用なら読める。書き込みは止まりやすい人が編集中は避ける。使用後も最大6分ロックされることがある
自動で動かす手元の実行は無料。決まった時刻に動かすには PremiumMicrosoft 365 のライセンスで使える標準コネクタ。スケジュールも組める
向いている作業古い形のブック、マクロのあるブック、画面操作と組み合わせる転記フォームや一覧から表に1行足す、表の行を一覧してメールで送る

迷ったら、ファイルを SharePoint のテーブルにできるかで決めます。できるなら「Power AutomateでExcelを自動化:表に行を足す・転記する・集計を送る」のクラウドフローのほうが壊れにくく、パソコンの電源にも左右されません。サンプル工務店でも、問い合わせ台帳の転記はクラウドフロー、現場日報のように形がばらばらな Excel の取り込みは Desktop、と分けています。

VBA マクロを呼び出す

すでに動いている VBA マクロは、作り直さずに Desktop から呼べます。サンプル工務店の集計表には、月を引数にとって月別シートを作り直す 月次集計 というマクロがあります。

  1. 集計表を .xlsm(マクロ有効ブック)で保存しておく
  2. フローの「Excel の起動」で、その .xlsm を開く
  3. 「Excel マクロの実行」を置き、Excel インスタンスに %Summary%、マクロに 月次集計;2026-10 と入れる。マクロ名のあとに引数をセミコロンで区切って並べる
  4. マクロのあとに「Excel を閉じる」を「ドキュメントを保存する」で置く

マクロの中に MsgBox があると、メッセージの窓が出たままフローが止まります。Desktop から呼ぶマクロからは MsgBox を外し、結果はセルに書く形にします。マクロのセキュリティでブロックされるときは、ファイルを Excel の「信頼できる場所」に置くよう、Microsoft 365 の管理者と相談します。

「Excel マクロの実行」の設定ダイアログ。マクロ欄に「月次集計;2026-10」と入っているところ
「Excel マクロの実行」の設定ダイアログ。マクロ欄に「月次集計;2026-10」と入っているところ

マクロを置き換えるかの判断

マクロの状態判断
1つのブックの中で計算や整形をしていて、ちゃんと動いているそのまま残し、Desktop から呼ぶ
複数のファイルを開いて写しているDesktop のアクションに置き換える。どのファイルを開いたかがフローの画面で追える
ブラウザや別のアプリまで操作しているDesktop に置き換える。VBA より画面操作のアクションが揃っている
ファイルが SharePoint にあり、ファイルが届いたら動かしたいクラウドフローと Office スクリプトに移す
書いた人が辞めていて、中身を誰も読めない手順を書き出して、Desktop で作り直す

できないことと、その代わり

できないこと代わりの手
Excel が入っていないパソコンで Excel のアクションを動かすExcel 2013 以降のデスクトップ版を入れる
同期フォルダーの Excel を安定して開くローカルにコピーして扱い、終わったら同期フォルダーに戻す
ピボットのあるブックをクラウドから読むDesktop で開いて読む
手元で2つのフローを同時に動かすローカルのアテンド型は一度に1本だけ。転記と集計は1本のフローにまとめる
フローが Excel を動かしている間に同じパソコンで Excel を使う実行は昼休みや朝一番に決める。並行させたいなら Desktop 専用のパソコンを置く

よく詰まるところ

症状原因直し方
「Excel の起動」でクラスが登録されていないというエラー(0x80040154)Excel が入っていない、または 2013 より古いExcel 2013 以降を入れる。入っていれば Office を修復する
「プロセスは別のプロセスで使用されているため、ファイルにアクセスできません」誰かが同じファイルを開いている、前回の実行の Excel が裏に残っている読むだけのファイルは「ReadOnly として開く」をオンにする。タスク マネージャーで残った Excel を終了し、Power Automate を起動し直す
「呼び出し先によって呼び出しが拒否されました」(0x80010001)セルを編集中のまま、または Excel のポップアップが出ているフローの実行中は Excel を触らない。出ているダイアログを閉じる。マクロの MsgBox を外す
「不明な名前」(0x80020006)で止まるメールやダウンロードで受け取ったファイルが保護ビューで開いている公式の案内は、対象のファイルが保護ビューで開かれていないかを確かめること。運用上は、ファイルのプロパティでブロックを解除してから受付フォルダーに置く
「ファイルが見つからない」と出るがファイルはあるOneDrive・SharePoint の同期フォルダーにある、またはパスが 255 文字を超えているローカルの短いパスにコピーして扱う
「RPC サーバーは使用できません」(0x800706BA)ほかの Excel のプロセスと混ざっている「Excel の起動」の「詳細」で「新しい Excel プロセスの配下に入れ子にする」をオンにする
読んだ値が ### になる「プレーン テキスト」で読んでいて、列の幅が狭い「セルの内容を取得」を「入力された値」にする
日付が数字や時刻つきで書かれる日付型で読んだ値をそのまま書いている集計表の列の書式を日付にしておく。文字で書きたいなら日付を文字に変換するアクションを挟む
毎回同じ行に上書きされる%Row% を大きくする位置が For each の外にある、または最初の空き行を見る列が空の多い列「変数を大きくする」を内側の For each の中に置く。空き行は必ず埋まる A列(日付)で調べる
同じ日報が二重に入る取り込んだファイルを受付フォルダーに残している「ファイルの移動」で取込済みフォルダーに移す。G列のファイル名で重複を見つける

次にやること

転記のフローが動いたら、止まったときの処理を足します。日報の形が違うファイルが混ざったときに、そのファイルだけ飛ばして名前を記録する、といった作り方は「Power Automate Desktopの変数・条件・ループとエラー処理」にあります。

ファイルが SharePoint のテーブルで済む作業は、パソコンの要らない「Power AutomateでExcelを自動化:表に行を足す・転記する・集計を送る」に移します。毎週決まった時刻に自動で動かすなら「Power Automate Desktopのスケジュール実行:クラウドフローから動かす・無人で動かす」、インストールや画面の見方に戻りたいときは「Power Automate Desktopの使い方:インストールから最初のフローまで」を見てください。

あわせて読む