Power Automate for DesktopでExcelのテーブルを読み取る

しばらく前のアップデートにより、Excel操作で待望の名前付きセルがサポートされるようになりました。これで念願のテーブルへのアクセスもできるようになるのではと思い、試してみました。

(各画像をクリックすると大きく表示できます)


単純にデータを読み込む

次のようなテーブルを作成します。テーブル名は「Table1」です。

次のようなフローを作成します。

「Excelからワークシートを読み取る」アクションの「取得」に「名前付きセル」を指定します。

「名前」には「Sheet1!Table1[#すべて]」を指定します。「Sheet1!Table1」を指定すればデータ行のみ取得できます。(追記:シート指定は不要でした。後述)

実行すると次の変数が生成されます。

ExcelDataの内容は次の通りです。



列名を読み込む

上の例では、列名が Column1, Column2 のようになってしまい扱いづらいです。テーブルの列が追加や削除されたときにも問題を起こしかねません。

そこで、ひと手間加えて列名を読み込むようにします。

次のようなフローを作成します。

「Excelタークシート内のセルを選択」アクションを使って一旦テーブル全体を選択します。
「選択」には「名前付きセル」を指定します。
「名前」には「Sheet1!Table1[#すべて]」を指定します。

「Excelからワークシートを読み取る」アクションを使ってテーブルの内容を読み取ります。
「取得」に「選択範囲の値」を指定します。
「詳細」の「範囲の最初の行に列名が含まれています」をオンにします。

実行するとデータテーブルの列名にExcelテーブルの列名が設定されています。


読み取り処理

参考までに読み取り処理の例を示します。

For each アクションを使って、ExcelDataをループします。

CurrentItemから列名を使って値を取り出しメッセージを表示します。
値の指定は %CurrentItem['Name']% や %CurrentItem['Amount']% のようにします。


Power Automate for Desktopのデータテーブルがリスト構造なのか配列構造なのか不明です。行の追加削除アクションが用意されているところを見るとリスト構造ではないかと思います。

リスト構造の場合には、上記のように For each で回した方が高速に処理できるはずです。

速度が必要な場合には、両方試して速い方を採用するとよいでしょう。

追記:試したところ、どちらでもほとんど差がありませんでした。

Power Automate for Desktopのデータテーブルはリスト構造か配列構造か?


Power Automate for Desktopでテーブルを扱えるようになったのはとても嬉しいです。これで、わかりやすくなおかつ変更に強いフローを作れるようになります。


シート指定は不要

上の例では Sheet!Table1 とシート指定をしていました。しかし、試したところ、テーブルの場合はシート指定がなくても問題ないことがわかりました。

VBAからは、Worksheets("データ").ListObjects("Tデータ")のように指定するため、ワークシートの指定が必須かと勘違いしていました。

「数式」メニューの「名前の管理」を見ると、テーブル名の範囲(スコープ)は「ブック」のため、シート指定なしでいけるのでしょう。




名前付きセルを使ってExcelのテーブルを更新する方法を書いてみました。

Power Automate for Desktop: Excelのテーブルに一気に書き込む



コメント

アクセス数の多い投稿

セキュリティ対策ソフトのノートンが詐欺ソフトまがいになってしまってショック

ZIPファイルを開こうとすると、展開を完了できません、と言われる

Excel 2019 クエリが原因で日本語入力の一文字目が勝手に確定する

オカムラ家具のOAチェアー、コンテッサを分解清掃

突然滅茶苦茶遅くなったPCがWindows Updateのキャッシュクリアで復活

Excelのテーブルに行や列を挿入する際のエラー

ChatGPTが日本語からVBAのコードを生成できてたまげる

Windows セキュリティーのビックリマークが消えない

Power Automate Desktopでブラウザでダウンロードしたファイルを処理する

Excel VBAからODBCを使ってデータを簡単に取得する