Power Automate のサンプルフローとして、特定フォルダにあるExcelファイルからセルの値を取得し、一覧にする事例。使用のツールは、Windows 10 および Windows 11 ユーザーであれば、無償で利用することができる「Microsoft Power Automate Desktop」です。
内容:
- 事例の前提
- Power Automate Desktopの基本操作
- サンプルフロー(Excelのセルの値を取得)の完成状態
- 作成手順
- (1)「フローを作成する」で新規フローの作成
- (2)「フォルダー内のファイルを取得」の追加
- (3)「Excelの起動」の追加で、一覧にまとめる用のExcelファイルを作成
- (4)「For each」の追加で、各Excelのループ準備
- (5)「Excelワークシートから最初の空の列や行を取得」の追加
- (6)「Excelの起動」の追加で、抽出対象のExcelファイルを開く
- (7)「Excelワークシートから読み取る」の追加で、Excelから値抽出
- (8)「Excelワークシートに書き込む」の追加で、一覧に値の書き込み
- (9)「Excelワークシートに書き込む」の追加で、ファイル名を一覧に書き込み
- (10)「Excelを閉じる」の追加で、セルの値を抽出したファイルを閉じる
- 事例の実行結果
- 事例の補足説明
事例の前提
簡単な事例として、以下前提の事例です。
・パソコン内の特定フォルダに、複数のExcelファイルが入っている。
・各Excelファイルは同じレイアウトでセルの値は違う。
・各Excelファイルのセル番地($C$3)にある値、そのファイル名を一覧にしたい。
Power Automate Desktopの基本操作
基本的な操作方法が不明な場合は以下で概略を理解可能。ある程度の基本操作が確認できたら、今回のサンプル等で実際に操作しながらで覚えていけると思います。
サンプルフロー(Excelのセルの値を取得)の完成状態
簡単な事例なので以下が全体像です。
なお、初めて操作するときは、
・自動で作成される「フロー変数」の名前、何が入っているか確認しながら構築する
・For each 文は、対象を繰り返し処理するもの
ということが理解できていればよいと思います。
作成手順
以降、手順の中で変数を使用します。Power Automate Desktopでは、変数名を「%」で囲む記述ルールです(例:%Files%)。変数の詳細説明はこちら。
以降の文章では「%」を省略した記述もありますが、適宜読み替えてください。
(1)「フローを作成する」で新規フローの作成
Power Automate Desktopのトップ画面にある「新しいフロー」をクリックし、フローを作成する。以下は、フロー名を「複数ブックのセルの値抽出を入力」とした事例(任意の名称をつける)。
上記でフロー名を記入し、「作成」をクリックすると、画面中央に「ここにはアクションがありません」と表示された次のような編集画面が起動する。この状態から必要なアクションを画面左側から選択、ドラッグアンドドロップ等で追加していく。
(2)「フォルダー内のファイルを取得」の追加
画面左側にある「フォルダー内のファイルを取得」アクションを追加する(ドラッグアンドドロップ)。設定画面は次のとおり。
- Excelファイルを読み込むフォルダーの選択
抽出対象となる「複数のExcelファイル」を保存するフォルダーを指定する。 - 変数名を確認する(事例では「Files」)。この変数名を後で使用する。
なお、設定した変数は画面右側のフロー変数に表示される。また自由に名前をつけることも可。今回はとりあえずそのまま利用。
(3)「Excelの起動」の追加で、一覧にまとめる用のExcelファイルを作成
画面左側にある「Excelの起動」アクションを追加する(ドラッグアンドドロップ)。
設定画面内で「Excelの起動」は「空のドキュメントを使用」(新規作成)を選択する。また、変数名も確認しておく(事例では「ExcelInstance」)。
(4)「For each」の追加で、各Excelのループ準備
指定したフォルダー内の各ファイルで同様の処理を繰り返すため、「For each」アクションを追加する。
- 「パラメータの選択」には、(2)「フォルダー内のファイルを取得」の追加で生成された変数(事例ではFiles)を指定する。{X}をクリックすると変数の選択が可能。
なお、変数名は%Files%のように「%」で囲む記述ルール。 - 保存先(変数名)を確認する(事例では「CurrentItem」)。この変数名に、各ファイルが順に入り、繰り返し処理が行われる。
(5)「Excelワークシートから最初の空の列や行を取得」の追加
一覧にする場合のリストの最終行を取得するため、下図のようにFor each~Endの間に「Excelワークシートから最初の空の列や行を取得」アクションを追加(ドラッグアンドドロップ)する。
表示される設定画面では、次のとおり「Excelインスタンス」に、(3)「Excelの起動」で、一覧にまとめる用のExcelファイルを作成で生成された変数を指定する(事例では「ExcelInstance」)。
このアクションで、変数FirstFreeRowに、完全に空である最初の行の数値が保存される。この数値を利用して一覧を作成していく。
(6)「Excelの起動」の追加で、抽出対象のExcelファイルを開く
前述(5)と同様の手順で、画面左側から「Excelの起動」アクションを追加する(ドラッグアンドドロップ)。場所は、For each~Endの間で、前項の次の位置。
設定画面内は、次の通り設定する。
- 設定画面内の「Excelの起動」は、「次のドキュメントを開く」にする。
- 「ドキュメント パス」は、前述の(4)「For each」の追加で、各Excelのループ準備で生成された保存先(変数名)を入れる。事例では「CurrentItem」。
- 変数名も確認しておく。事例では「ExcelInstance2」。
既定の設定どおりの場合、変数末尾に数字の有無、番号違いの変数となるので、後の工程で間違えて指定しないように注意する。
(7)「Excelワークシートから読み取る」の追加で、Excelから値抽出
前述同様の手順で、画面左側から「Excelワークシートから読み取る」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。
設定画面内は、次の通り設定する。
- 「Excelインスタンス」は、(6)「Excelの起動」の追加で、抽出対象のExcelファイルを開くで生成された変数を指定する。事例では「ExcelInstance2」(末尾の数字注意)を指定している。
ExcelInstanceは一覧用のExcelファイルと、抽出対象となるExcelファイルの2つ存在しているので、変数名を間違えないように注意する。 - 「取得」は単一セルの値とする。「先頭列」「先頭行」は抽出対象となるセルの位置情報を数字で指定する。
- 変数名も確認しておく。事例では「ExcelData」。この変数にセルの値が代入される。
(8)「Excelワークシートに書き込む」の追加で、一覧に値の書き込み
前述同様の手順で、画面左側から「Excelワークシートに書き込む」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。
設定画面内は、次の通り設定する。
- 「Excelインスタンス」は、(3)「Excelの起動」で、一覧にまとめる用のExcelファイルを作成で生成された変数を指定する(事例では「ExcelInstance」)。要は、一覧用のExcelファイルを指定している。
- 「書き込む値」は、前述(7)で生成されたセルの値が入った変数名を指定する。事例では「ExcelData」。
- 「書き込みモード」は「指定したセル上」とし、「列」に1、「行」は「FirstFreeRow」として、出力する行を指定する。
(9)「Excelワークシートに書き込む」の追加で、ファイル名を一覧に書き込み
どのファイルの値かが分かるように一覧にファイル名も追記する。前述同様の手順で、画面左側から「Excelワークシートに書き込む」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。
設定画面内は、次の通り設定する。
- 「Excelインスタンス」は、前項同様で一覧用のExcelファイルを指定する。事例では「ExcelInstance」。
- 「書き込む値」は、(4)「For each」の追加で、各Excelのループ準備で生成された保存先(変数名).Nameで、ファイル名情報が取得可能。{X}をクリックして指定する。事例では「CurrentItem.Name」。
- あとは前項と同様に「書き込みモード」等を指定する。なお事例では「列」は2としている(前項で1列目にセルの値を出力しているので)。
(10)「Excelを閉じる」の追加で、セルの値を抽出したファイルを閉じる
前述同様の手順で、画面左側から「Excelを閉じる」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。
設定画面内は、次の通り設定する。
- 「Excelインスタンス」は、値抽出対象のExcelファイルを指定する。(6)「Excelの起動」の追加で、抽出対象のExcelファイルを開くで生成された変数で、事例では「ExcelInstance2」(末尾の数字注意)を指定している。
- 「Excelを閉じる前」は、保存は不要なため「ドキュメントを保存しない」にしている。
以上で設定は完了し、冒頭のサンプルフロー(Excelのセルの値を取得)の完成状態となる。For eachからEndまで、Filesにある各ファイルのパス情報が、CurrentItemに順番に入り、処理が繰り返される。
設定が異なる等があれば、ドラッグアンドドロップや編集等で修正する。
事例の実行結果
冒頭のサンプルフローの実行イメージのとおり、各ファイルの$C$3の値と、ファイル名の一覧化がされる。
なお、このサンプルフローでは、1行目は空行となる。これは、(5)「Excelワークシートから最初の空の列や行を取得」の追加で得られる「完全に空である最初の行の数値」の最小値が2となるためで、必要に応じてループの1回目は別処理とするフローに修正するか、タイトルを代入するなどしても良い。
事例の補足説明
比較的容易な事例だと思うが、注意点は次のとおり。
- 変数名を間違えない。(必要に応じて、わかりやすい変数名に変える)
- 変数名は「%」で囲む記述ルールの理解。例) %Files%
後は、必要に応じて、抽出セルの数を増やしたり、転記先を変更したりする。
なお、実行するとわかるが、ローコードツールで便利ではあるが、
・データ抽出のスピードはVBAやPowerQueryと比較して遅くなる。
・メンテナンス(初期設定や修正)は、少し手間となりやすい。
という印象。
そのため、目的によるが数十件程度までの処理件数で、シンプルな処理のケースにPower Automateが適していると思う。
なお処理速度は、次のとおり編集画面ではなく、フロー一覧での実行速度で比較が必要です。
その他の方法の比較は以下で整理しています。