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の使い方:インストールから最初のフローまで」を先に済ませてください。
この記事の内容
先に決めること
作り始める前に、次の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 ワークシートから読み取る」で範囲や全体を読むと、%ExcelData% はデータ テーブルという、行と列のある変数になります。セルの値は次のように取り出します。
%ExcelData[0][1]% 1行目・2列目(0から数える)
%ExcelData[0]['現場名']% 1行目の「現場名」列
%ExcelData.RowsCount% 行の数
%ExcelData.IsEmpty% 空かどうか
データ テーブルの行と列は0から数えます。Excel の行番号は1からなので、取り違えに注意します。「範囲の最初の行に列名が含まれます」をオンにすると、1行目の見出しは列名になり、データには入りません。列名で取り出せるので、列の順番が変わっても壊れにくくなります。
For each でデータ テーブルを回すと、1回ごとに1行(データ行)が取り出されます。取り出した行は %CurrentItem['現場名']% のように列名で読みます。
読んだ値の型は「セルの内容を取得」で決まります。既定の「入力された値」は日付を日付型、数字を数値型で返します。「プレーン テキスト」は画面に見えている文字のまま返すので、列の幅が狭くて ### と表示されているセルは ### が返ります。転記には「入力された値」を使います。

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


速くしたいとき
1セルずつ書くと、日報が100行あれば700回 Excel に書き込むことになり、数分かかります。チェックが要らなければ、読んだデータ テーブルを丸ごと渡すほうが速く終わります。
- 内側の For each と7つの書き込みを消す
- 代わりに「Excel ワークシートに書き込む」を1つ置き、書き込む値に
%ExcelData%、列A、行%Row%を入れる - その下に「変数を大きくする」を置き、変数名
%Row%、増加率%ExcelData.RowsCount%にする
データ テーブルは右と下へ広がって書かれます。この方法では取り込み元のファイル名の列は入らないので、残したいときは1行ずつの方法を使います。
応用:集計まで自動にする
転記が済んだら、同じフローで集計まで済ませます。サンプル工務店では、集計表の「月別」シートに現場ごとの作業時間の合計を出す SUMIFS の式を先に入れておき、フローは明細を足すだけにしました。式は Excel が計算し直すので、フローの側で足し算を組む必要はありません。

集計した結果をフローで使いたいときは、「アクティブな 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分ロックされることがある |
| 自動で動かす | 手元の実行は無料。決まった時刻に動かすには Premium | Microsoft 365 のライセンスで使える標準コネクタ。スケジュールも組める |
| 向いている作業 | 古い形のブック、マクロのあるブック、画面操作と組み合わせる転記 | フォームや一覧から表に1行足す、表の行を一覧してメールで送る |
迷ったら、ファイルを SharePoint のテーブルにできるかで決めます。できるなら「Power AutomateでExcelを自動化:表に行を足す・転記する・集計を送る」のクラウドフローのほうが壊れにくく、パソコンの電源にも左右されません。サンプル工務店でも、問い合わせ台帳の転記はクラウドフロー、現場日報のように形がばらばらな Excel の取り込みは Desktop、と分けています。
VBA マクロを呼び出す
すでに動いている VBA マクロは、作り直さずに Desktop から呼べます。サンプル工務店の集計表には、月を引数にとって月別シートを作り直す 月次集計 というマクロがあります。
- 集計表を
.xlsm(マクロ有効ブック)で保存しておく - フローの「Excel の起動」で、その
.xlsmを開く - 「Excel マクロの実行」を置き、Excel インスタンスに
%Summary%、マクロに月次集計;2026-10と入れる。マクロ名のあとに引数をセミコロンで区切って並べる - マクロのあとに「Excel を閉じる」を「ドキュメントを保存する」で置く
マクロの中に MsgBox があると、メッセージの窓が出たままフローが止まります。Desktop から呼ぶマクロからは MsgBox を外し、結果はセルに書く形にします。マクロのセキュリティでブロックされるときは、ファイルを Excel の「信頼できる場所」に置くよう、Microsoft 365 の管理者と相談します。

マクロを置き換えるかの判断
| マクロの状態 | 判断 |
|---|---|
| 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の使い方:インストールから最初のフローまで」を見てください。