shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Power Automate】Excelのセルの値を取得(複数ブックの値抽出サンプル)

Power Automate のサンプルフローとして、特定フォルダにあるExcelファイルからセルの値を取得し、一覧にする事例。使用のツールは、Windows 10 および Windows 11 ユーザーであれば、無償で利用することができる「Microsoft Power Automate Desktop」です。

内容:

事例の前提

簡単な事例として、以下前提の事例です。

・パソコン内の特定フォルダに、複数のExcelファイルが入っている。

・各Excelファイルは同じレイアウトでセルの値は違う。

・各Excelファイルのセル番地($C$3)にある値、そのファイル名を一覧にしたい。

サンプルフローの実行で、各ファイルのセルの値を抽出一覧化のイメージ図

サンプルフローの実行イメージ

Power Automate  Desktopの基本操作

基本的な操作方法が不明な場合は以下で概略を理解可能。ある程度の基本操作が確認できたら、今回のサンプル等で実際に操作しながらで覚えていけると思います。

www.microsoft.com

 

サンプルフロー(Excelのセルの値を取得)の完成状態

簡単な事例なので以下が全体像です。

なお、初めて操作するときは、

・自動で作成される「フロー変数」の名前、何が入っているか確認しながら構築する

・For each 文は、対象を繰り返し処理するもの

ということが理解できていればよいと思います。

NO1から10までのステップがある

サンプルフロー(Excelのセルの値を取得)の完成状態

作成手順

