1. はじめに
「毎月、支店ごとのシートを開いて、コピーして、集計シートに貼り付けて……」
Excelを使った業務の中で、こうした転記作業に時間を取られている方は非常に多いのではないでしょうか。作業自体は難しくありません。しかし、シートが10枚あれば10回同じ操作を繰り返す必要があり、途中で貼り付け位置を1行間違えれば、集計結果はすべて狂ってしまいます。しかもこの作業は毎月・毎週・毎日と繰り返しやってきます。
Power Automate Desktop(以下PAD) は、こうした「単純だが手間がかかり、ミスが許されない」作業を自動化するためにMicrosoftが提供しているRPAツールです。Windows 10/11には標準で搭載されており、追加費用なしで利用を開始できます。さらにPADにはExcel専用のアクション群が用意されているため、VBAを書かなくても、マウス操作を録画しなくても、Excelの読み書きを安定して自動化できます。
この記事では、Excel業務で最も登場頻度が高い「転記処理」に的を絞り、以下の2パターンを実際にフローを組める粒度で解説します。
- パターンA:同一ワークブック内の複数ワークシート → 同じワークブックの別ワークシートへの転記
- パターンB:ワークブック内の複数ワークシート → 別のワークブックのワークシートへの転記
アクション名、設定するパラメータの値、変数の中身、つまずきやすいポイントまで具体的に記載していますので、記事を見ながらそのまま手を動かしていただける内容になっています。
2. この記事の対象者
この記事は、次のような方を想定して書いています。
| 対象 | 具体的なイメージ |
|---|---|
| 非IT部門の実務担当者 | 経理・営業事務・人事・総務・購買など、日常業務でExcelを多用している方 |
| プログラミング未経験の方 | VBAやPythonは書けないが、Excelの関数やピボットテーブルは使える程度のスキル |
| 転記作業に時間を取られている方 | 複数シート・複数ブックをまたいだコピー&ペーストを毎月手作業で行っている方 |
| PADをインストールしたが活用しきれていない方 | 起動はしてみたものの、実務でどう組めばよいか分からず止まっている方 |
前提とする知識・環境
- Windows 10 / 11 と Power Automate Desktop がインストール済みであること
- Excelがインストールされていること(PADのExcelアクションはExcel本体を制御するため、Excel必須です)
- Excelの基本操作(シート、セル番地、行・列の概念)が分かること
- PADで「新しいフロー」を作成し、アクションをドラッグ&ドロップで並べられること
この記事で扱わないこと
- Power Automate(クラウドフロー)との連携
- PADの有償ライセンス機能(無人実行、Dataverse連携など)
- VBAマクロの記述方法
補足:PADは「Power Automate for desktop」という名称で表記される場合もありますが、同じものを指しています。
3. Excel業務における「転記処理」という最頻出パターン
3-1. なぜ転記処理が最も多いのか
Excelを使った定型業務を分解していくと、その大半は次の3つの動作の組み合わせに還元できます。
- 入力(人間がデータを打ち込む/システムから出力する)
- 転記(あるシート・ブックのデータを、別のシート・ブックへ移す)
- 加工・集計(合計する、並べ替える、グラフにする)
このうち、1の入力は業務システムからのCSVダウンロードで代替されることが増え、3の加工・集計はピボットテーブルや関数、あるいはPower Queryで自動化されつつあります。ところが2の転記だけは、いまだに手作業のまま残っているケースが圧倒的に多いのです。
理由は、転記が「フォーマットの異なる情報の橋渡し」だからです。関数は同じブック内なら簡単に参照できますが、「支店ごとに分かれたシートを縦に積み上げる」「毎月ファイル名が変わるブックから値を拾う」といった操作は関数では表現しづらく、結局は人間がコピー&ペーストで橋渡しをすることになります。
3-2. 転記処理の典型的な4類型
実務で発生する転記は、おおむね次の4類型に整理できます。
| 類型 | 内容 | 具体例 |
|---|---|---|
| ① 同一ブック・シート間 | 同じブックの複数シートを1枚に集約する | 支店別シート → 全社集計シート |
| ② 別ブック・シート間 | 別ファイルのシートへデータを移す | 日次データブック → 月次管理台帳ブック |
| ③ 複数ブック → 1ブック | フォルダ内の複数ファイルを1つにまとめる | 各担当者提出の報告書 → 部門集計ブック |
| ④ 1ブック → 複数ブック | 1つの元データを条件別に分割配布する | 全社データ → 支店別配布ファイル |
本記事では、まず基本となる①を第4章で、続いて応用範囲の広い②(および③の入口) を第5章で解説します。①を確実に理解できれば、残りの類型は「開くファイルが増えるだけ」の差分として理解できるようになります。
3-3. 手作業の転記が抱えるリスク
転記作業を人手で行い続けることには、単に時間がかかる以上の問題があります。
- 貼り付け位置のズレ:1行ずれたまま気づかず、集計値が誤ったまま報告される
- 転記漏れ:シートが増えたのに、担当者が前月のリストのまま作業して1支店分が抜ける
- 二重転記:作業を中断して再開した際に、同じデータを2回貼り付けてしまう
- 書式の混入:セルごとコピーしたために背景色や罫線、条件付き書式まで持ち込まれる
- 属人化:「あの人しか手順を知らない」状態になり、休暇時に業務が止まる
PADで自動化すると、これらはすべて「フローに書かれた手順どおりに毎回同じ結果になる」という形で解消されます。特に転記漏れ・二重転記は、後述する「シート一覧の動的取得」と「転記先の事前クリア」で構造的に防止できます。
3-4. 本記事で使用するサンプルデータ
以降の解説では、次の構成のファイルを題材にします。
C:\RPA\売上管理.xlsx
シート構成:
-
東京、大阪、名古屋、福岡(各支店の売上明細) -
集計(転記先。1行目のヘッダーのみ作成済み)
各支店シートのレイアウト(1行目がヘッダー、2行目以降がデータ):
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | 日付 | 商品コード | 商品名 | 数量 | 単価 | 売上金額 |
| 2 | 2026/08/03 | P-1001 | ノートPC | 2 | 128000 | 256000 |
| 3 | 2026/08/05 | P-2004 | モニター | 5 | 24800 | 124000 |
集計シートのレイアウト(A列に「支店名」を追加した7列構成):
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | 支店名 | 日付 | 商品コード | 商品名 | 数量 | 単価 | 売上金額 |
| 2 | (ここから転記) |
つまり、4つの支店シートのデータを縦に積み上げて集計シートに集約し、その際どの支店のデータかがA列で分かるようにする、というのがゴールです。
4. 【パターンA】同一ワークブック内:複数シート → 別シートへの転記
4-1. 完成イメージとフローの全体像
まずはフロー全体の流れを確認します。
1. Excel の起動(売上管理.xlsx を開く)
2. 転記先「集計」シートの既存データをクリア
3. 転記元シート名のリストを作成
4. ループ開始:シート名を1つずつ処理
4-1. 転記元シートをアクティブにする
4-2. データの最終行を取得する
4-3. データ範囲を読み取る(DataTable として取得)
4-4. 「集計」シートをアクティブにする
4-5. 書き込み開始行を取得する
4-6. 1行ずつ「支店名 + 明細」を書き込む
5. ループ終了
6. Excel を保存して閉じる
以下、アクションごとに設定内容を具体的に見ていきます。
4-2. STEP1:Excelを起動してファイルを開く
アクションペインの Excel グループから Excel の起動 をドラッグします。
| パラメータ | 設定値 |
|---|---|
| Excel の起動 | 次のドキュメントを開く |
| ドキュメント パス | C:\RPA\売上管理.xlsx |
| インスタンスを表示する | オン(開発中)/オフ(運用時) |
| 読み取り専用として開く | オフ |
| 生成された変数 | ExcelInstance |
ここで生成される ExcelInstance が、以降すべてのExcelアクションで「どのExcelを操作するか」を指定するための鍵になります。この変数を取り違えると、意図しないファイルに書き込んでしまうため注意してください。
ポイント:開発中は「インスタンスを表示する」をオンにして、Excelが実際にどう動いているかを目で確認しましょう。動作が固まったらオフにすると、画面描画が省略されるぶん処理が速くなります。
注意:フローを実行する前に、対象のExcelファイルは必ず閉じておいてください。開いたままだと読み取り専用で開かれたり、保存に失敗したりします。
4-3. STEP2:転記先「集計」シートをクリアする
再実行時の二重転記を防ぐため、転記前に転記先をクリアします。ヘッダー行(1行目)は残す設計にします。
アクティブな Excel ワークシートの設定
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 次と共にワークシートをアクティブ化 | 名前 |
| ワークシート名 | 集計 |
Excel ワークシートから最初の空の列や行を取得
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 生成された変数 |
FirstFreeColumn, FirstFreeRow
|
このアクションはアクティブなワークシートに対して動作します。必ず先にアクティブ化しておくのがコツです。
-
If(条件分岐)
| パラメータ | 設定値 |
|---|---|
| 最初のオペランド | %FirstFreeRow% |
| 演算子 | より大きい (>) |
| 2 番目のオペランド | 2 |
-
Excel ワークシートから削除する(Ifの内側に配置)
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 削除 | セル範囲内の値 |
| 先頭列 | A |
| 先頭行 | 2 |
| 最終列 | G |
| 最終行 | %FirstFreeRow% - 1 |
| シフト方向 | 上へシフト |
-
End(Ifを閉じる)
なぜIfが必要か:
集計シートが空(ヘッダーのみ)の場合、FirstFreeRowは2になります。このとき「2行目から1行目まで削除」という矛盾した範囲指定になりエラーになるため、FirstFreeRow > 2のときだけ削除する、というガードを入れています。
4-4. STEP3:転記元シート名のリストを作成する
転記対象のシート名を変数にまとめます。方法は2通りあります。
方法① 固定リストで指定する(シンプル・推奨)
変数の設定 アクションを使用します。
| パラメータ | 設定値 |
|---|---|
| 設定 | SheetList |
| 宛先 | %['東京', '大阪', '名古屋', '福岡']% |
% で囲んだ中に [ ] で要素を並べると、PADはテキスト値のリストとして解釈します。シートが増減したらこの1行を直すだけで対応できます。
方法② シート一覧を動的に取得する(シート追加に自動対応)
すべての Excel ワークシートを取得 アクションを使います。
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 生成された変数 | SheetNames |
これで全シート名がリストとして得られますが、この中には転記先の集計シートも含まれてしまいます。そこでループの中で除外処理を入れます。
For each CurrentSheet in %SheetNames%
If %CurrentSheet% = '集計' then
次のループ(Next loop)
End
...(以降の転記処理)
End
シートが毎月増えるような運用であれば方法②が、シート構成が固定であれば方法①が適しています。ここでは方法①で進めます。
4-5. STEP4:ループで各シートを処理する
ループ グループから For each を配置します。
| パラメータ | 設定値 |
|---|---|
| 反復処理を行う値 | %SheetList% |
| 保存先 | CurrentSheet |
以降のアクションは、すべてこのFor eachとEndの内側に配置します。
4-5-1. 転記元シートをアクティブにする
アクティブな Excel ワークシートの設定
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 次と共にワークシートをアクティブ化 | 名前 |
| ワークシート名 | %CurrentSheet% |
ここで変数%CurrentSheet%を使うことで、ループの回数ぶん「東京」「大阪」……と自動的に切り替わります。
4-5-2. データの最終行を取得する
Excel ワークシートから最初の空の列や行を取得
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 生成された変数 |
SrcFirstFreeColumn, SrcFirstFreeRow
|
生成された変数名は、右クリックまたは変数名をクリックして分かりやすい名前に変更しておきましょう。既定の
FirstFreeRowのまま使うと、転記元用と転記先用で値が上書きされ、原因の分かりにくい不具合につながります。
例えば東京シートにデータが2〜21行目まで入っていれば、SrcFirstFreeRowは22になります。したがってデータの最終行は%SrcFirstFreeRow% - 1 です。
4-5-3. データが存在するかチェックする
If
| パラメータ | 設定値 |
|---|---|
| 最初のオペランド | %SrcFirstFreeRow% |
| 演算子 | より大きい (>) |
| 2 番目のオペランド | 2 |
データが1件もないシートをスキップするためのガードです。
4-5-4. データ範囲を読み取る
Excel ワークシートから読み取る
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 取得 | セル範囲の値 |
| 先頭列 | A |
| 先頭行 | 2 |
| 最終列 | F |
| 最終行 | %SrcFirstFreeRow% - 1 |
| 詳細 → 範囲の最初の行に列名が含まれています | オフ |
| 詳細 → セルの内容を取得(旧:セル内容をテキストとして取得) | 用途に応じて(後述) |
| 生成された変数 | SrcData |
このアクションで取得した%SrcData%は DataTable型(表形式のデータ)になります。エクセルの表がそのまま変数の中に格納されているとイメージしてください。
セルの内容を取得の使い分け
PADのバージョンによって、入力された値/プレーン テキスト/書式設定されたテキスト値の3択(新しいUI)か、セル内容をテキストとして取得のオン・オフ(従来のUI)で表示されます。意味は同じです。
- 入力された値(テキスト取得=オフ):数値は数値、日付は日付として取得されます。転記先でも計算やソートを行う場合はこちらです。
- プレーン テキスト(テキスト取得=オン):見えているとおりの文字列として取得します。
001のような先頭ゼロ付きの伝票番号やコードが「1」に化けるのを防げます。- 書式設定されたテキスト値:
¥1,280,000や2026年8月3日のように、表示形式を反映した文字列で取得します。見た目をそのまま転記したい帳票向けです。商品コードなどコード類が含まれる場合はテキスト取得、金額や数量を計算に使う場合は入力された値、と使い分けます。両方混在する場合は、範囲を分けて2回読むか、テキストで読んでから必要な列だけ数値変換します。
4-5-5. 転記先シートをアクティブにして、書き込み開始行を求める
アクティブな Excel ワークシートの設定
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 次と共にワークシートをアクティブ化 | 名前 |
| ワークシート名 | 集計 |
Excel ワークシートから最初の空の列や行を取得
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 生成された変数 |
DstFirstFreeColumn, DstFirstFreeRow
|
これで「集計シートの、次に書き込むべき行」が%DstFirstFreeRow%に入ります。ループのたびに取り直しているため、東京のデータを書いた後は自動的にその下から大阪のデータが続く、という動きになります。
4-5-6. 1行ずつ書き込む
For each(内側のループ)
| パラメータ | 設定値 |
|---|---|
| 反復処理を行う値 | %SrcData% |
| 保存先 | CurrentRow |
DataTableをFor eachで回すと、1周ごとに1行ぶんのデータ(DataRow型)が%CurrentRow%に入ります。
Excel ワークシートに書き込む(A列:支店名)
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 書き込む値 | %CurrentSheet% |
| 書き込みモード | 指定したセル上 |
| 列 | A |
| 行 | %DstFirstFreeRow% |
Excel ワークシートに書き込む(B列以降:明細6列)
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| 書き込む値 | %CurrentRow% |
| 書き込みモード | 指定したセル上 |
| 列 | B |
| 行 | %DstFirstFreeRow% |
ここが最大のポイントです。 「書き込む値」にDataRow変数をそのまま指定すると、PADはその行の全項目を指定セルから右方向へ自動展開して書き込みます。つまりB列を指定するだけで、B〜G列の6セルが一度に埋まります。1セルずつ
%CurrentRow[0]%、%CurrentRow[1]%……と6個のアクションを並べる必要はありません。
変数を大きくする(書き込み行を1つ進める)
| パラメータ | 設定値 |
|---|---|
| 変数名 | %DstFirstFreeRow% |
| 大きくする数値 | 1 |
End(内側のFor eachを閉じる)
End(4-5-3のIfを閉じる)
End(外側のFor eachを閉じる)
4-6. STEP5:保存して閉じる
Excel を閉じる
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelInstance% |
| Excel を閉じる前 | ドキュメントを保存 |
上書き保存ではなく別名で残したい場合は「名前を付けてドキュメントを保存」を選び、ドキュメント パスに次のような式を指定すると、実行日付付きのファイルを生成できます。
C:\RPA\売上管理_%FormattedDateTime%.xlsx
※%FormattedDateTime%は、事前に 現在の日時を取得 → datetime をテキストに変換(カスタム形式 yyyyMMdd)で作成しておきます。
4-7. 【高速化】DataTableを一括で書き込む方法
4-5-6では1行ずつループして書き込みました。この方法は「支店名を各行に付与する」という要件に素直に対応できますが、データが数千行になると1セルずつの通信が積み重なり、処理時間が伸びます。
そこで、明細部分をDataTableごと一括で書き込み、支店名だけを別ループで埋める方法があります。
Excel ワークシートに書き込む(明細を一括)
| パラメータ | 設定値 |
|---|---|
| 書き込む値 | %SrcData% |
| 列 | B |
| 行 | %DstFirstFreeRow% |
DataTable変数をそのまま指定すると、指定セルを左上として表全体が一気に貼り付けられます。これでB2からG21まで一発で埋まります。
その後、支店名を埋めるループを回します。
Loop LoopIndex from %DstFirstFreeRow% to %DstFirstFreeRow% + %SrcData.RowsCount% - 1 step 1
Excel ワークシートに書き込む(値: %CurrentSheet%, 列: A, 行: %LoopIndex%)
End
%SrcData.RowsCount%はDataTableの行数を返すプロパティです。これで書き込みアクションの実行回数が「行数×6回」から「1回+行数回」に減り、体感速度が大きく改善します。
さらに徹底するなら、読み取ったDataTableに支店名列を追加してから一括書き込みする方法もあります(データ テーブルグループのデータ テーブルに列を挿入とデータ テーブル アイテムを更新するを使用)。まずは動くフローを作り、遅いと感じたら最適化する、という順序をおすすめします。
4-8. パターンAでつまずきやすいポイント
| 症状 | 原因 | 対処 |
|---|---|---|
| 常に同じシートのデータが転記される | アクティブシートの切り替えを忘れている | 読み取り前・書き込み前に必ずアクティブな Excel ワークシートの設定を入れる |
| 転記先の1行目(ヘッダー)が上書きされる |
FirstFreeRowを転記元用と共用してしまっている |
変数名をSrcFirstFreeRow/DstFirstFreeRowに分ける |
| 実行のたびにデータが増え続ける | 転記先のクリア処理がない | STEP2のクリア処理を必ず入れる |
| 商品コードの先頭ゼロが消える | 数値として読み取っている |
セル内容をテキストとして取得をオンにする |
| 日付が数値(45000など)になる | 転記先セルの表示形式が標準 | 転記先の列にあらかじめ日付の表示形式を設定しておく |
| データがないシートでエラーになる | 空シートのガードがない |
If %SrcFirstFreeRow% > 2で囲む |
| 最終行が正しく取れない | 表の下に空白行を挟んで別の記載がある | 表の下には何も書かない運用にする、または明示的に最終行を指定する |
5. 【パターンB】別ワークブックのワークシートへの転記
5-1. パターンAとの違い
別ブックへの転記でも、考え方の骨格はパターンAと同じです。違いは次の1点に集約されます。
Excelインスタンスを2つ扱う
- 転記元ブック用:
%ExcelSrc% - 転記先ブック用:
%ExcelDst%
各Excelアクションの「Excel インスタンス」欄にどちらの変数を指定するかを意識するだけで、あとはパターンAの知識がそのまま使えます。逆に言えば、ここを間違えると「読み取ったはずのデータが転記元ブックに書き込まれる」といった事故が起きます。
5-2. シナリオ設定
| 役割 | ファイル | シート |
|---|---|---|
| 転記元 | C:\RPA\売上管理.xlsx |
東京 大阪 名古屋 福岡
|
| 転記先 | C:\RPA\全社集計_2026.xlsx |
集計 |
5-3. フローの全体像
1. Excel の起動(転記元:売上管理.xlsx)→ %ExcelSrc%
2. Excel の起動(転記先:全社集計_2026.xlsx)→ %ExcelDst%
3. 転記先「集計」シートをクリア
4. 転記元シート名リストを作成
5. ループ開始
5-1. %ExcelSrc% でシートをアクティブ化
5-2. %ExcelSrc% で最終行を取得
5-3. %ExcelSrc% からデータを読み取る → %SrcData%
5-4. %ExcelDst% で「集計」シートをアクティブ化
5-5. %ExcelDst% で書き込み開始行を取得
5-6. %ExcelDst% へ書き込む
6. ループ終了
7. %ExcelDst% を保存して閉じる
8. %ExcelSrc% を保存せずに閉じる
5-4. STEP1:2つのブックを開く
Excel の起動(1つ目:転記元)
| パラメータ | 設定値 |
|---|---|
| Excel の起動 | 次のドキュメントを開く |
| ドキュメント パス | C:\RPA\売上管理.xlsx |
| インスタンスを表示する | オン(開発中) |
| 読み取り専用として開く | オン |
| 生成された変数 | ExcelSrc |
転記元は読むだけなので、読み取り専用で開くのが安全です。誤って書き換えてしまう事故を構造的に防げます。
Excel の起動(2つ目:転記先)
| パラメータ | 設定値 |
|---|---|
| Excel の起動 | 次のドキュメントを開く |
| ドキュメント パス | C:\RPA\全社集計_2026.xlsx |
| 読み取り専用として開く | オフ |
| 生成された変数 | ExcelDst |
生成された変数名は必ずリネームしてください。 既定のままだと
ExcelInstanceとExcelInstance2になり、どちらが転記元か一目で判別できません。ExcelSrc/ExcelDstのように役割が分かる名前にしておくと、後日の修正が格段に楽になります。
転記先ファイルが存在しない場合の対応
毎月新規にファイルを作る運用であれば、次のように分岐させます。
-
ファイルが存在する場合(ファイルグループ)でC:\RPA\全社集計_2026.xlsxの存在を確認 - 存在する →
Excel の起動で開く - 存在しない →
Excel の起動(空のドキュメント)→ 必要なヘッダーを書き込む →Excel を閉じる(名前を付けてドキュメントを保存)
より簡単なのは、ひな形ファイル(テンプレート)をあらかじめ用意しておき、ファイルのコピーアクションで複製してから開く方法です。ヘッダーや書式、印刷設定まで引き継げるため、実務ではこちらが扱いやすいでしょう。
5-5. STEP2〜3:転記先のクリアとシート名リストの作成
4-3、4-4とまったく同じ手順ですが、Excelインスタンスに%ExcelDst%を指定する点だけが異なります。
-
アクティブな Excel ワークシートの設定:インスタンス%ExcelDst%、ワークシート名集計 -
Excel ワークシートから最初の空の列や行を取得:インスタンス%ExcelDst%→DstFirstFreeRow -
If %DstFirstFreeRow% > 2→Excel ワークシートから削除する(インスタンス%ExcelDst%、A2〜G%DstFirstFreeRow% - 1、上へシフト)
シート名リストは %['東京', '大阪', '名古屋', '福岡']% をSheetListに設定します。転記元のシート一覧を動的に取得する場合は、すべての Excel ワークシートを取得のインスタンスに%ExcelSrc%を指定します。
5-6. STEP4:ループ内の転記処理
For each CurrentSheet in %SheetList% の内側に、以下を配置します。
| # | アクション | インスタンス | 主な設定 |
|---|---|---|---|
| 1 | アクティブな Excel ワークシートの設定 | %ExcelSrc% |
ワークシート名 %CurrentSheet%
|
| 2 | Excel ワークシートから最初の空の列や行を取得 | %ExcelSrc% |
→ SrcFirstFreeRow
|
| 3 | If | ― | %SrcFirstFreeRow% > 2 |
| 4 | Excel ワークシートから読み取る | %ExcelSrc% |
A2 〜 F%SrcFirstFreeRow% - 1 → SrcData
|
| 5 | アクティブな Excel ワークシートの設定 | %ExcelDst% |
ワークシート名 集計
|
| 6 | Excel ワークシートから最初の空の列や行を取得 | %ExcelDst% |
→ DstFirstFreeRow
|
| 7 | Excel ワークシートに書き込む | %ExcelDst% |
値 %SrcData%、列 B、行 %DstFirstFreeRow%
|
| 8 | Loop | ― |
%DstFirstFreeRow% から %DstFirstFreeRow% + %SrcData.RowsCount% - 1 まで |
| 9 | Excel ワークシートに書き込む | %ExcelDst% |
値 %CurrentSheet%、列 A、行 %LoopIndex%
|
| 10 | End(Loop) | ― | ― |
| 11 | End(If) | ― | ― |
ここでは4-7で紹介した一括書き込み方式を採用しています。表全体を%SrcData%のまま%ExcelDst%のB列に流し込み、支店名だけをLoopでA列に埋めています。
インスタンス指定を1行ずつ指差し確認するのが、このパターンを確実に動かす最大のコツです。フローを組んだら、上表のようにアクションとインスタンスの対応を一覧にして見直してみてください。
5-7. STEP5:保存とクローズ
Excel を閉じる(転記先)
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelDst% |
| Excel を閉じる前 | ドキュメントを保存 |
Excel を閉じる(転記元)
| パラメータ | 設定値 |
|---|---|
| Excel インスタンス | %ExcelSrc% |
| Excel を閉じる前 | ドキュメントを保存しない |
読み取り専用で開いているので、保存はしません。閉じ忘れるとExcelのプロセスがバックグラウンドに残り続け、次回実行時にファイルがロックされる原因になります。 必ず両方を閉じてください。
5-8. 【応用】フォルダ内の複数ブックを1つに集約する
「各支店から届いた個別ファイルを1つにまとめたい」というケースには、外側にもう1段ループを追加します。
フォルダー内のファイルを取得(フォルダーグループ)
| パラメータ | 設定値 |
|---|---|
| フォルダー | C:\RPA\受信\ |
| ファイル フィルター | *.xlsx |
| 生成された変数 | Files |
Excel の起動(転記先ブック)→ %ExcelDst%
転記先クリア
For each CurrentFile in %Files%
Excel の起動(%CurrentFile%、読み取り専用)→ %ExcelSrc%
すべての Excel ワークシートを取得(%ExcelSrc%)→ %SheetNames%
For each CurrentSheet in %SheetNames%
…(5-6の転記処理)…
End
Excel を閉じる(%ExcelSrc%、保存しない)
End
Excel を閉じる(%ExcelDst%、保存)
ここでのポイントは、転記元ブックをループの内側で開き、内側で閉じることです。開きっぱなしにするとExcelインスタンスが際限なく増え、メモリを圧迫します。
なお、ファイル名から支店名を取り出したい場合は、%CurrentFile.NameWithoutExtension% というプロパティが使えます。東京支店_202608.xlsxのようなファイル名であれば、テキストの分割アクションで_区切りにして先頭要素を取れば支店名が得られます。
5-9. エラー処理を入れて「止まらないフロー」にする
実務で運用するなら、エラー時にExcelが開きっぱなしにならないようにしておきたいところです。
ブロック エラー発生時(フロー制御グループ)で、Excel起動から終了までを囲みます。
- 例外発生時の動作:フローの実行を続行する → 次のアクションに移動
- ブロックの後に、
Excel を閉じる(保存しない)を配置
さらに丁寧にするなら、ブロック エラー発生時の中で新しいルールとして「変数の設定」を追加し、エラーフラグを立てておき、フロー末尾でメッセージを表示またはメールの送信で担当者に通知する構成にします。
また、各アクション右下の歯車マークから開ける エラー発生時 設定では、アクション単位で「再試行」を構成できます。ネットワーク上の共有フォルダにあるファイルを扱う場合、一時的なアクセス失敗を再試行で吸収できるため有効です。
5-10. パターンBでつまずきやすいポイント
| 症状 | 原因 | 対処 |
|---|---|---|
| 転記元ブックにデータが書き込まれる | 書き込みアクションのインスタンスが%ExcelSrc%になっている |
インスタンス指定を全アクションで確認。転記元は読み取り専用で開く |
| 2回目の実行でファイルが開けない | 前回のExcelプロセスが残っている |
Excel を閉じるを漏れなく配置。ブロック エラー発生時で異常時も閉じる |
| 「ファイルが使用中です」と出る | 誰かがファイルを開いている/自分で開いたまま | 実行前に閉じる運用を徹底。共有ファイルはコピーしてから処理する |
| 転記先が毎回新規作成されて書式が崩れる | 空のドキュメントから作っている | ひな形ファイルをファイルのコピーで複製する方式に変更 |
| 実行が非常に遅い | 1セルずつ書き込んでいる/画面表示がオン | DataTable一括書き込みに変更、インスタンスを表示するをオフに |
| ネットワークドライブ上のファイルでエラー | パス指定・権限・一時的な切断 | UNCパス(\\server\share\...)で指定し、エラー発生時の再試行を設定 |
6. おわりに
本記事では、Power Automate DesktopによるExcel転記処理を、同一ブック内(パターンA)と別ブック間(パターンB)の2つに分けて解説しました。
改めて、両パターンに共通する5つの型を整理しておきます。この型さえ押さえれば、シート数やブック数が変わっても応用が利きます。
-
Excel の起動でインスタンス変数を得る — 以降すべての操作はこの変数が起点 -
アクティブな Excel ワークシートの設定で操作対象シートを切り替える — 読み書きの直前に必ず実行 -
最初の空の列や行を取得で範囲を動的に決める — 行数を固定値で書かないことが、データ量の増減に耐えるフローの条件 -
Excel ワークシートから読み取るでDataTableとして取得し、Excel ワークシートに書き込むで一括展開する — セル単位のループを減らすほど速く、シンプルになる - 転記前に転記先をクリアする — 再実行しても結果が同じになる(冪等な)フローにする
最初から完璧なフローを目指す必要はありません。おすすめの進め方は次のとおりです。
- まず1シートだけを転記するフローを作り、正しく動くことを確認する
- 次にループで囲んで複数シートに対応させる
- さらに空データ・エラー処理のガードを足す
- 最後に高速化と保存先の運用を整える
この順番であれば、途中でつまずいても「どこまでは動いていたか」が明確なので、原因の切り分けが容易です。PADにはブレークポイント(アクション左端のクリックで設定)と変数ペインがあり、1アクションずつ実行しながら変数の中身を確認できます。思ったとおりに動かないときは、まず変数の中身を覗くのが最短ルートです。
月に数時間かかっていた転記作業が、ボタン一つで数十秒に変わる。その効果以上に大きいのは、「転記ミスがあるかもしれない」という不安から解放されることだと思います。まずは手元の一番面倒な転記作業から、自動化を始めてみてください。
7. 参考リンク
公式ドキュメント(Microsoft Learn)
-
Excel アクション リファレンス - Power Automate
本記事で使用したすべてのExcelアクションのパラメータと出力変数が網羅されています。困ったらまずここを参照してください。 -
Power Automate for desktop のドキュメント
PADの全体像、インストール、基本操作の入口となるページです。 -
デスクトップ フローのアクション リファレンス
Excel以外(ファイル、フォルダー、データテーブル、フロー制御など)のアクション一覧です。 -
変数のデータ型 - Power Automate
DataTable、DataRow、リストなど、本記事で扱ったデータ型の詳細が解説されています。 -
変数のデータ型のプロパティ - Power Automate
%SrcData.RowsCount%のように、変数から直接取得できるプロパティの一覧です。 -
ループ アクション リファレンス - Power Automate
Loop、For each、ループ条件、次のループの使い分けが整理されています。 -
デスクトップ フローでエラーを処理する - Power Automate
ブロック エラー発生時やアクション単位の再試行設定について解説されています。 -
Excel アクションを含むデスクトップ フローを実行するときのエラー - Power Automate
Excelアクション特有のエラーとその原因・対処がまとまっているトラブルシューティングページです。
学習コンテンツ
-
デスクトップ用 Power Automate での Excel オートメーション(Microsoft Learn トレーニング)
無料のハンズオン形式トレーニングです。本記事の内容を手を動かしながら復習できます。 -
Power Automate デスクトップ アプリでループを使用して反復的なタスクを自動化する(Microsoft Learn トレーニング)
ループ処理を集中的に学べるモジュールです。転記処理はループの理解がそのまま実力になります。 -
Microsoft Power Platform Community フォーラム
実装で行き詰まったときの質問先です。同様の事例が既に投稿されていることも多くあります。
最後までお読みいただきありがとうございました。
この記事が、皆さまの日々の転記作業を減らす一助になれば幸いです。