この記事では、Power Automate Desktop(以下、PAD)を使って、特定のファイルを別フォルダーへコピーし、Excel管理表でファイルの有無をチェックするフローができたので紹介します。
毎月使っていますが、これとても便利!
例えば、毎月発生する請求書や明細書の格納作業、入社・退職する人が提出した書類を集める作業など、条件に合うファイルを探して整理・管理する業務に活用できます。
事前にフォルダー構成やファイル名の付け方を統一しておく必要はありますが、「毎月同じ作業をする」「集めるファイルが多い」場合には、とても便利なフローです。
- 条件に合う必要なファイルを集めるPADフロー
- 集めたファイルの有無をExcel管理表にチェックするPADフロー
全体の流れ

今回の例は、
- 請求書フォルダーの中にある各顧客フォルダーから「請求書」と「明細書」をコピーして、「今月の請求書」フォルダーへ格納する
- 集めた「請求書」と「明細書」が顧客ごとにあるかどうかをExcel管理表にチェックする
という2つの作業をPADで自動化していきます。
全体のフローは下図のようになります。

対象ファイルをコピーして別フォルダに格納
まずは、対象となるファイルをコピーするPADフローを作成します。
1.フォルダーの選択ダイアログを表示
「フォルダーの選択ダイアログを表示」アクションを使用します。
今回は「フォルダーの選択ダイアログを表示」を使用していますが、フォルダーパスを直接指定する方法などもあります。
ご自身の環境や使いやすさに合わせて設定してください。

| 項目 | 選設定 |
|---|---|
| ダイアログの説明 | 任意で名前をつける |
| 初期フォルダー | 選択するフォルダを探しやすい場所(親フォルダーなど)を指定 |
| フォルダー選択ダイアログを常に手前に表示する | ON |
| 生成された変数 | SelectedFolder |
| ButtonPressed ※今回は使いません |
2.フォルダー内のファイルを取得
次に、「フォルダー内のファイルを取得」アクションを使用します。

| 項目 | 設定 |
|---|---|
| フォルダー | %SelectedFolder% |
| ファイルフィルター | *.* |
| サブフォルダを含める | ON |
| 生成された変数 | Files |
今回のフォルダー構成では、請求書フォルダ(%SelectedFolder%)の中に顧客ごとのフォルダー(A社、B社など)があるため、「サブフォルダーを含める」を「ON」にしています。
ファイルフィルターは、ファイル名や拡張子を限定せず、フォルダー内のファイルを取得する設定にしています。
Excelファイルに限定したい場合は「.xlsx」、PDFに限定したい場合は「.pdf」など、必要に応じて変更してください。
3.For eachとIfの設定
次に、For eachとIfを使って、条件に一致するファイルだけをコピーする処理を繰り返すフローを作成します。

フローの流れ
- <For each> 取得したFileを1つずつ処理する
- <If> 「請求書」という文字があればファイルをコピー
- <Else If>2に該当しない場合、「明細書」という文字があればファイルをコピー
- <If>〜<End> どちらにも該当しない場合は、そのファイルの処理を終了
- <For each>〜<End> 取得したすべてのFileを確認するまで、1~4を繰り返す
For each
For eachでは、取得したファイルを1つずつ取り出して処理します。

| 項目 | 設定 |
|---|---|
| 反復処理を行う値 | %Files% |
| 保存先 | CurrentItem |
CurrentItemには、For eachで現在処理しているファイルが格納されます。
「格納」という言葉が分かりづらい場合は、後で使えるようにファイルの情報を「Files」という名前で記録しておくというイメージで大丈夫です。
If→ファイルのコピー
次に、ファイル名に「請求書」という文字が含まれているかを確認します。「請求書」が含まれていれば、そのファイルを指定したフォルダーへコピーします。

| 項目 | 設定 |
|---|---|
| 最初のオペランド | %CurrentItem.Name% |
| 演算子 | 次を含む |
| 2番目のオペランド | 請求書 |
| 大文字小文字を区別しない | 任意 |
次にファイルのコピーアクションを使用します。

| 項目 | 設定 |
|---|---|
| コピーするファイル | %CurrentItem% |
| 宛先フォルダー | コピー先のフォルダパスを入力 |
| ファイルが存在する場合 | 任意 ※ここでは「何もしない」を選択 |
| 生成された変数 | CopiedFiles |
「ファイルが存在する場合」の設定は、運用に合わせて「何もしない・上書き」などから選択してください。
Else if→ファイルのコピー
「請求書」に該当しない場合は、「明細書」という文字が含まれているかを確認します。
「明細書」が含まれていれば、同じように指定したフォルダーへコピーします。

