
うわーん、今月も支店から売上のExcelが10個も届いたよ…。全部開いて、コピーして、貼り付けて…。これだけで午前中が終わっちゃう!

Robo1号、それこそPADの出番です。今回から始まる新シリーズ「Robo1号の実践レシピ」では、これまで紹介したアクションを組み合わせて、実際の業務で使えるフローを作っていきます。

第1回は「フォルダ内のExcelを1つに集計する」フローです。

それ、まさにやりたかったやつ!よろしくね!
完成イメージ
フォルダに入っている複数のExcelファイルのデータを、1つのExcelファイルにまとめます。
- 集計前:「売上データ」フォルダに、支店ごとのExcel(大阪支店.xlsx、京都支店.xlsx、神戸支店.xlsx …)が入っている
- 集計後:全支店のデータが縦につながった「集計結果.xlsx」ができる

事前準備
フローを作る前に、次の2つを用意しておきます。
① 集計したいExcelを1つのフォルダにまとめる
今回は例として、C:\RPA\売上データ フォルダに集計したいExcelを入れておきます。
- どのファイルも1行目が見出し、2行目からデータになっていること
- どのファイルも列の並び(日付・商品名・数量・金額など)が同じであること
② 見出しだけ入れた「集計テンプレート」を作る
C:\RPA\集計テンプレート.xlsx を作り、1行目に見出しだけを入力しておきます。PADはこのテンプレートの2行目から下に、各ファイルのデータを書き足していきます。


テンプレートは「売上データ」フォルダの外に置いてください。フォルダの中に置くと、テンプレート自身も集計対象になってしまいます。
フローの全体像
使うアクションは次のとおりです。過去に解説したアクションは、リンク先で詳しく説明しています。
| 順番 | アクション | やること |
|---|---|---|
| 1 | 変数の設定 | 集計したいフォルダの場所を変数に入れる |
| 2 | フォルダー内のファイルを取得 | フォルダ内のExcelファイルの一覧を取得する |
| 3 | Excelの起動 | 集計テンプレートを開く |
| 4 | For each | ファイルの数だけ、5~9を繰り返す |
| 5 | Excelの起動 | 支店のExcelを1つ開く |
| 6 | Excelワークシートから読み取る | 支店のExcelのデータを読み取る |
| 7 | Excelワークシートから列における最初の空の列や行を取得 | テンプレートの空いている行を調べる |
| 8 | Excelワークシートに書き込み | 読み取ったデータを空いている行に書き込む |
| 9 | Excelを閉じる | 支店のExcelを閉じる |
| 10 | Excelを閉じる(名前を付けて保存) | 集計結果を別名で保存する |

フローの作り方
1.変数の設定
「変数」→「変数の設定」を追加し、集計したいフォルダの場所を入れておきます。
- 変数名:FolderPath
- 値:C:\RPA\売上データ

フォルダの場所を変数にしておくと、あとで別のフォルダを集計したいときも、ここを1か所変えるだけで済みます。
2.フォルダー内のファイルを取得
「フォルダー」→「フォルダー内のファイルを取得」を追加します。
- フォルダー:%FolderPath%
- ファイル フィルター:*.xlsx
- 生成された変数:Files(ファイルの一覧が入ります)

3.Excelの起動(集計テンプレートを開く)
「Excel」→「Excelの起動」を追加します。
- Excelの起動:次のドキュメントを開く
- ドキュメント パス:C:\RPA\集計テンプレート.xlsx
- インスタンスを表示する:オン(動きを確認したいので表示しておきます)
- 生成された変数:ExcelInstance
4.For each(ファイルの数だけ繰り返す)
「ループ」→「For each」を追加します。
- 反復処理を行う値:%Files%
- 保存先:CurrentItem(今処理しているファイルが入ります)
ここから先の5~9は、For each と End の間に入れます。
5.Excelの起動(支店のExcelを開く)
もう一度「Excelの起動」を追加します。
- Excelの起動:次のドキュメントを開く
- ドキュメント パス:%CurrentItem%
- インスタンスを表示する:オフ
- 読み取り専用として開く:オン(元のファイルをうっかり書き換えないため)
- 生成された変数:ExcelInstance2

集計テンプレート(ExcelInstance)と支店のExcel(ExcelInstance2)で、インスタンスを分けているのがポイントです。インスタンスについては「PAD:インスタンスのお話」で詳しく説明しています。
6.Excelワークシートから読み取る
「Excel」→「Excelワークシートから読み取る」を追加します。
- Excelインスタンス:%ExcelInstance2%
- 取得:ワークシートに含まれる使用可能なすべての値
- 詳細 →「範囲の最初の行に列名が含まれています」:オン
- 生成された変数:ExcelData