以降、手順の中で変数を使用します。Power Automate  Desktopでは、変数名を「%」で囲む記述ルールです(例:%Files%。変数の詳細説明はこちら

以降の文章では「%」を省略した記述もありますが、適宜読み替えてください。

(1)「フローを作成する」で新規フローの作成

Power Automate  Desktopのトップ画面にある「新しいフロー」をクリックし、フローを作成する。以下は、フロー名を「複数ブックのセルの値抽出を入力」とした事例(任意の名称をつける)。

フロー名に、複数ブックのセルの値抽出を入力

「フローを作成する」で新規フローの作成

 

上記でフロー名を記入し、「作成」をクリックすると、画面中央に「ここにはアクションがありません」と表示された次のような編集画面が起動する。この状態から必要なアクションを画面左側から選択、ドラッグアンドドロップ等で追加していく。

画面中央に「ここにはアクションがありません」と表示された編集画面

編集画面(新規開始時)
(2)「フォルダー内のファイルを取得」の追加

画面左側にある「フォルダー内のファイルを取得」アクションを追加する(ドラッグアンドドロップ)。設定画面は次のとおり。

  1. Excelファイルを読み込むフォルダーの選択
    抽出対象となる「複数のExcelファイル」を保存するフォルダーを指定する。
  2. 変数名を確認する(事例では「Files」)。この変数名を後で使用する。

Excelファイルを読み込むフォルダーの選択と、変数名を確認する

「フォルダー内のファイルを取得」の設定イメージ

なお、設定した変数は画面右側のフロー変数に表示される。また自由に名前をつけることも可。今回はとりあえずそのまま利用。

(3)「Excelの起動」の追加で、一覧にまとめる用のExcelファイルを作成

画面左側にある「Excelの起動」アクションを追加する(ドラッグアンドドロップ)。
設定画面内で「Excelの起動」は「空のドキュメントを使用」(新規作成)を選択する。また、変数名も確認しておく(事例では「ExcelInstance」)。

「空のドキュメントを使用」し、変数名も確認する

一覧にまとめる用のExcelファイルの設定イメージ
(4)「For each」の追加で、各Excelのループ準備

指定したフォルダー内の各ファイルで同様の処理を繰り返すため、「For each」アクションを追加する。

  1. 「パラメータの選択」には、(2)「フォルダー内のファイルを取得」の追加で生成された変数(事例ではFiles)を指定する。{X}をクリックすると変数の選択が可能。
    なお、変数名%Files%のように「%」で囲む記述ルール。
  2. 保存先(変数名)を確認する(事例では「CurrentItem」)。この変数名に、各ファイルが順に入り、繰り返し処理が行われる。

フォルダー内のファイル取得で生成された変数をパラメータに選択

「For each」の設定イメージ
(5)「Excelワークシートから最初の空の列や行を取得」の追加

一覧にする場合のリストの最終行を取得するため、下図のようにFor each~Endの間に「Excelワークシートから最初の空の列や行を取得」アクションを追加(ドラッグアンドドロップ)する。

ドラッグアンドドロップで追加する

For each~Endの間にアクションを追加

表示される設定画面では、次のとおり「Excelインスタンス」に、(3)「Excelの起動」で、一覧にまとめる用のExcelファイルを作成で生成された変数を指定する(事例では「ExcelInstance」)。

このアクションで、変数FirstFreeRowに、完全に空である最初の行の数値が保存される。この数値を利用して一覧を作成していく。

転記するシートがあるExcelファイルの変数を指定

「Excelインスタンス」の設定イメージ
(6)「Excelの起動」の追加で、抽出対象のExcelファイルを開く

前述(5)と同様の手順で、画面左側から「Excelの起動」アクションを追加する(ドラッグアンドドロップ)。場所は、For each~Endの間で、前項の次の位置。

設定画面内は、次の通り設定する。

  1. 設定画面内の「Excelの起動」は、「次のドキュメントを開く」にする。
  2. 「ドキュメント パス」は、前述の(4)「For each」の追加で、各Excelのループ準備で生成された保存先(変数名)を入れる。事例では「CurrentItem」。
  3. 変数名も確認しておく。事例では「ExcelInstance2」。
    既定の設定どおりの場合、変数末尾に数字の有無、番号違いの変数となるので、後の工程で間違えて指定しないように注意する。

ドキュメントパスに前述のFor eachで生成された保存先を指定する

抽出対象のExcelファイルを開く設定イメージ
(7)「Excelワークシートから読み取る」の追加で、Excelから値抽出

前述同様の手順で、画面左側から「Excelワークシートから読み取る」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。

設定画面内は、次の通り設定する。

  1. 「Excelインスタンス」は、(6)「Excelの起動」の追加で、抽出対象のExcelファイルを開くで生成された変数を指定する。事例では「ExcelInstance2」(末尾の数字注意)を指定している。
    ExcelInstanceは一覧用のExcelファイルと、抽出対象となるExcelファイルの2つ存在しているので、変数名を間違えないように注意する。
  2. 「取得」は単一セルの値とする。「先頭列」「先頭行」は抽出対象となるセルの位置情報を数字で指定する。
  3. 変数名も確認しておく。事例では「ExcelData」。この変数にセルの値が代入される。

上記説明の手順の設定イメージ

「Excelワークシートから読み取る」の設定イメージ
(8)「Excelワークシートに書き込む」の追加で、一覧に値の書き込み

前述同様の手順で、画面左側から「Excelワークシートに書き込む」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。

設定画面内は、次の通り設定する。

  1. 「Excelインスタンス」は、(3)「Excelの起動」で、一覧にまとめる用のExcelファイルを作成で生成された変数を指定する(事例では「ExcelInstance」)。要は、一覧用のExcelファイルを指定している。
  2. 「書き込む値」は、前述(7)で生成されたセルの値が入った変数名を指定する。事例では「ExcelData」。
  3. 「書き込みモード」は「指定したセル上」とし、「列」に1、「行」は「FirstFreeRow」として、出力する行を指定する。

上記説明の手順の設定イメージ

ファイル名を一覧に書き込みの設定イメージ(セルの値)
(9)「Excelワークシートに書き込む」の追加で、ファイル名を一覧に書き込み

どのファイルの値かが分かるように一覧にファイル名も追記する。前述同様の手順で、画面左側から「Excelワークシートに書き込む」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。

設定画面内は、次の通り設定する。

  1. 「Excelインスタンス」は、前項同様で一覧用のExcelファイルを指定する。事例では「ExcelInstance」。
  2. 「書き込む値」は、(4)「For each」の追加で、各Excelのループ準備で生成された保存先(変数名).Nameで、ファイル名情報が取得可能。{X}をクリックして指定する。事例では「CurrentItem.Name」。
  3. あとは前項と同様に「書き込みモード」等を指定する。なお事例では「列」はとしている(前項で1列目にセルの値を出力しているので)。

上記説明の手順の設定イメージ

ファイル名を一覧に書き込みの設定イメージ(ファイル名)
(10)「Excelを閉じる」の追加で、セルの値を抽出したファイルを閉じる

前述同様の手順で、画面左側から「Excelを閉じる」アクションを追加する。場所は、For each~Endの間で、前項の次の位置。

設定画面内は、次の通り設定する。

  1. 「Excelインスタンス」は、値抽出対象のExcelファイルを指定する。(6)「Excelの起動」の追加で、抽出対象のExcelファイルを開くで生成された変数で、事例では「ExcelInstance2」(末尾の数字注意)を指定している。
  2. 「Excelを閉じる前」は、保存は不要なため「ドキュメントを保存しない」にしている。

上記説明の手順の設定イメージ

「Excelを閉じる」の設定イメージ

以上で設定は完了し、冒頭のサンプルフロー(Excelのセルの値を取得)の完成状態となる。For eachからEndまで、Filesにある各ファイルのパス情報が、CurrentItemに順番に入り、処理が繰り返される。

設定が異なる等があれば、ドラッグアンドドロップや編集等で修正する。

 

事例の実行結果

冒頭のサンプルフローの実行イメージのとおり、各ファイルの$C$3の値と、ファイル名の一覧化がされる。

なお、このサンプルフローでは、1行目は空行となる。これは、(5)「Excelワークシートから最初の空の列や行を取得」の追加で得られる「完全に空である最初の行の数値」の最小値が2となるためで、必要に応じてループの1回目は別処理とするフローに修正するか、タイトルを代入するなどしても良い。

事例の補足説明

比較的容易な事例だと思うが、注意点は次のとおり。

  • 変数名を間違えない。(必要に応じて、わかりやすい変数名に変える)
  • 変数名は「%」で囲む記述ルールの理解。例) %Files% 

後は、必要に応じて、抽出セルの数を増やしたり、転記先を変更したりする。

 

なお、実行するとわかるが、ローコードツールで便利ではあるが、

・データ抽出のスピードはVBAやPowerQueryと比較して遅くなる。

・メンテナンス(初期設定や修正)は、少し手間となりやすい。

という印象。

そのため、目的によるが数十件程度までの処理件数で、シンプルな処理のケースにPower Automateが適していると思う。

なお処理速度は、次のとおり編集画面ではなく、フロー一覧での実行速度で比較が必要です。

shikumika.org

 

その他の方法の比較は以下で整理しています。

shikumika.org