| 項目 | 設定 |
|---|---|
| 最初のオペランド | %CurrentItem.Name% |
| 演算子 | 次を含む |
| 2番目のオペランド | 明細書 |
| 大文字小文字を区別しない | 任意 |
先ほどの請求書の場合と同様に、この後に「ファイルのコピー」アクションを追加します。
これで、「請求書」または「明細書」のファイルだけを指定したフォルダーへコピーするフローが完成しました。
Excel管理表でファイル有無のチェックを自動化
次に、コピーしたファイルを確認し、Excel管理表にチェックを入れるフローを作成します。

作業を始める前に、上図のような管理表を作っておきます。
今回は、A列に顧客名を入れ、B列を「請求書」、C列を「明細書」としています。
PADでは、
- 顧客Aの請求書があれば「請求書」のセルに「○」
- 顧客Aの明細書があれば「明細書」のセルに「○」
- ファイルがなければ空白
という処理を、顧客ごとに自動で行います。
今回のフローでは、ファイル名から「顧客名」と「書類の種類」を取得して判定するため、あらかじめファイル名の付け方を統一しておく必要があります。
例)A社_請求書_202608.xlsx、B社_明細書_202608.pdf…
このように、「_(アンダーバー)」で情報を区切る形式にしておきます。
ファイル名のルールを統一しておけば、請求書や明細書に限らず別の種類のファイルにも応用できます。
1.Excelを起動してデータを読み取る

まずは、Excel管理表を起動して、管理表のデータをPADで扱えるように変数へ格納します。
- Excelの起動
- Excel ワークシートから読み取る
① Excelの起動
Excel管理表を指定して起動します。

| 項目 | 設定 |
|---|---|
| Excelの起動 | 次のドキュメントを開く |
| ドキュメントパス | Excel管理表のパスを入力 |
| インスタンスを表示する | 任意 ※画面上に表示させたい場合はON |
| 読み取り専用として開く | OFF |
| 生成された変数 | Excellnstance |
② Excelワークシートから読み取る
次に、Excel管理表のデータを読み取り、後で使用できるようにデータテーブルとして変数に格納します。

| 項目 | 設定 |
|---|---|
| Excelインスタンス | %Excellnstance% |
| 取得 | ワークシートに含まれる使用可能なすべての値 |
| セルの内容を取得する形式 | 入力された値 |
| 範囲の最初の行に列名が含まれています | ON |
| 生成された変数 | ExcelData |
2.ファイルを判定し、Excel管理表にチェックするフロー
ここからは、For eachとIfを使って、コピーしたファイルを1つずつ確認していきます。
ここが今回のフローの中で、少し複雑な部分です

フローの流れ
- コピー先フォルダー内のファイルを取得する
- <For each>でファイルを一つ取り出す
- <テキストの分割>ファイル名を[ _ ]で分割し、顧客名と書類名を取り出す
- <If>「請求書」が含まれれていれば、請求書の列番号「2」を変数に格納する
- <Else if>3ではない場合、「明細書」が含まれていれば、明細書の列番号「3」を変数に格納する
- <変数の設定> Excelで検索を開始する行番号「2」を設定する
- <For each> Excel管理表を上から順に確認する
- <If> 顧客名が一致したら、該当する列に「○」を入力する
- <変数を大きくする> 次の行を確認する
- すべてのファイルを確認するまで、1~9を繰り返す
① フォルダー内のファイルを取得
まず、コピーしたファイルを後で使用できるように「Files2」という変数に格納します。

| 項目 | 設定 |
|---|---|
| フォルダー | コピー先のフォルダを設定 |
| ファイル フィルター | * |
| サブフォルダーを含める | OFF |
| 生成された変数 | Files2 |
② For each
For eachを使って、コピー先フォルダーのファイルを1つずつ取り出して処理します。

| 項目 | 設定 |
|---|---|
| 反復処理を行う値 | %Files2% |
| 保存先 | CurrentItem2 |
③ テキストの分割
取り出したファイル名を「_(アンダーバー)」で分割します。

| 項目 | 設定 |
|---|---|
| 分割するテキスト | %CurrentItem2.Name% |
| 区切り記号の種類 | カスタム |
| カスタム区切り記号 | _ |
| 正規表現である | OFF |
| 生成された変数 | TextList |
例えばファイル名が、「A社_請求書202608.xlsx」の場合、「_」で分割すると、以下のようになります。
- TextList[0]→A社
- TextList[1]→請求書202608.xlsx
このようにして、ファイル名から顧客名や書類の種類を取り出せるようにします。
④ If→変数の設定
次に、ファイル名に「請求書」という文字が含まれているかを確認します。
「請求書」が含まれていれば、Excel管理表の「請求書」列を示す「2」を、ColumnNoという変数に格納します。

| 項目 | 設定 |
|---|---|
| 最初のオペランド | %CurrentItem2.Name% |
| ファイルフィルター | 次を含む |
| サブフォルダを含める | 請求書 |
| 大文字小文字を区別しない | OFF(任意) |
次に変数の設定アクションを使用します。