「範囲の最初の行に列名が含まれています」をオンにすると、見出し行は列名として扱われ、データ部分だけが読み取られます。見出しはテンプレートに入っているので、ここでは見出しを読み取らないようにします。
7.最初の空の行を取得
「Excel」→「Excelワークシートから列における最初の空の列や行を取得」を追加します。
- Excelインスタンス:%ExcelInstance%(集計テンプレートのほう)
- 生成された変数:FirstFreeColumn、FirstFreeRow
FirstFreeRow に「データが入っていない最初の行の番号」が入ります。1つ目のファイルのときは 2、次のファイルのときはその続きの行番号になります。
8.Excelワークシートに書き込み
「Excel」→「Excelワークシートに書き込み」を追加します。
- Excelインスタンス:%ExcelInstance%
- 書き込む値:%ExcelData%
- 書き込みモード:指定したセル上
- 列:1
- 行:%FirstFreeRow%

9.Excelを閉じる(支店のExcel)
「Excel」→「Excelを閉じる」を追加します。
- Excelインスタンス:%ExcelInstance2%
- Excelを閉じる前:ドキュメントを保存しない
10.Excelを閉じる(集計結果を保存)
最後に、For each の End の下に「Excelを閉じる」を追加します。
- Excelインスタンス:%ExcelInstance%
- Excelを閉じる前:名前を付けてドキュメントを保存
- ドキュメント パス:C:\RPA\集計結果.xlsx

「名前を付けて保存」にすることで、テンプレートは見出しだけの状態のまま残ります。次回もそのまま使えます。保存については「PADアクション:Excelの保存」もご覧ください。
コピペ用フロー
下のコードをコピーして、PADのフローデザイナーに貼り付けると、今回のフローがそのまま再現できます。フォルダやファイルの場所は、ご自分の環境に合わせて変更してください。
動作確認はVer2.73です。
SET FolderPath TO $'''C:\\RPA\\売上データ'''
Folder.GetFiles Folder: FolderPath FileFilter: $'''*.xlsx''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''C:\\RPA\\集計テンプレート.xlsx''' Visible: True ReadOnly: False Instance=> ExcelInstance
LOOP FOREACH CurrentItem IN Files
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: CurrentItem Visible: False ReadOnly: True Instance=> ExcelInstance2
Excel.ReadFromExcel.ReadAllCells Instance: ExcelInstance2 GetCellContentsMode: Excel.GetCellContentsMode.TypedValues FirstLineIsHeader: True RangeValue=> ExcelData
Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
Excel.WriteToExcel.WriteCell Instance: ExcelInstance Value: ExcelData Column: 1 Row: FirstFreeRow
Excel.CloseExcel.Close Instance: ExcelInstance2
END
Excel.CloseExcel.CloseAndSaveAs Instance: ExcelInstance DocumentFormat: Excel.ExcelFormat.FromExtension DocumentPath: $'''C:\\RPA\\集計結果.xlsx'''
うまく動かないときは
「~$」で始まるファイルでエラーになる
集計したいExcelを開いたままにしていると、フォルダに「~$大阪支店.xlsx」のような一時ファイルができ、それも読み込もうとしてエラーになります。実行前に、対象のExcelはすべて閉じておきましょう。
列がずれて書き込まれる
ファイルによって列の並びが違うと、データがずれてしまいます。すべてのファイルで、列の並びがテンプレートと同じになっているか確認してください。
途中に空白行があるとデータが上書きされる
「最初の空の行」は、データの途中に空白行があるとそこを空き行と判断することがあります。各ファイルのデータに空白行がないか確認しておくと安心です。
エラーで止まるとExcelが開きっぱなしになる
途中でエラーになると、非表示で開いたExcelが残ることがあります。その場合はタスクマネージャーからExcelを終了してから、もう一度実行してください。
応用アイデア
- どの支店のデータかわかるように、ファイル名を列に追加する
- 保存するファイル名に日付を入れて「集計結果_20261103.xlsx」のようにする
- 集計が終わったら、元のファイルを「処理済み」フォルダに移動する
このあたりは、今後のレシピで紹介していく予定です。
Robo1号の感想

できたー!今までコピペで午前中かかってた作業が、ボタン1つで数十秒で終わったよ!Robo1号のなやみで書いた「大量のExcelデータ処理」も、これでだいぶ楽になりそうだね。事前にテンプレートを用意しておくのと、元のファイルは読み取り専用で開くのがコツだね。これで今日も定時で退社だ!