| 項目 | 設定 |
|---|---|
| 変数 | %ColumnNo% |
| 値 | 2 |
この「2」は、Excel管理表の2列目(B列)を表します。
⑤ Else if→変数の設定
画像は省略しますが、ここではElse ifアクションを追加し、「請求書」に該当しない場合は、「明細書」という文字が含まれているかを確認します。
もし「明細書」が含まれていれば、変数の設定アクションでColumnNoに「3」を格納します。
Else ifの設定は次のように設定します。
| 項目 | 設定 |
|---|---|
| 最初のオペランド | %CurrentItem2.Name% |
| ファイルフィルター | 次を含む |
| サブフォルダを含める | 明細書 |
| 大文字小文字を区別しない | OFF(任意) |
「変数の設定」アクションは次のように設定します。
| 項目 | 設定 |
|---|---|
| 変数 | ColumnNo |
| 値 | 3 |
この「3」は、Excel管理表の3列目(C列)を表します。
このように書類の種類に応じて、後で「どの列に○を入力するか」をColumnNoに記録しておきます。
⑥ 変数の設定
次に、Excel管理表の何行目から確認するかを指定します。
今回の管理表では、1行目に「顧客名・請求書・明細書」の項目名が入っていて、顧客名を確認するのは2行目からです。
そこで、RowNoに「2」を設定します。

| 項目 | 設定 |
|---|---|
| 変数 | RowNo |
| 値 | 2 |
⑦ For each
ここでは、Excel管理表を上から順番に確認し、ファイル名から取得した顧客名と一致する行を探します。

| 項目 | 設定 |
|---|---|
| 反復処理を行う値 | %ExcelData% |
| 保存先 | CurrentRow |
⑧ If→Excelワークシートに書き込む
CurrentRow[0]には、Excel管理表のA列にある顧客名が入っています。一方、TextList[0]には、ファイル名から取得した顧客名が入っています。
この2つが一致した場合に、ColumnNoで指定した列へ「○」を入力します。

| 項目 | 設定 |
|---|---|
| 最初のオペランド | %CurrentRow[0]% |
| 演算子 | と等しい(=) |
| 2番目のオペランド | %TextList[0]% |
Excelワークシートから読み取るアクションで、「範囲の最初の行に列名が含まれています」をONにしているため、Excelの1行目は「顧客名・請求書・明細書」などの項目名として扱われます。
そのため、CurrentRow[0]は、実際の顧客データである2行目以降のA列を表します。
CurrentRow[ ]の数字は、Excelの列を0から数えた番号です。
- CurrentRow[0] → 顧客名(A列)
- CurrentRow[1] → 請求書(B列)
- CurrentRow[2] → 明細書(C列)
※「範囲の最初の行に列名が含まれています」をONにしているため、1行目の見出しは除外され、2行目以降のデータがCurrentRowに格納されています。
Excelワークシートに書き込む

| 項目 | 設定 |
|---|---|
| Excelインスタンス | %ExcelInstance% |
| 書き込む値 | ◯ |
| 書き込みモード | 指定したセル上 |
| 列 | %ColumnNo% |
| 行 | %RowNo% |
⑨ 変数を大きくする
Excel管理表の現在の行を確認したら、次の行を確認するためにRowNoを1つ増やします。

| 項目 | 設定 |
|---|---|
| 変数 | %RowNo% |
| 大きくする数値 | 1 |
Excel管理表のRowNo = 2(2行目)を確認
↓
顧客名が一致しなければRowNoを1増やし、RowNo = 3(3行目)を確認
↓
顧客名が一致しなければRowNoを1増やし、RowNo = 4(4行目)を確認
↓
……
⑩ Excelを閉じる
最後に、Excel管理表を保存して閉じます。

| 項目 | 設定 |
|---|---|
| Excelインスタンス | %ExcelInstance% |
| Excelを閉じる前 | ドキュメンを保存 |
以上で、フローは完了です。
あとは、完了したことが分かるように任意で「メッセージを表示」のアクションを追加してみてください。
まとめ

今回は、PADで対象ファイルをコピーする方法と、Excel管理表にファイルの有無を記録する方法を紹介しました。
ただ、今回のフローを使うには、事前にファイル名の付け方を統一しておく必要があります。
そのため、社内でファイル名のルールを決めるなど、事前の調整が必要になるかもしれませんが、一度仕組みを整えてしまえば、その後のファイル整理やチェック作業を効率化できます。
手動で作業すると、ファイルの数が多いほど「どこまでコピーしたか分からない」といったことが起こりやすく、地味に手間や疲労もかかります。
今回のPADフローを使えば、自動で条件に合うファイルをコピーし、その結果をExcel管理表にも記録できるので、アレンジしてぜひ活用してみてください。


