Power Automate for desktop 変数

公開日

変数シリーズ【第4回】リストです。
リストとはデータ型のひとつで、プロパティやアクションで生成される変数としてよく登場します。実際に使ってみましょう。

変数シリーズ【第1~3回】の内容を踏まえて紹介しています。未読の方は、ぜひ第1回からご覧ください。

2024年3月のアップデートで「変数の選択」が変わりました

  • {x}マークは項目にカーソルを合わせると表示されます。
  • 選択候補の変数に型の表示がなくなり、カーソルを変数名に合わせるとツールチップで表示されます。
  • 並べ替えやフィルターも使えるようになりました。
変数の選択から、変数名でマウスオーバーし型表示
変数名にカーソルを合わせると型が表示される
変数の選択から変数のフィルターと並べ替え
並べ替えやフィルターが使える

リストを作ってみる

手始めに、変数の設定 アクションを使い、変数名と値を入力して数値とテキスト型のリストを作ってみましょう。
ListNumber 値:%[0, 1, 2, 3, 4, 5]%
ListText 値:%['赤', '緑', '黄']%
値全体は%で囲み、前後は半角の角カッコ([ と])、値の間はカンマ区切りにします。数字はそのまま、テキストはシングルクォーテーションで値を囲みます。

フローを実行し変数ペインで変数の値を確認してみましょう。どちらも縦一列のみのリスト、今回の型はリスト数値・リストテキスト値となります。
型名は「リスト数値」のように、「リスト」の後ろに中の値の型がつづく形式になっています。

リスト型変数

リストは主にアクションで生成し、数値やテキスト以外にファイルやメールメッセージなどいろいろなものをリストにすることができます。
たとえば、フローの途中で人の判断を挟みたいとき、リスト選択ダイアログから選択させるという使い方もできます。

リストから選択するダイアログ表示
リストから選択させ、その値を後続の処理で使う

リスト型の見方・使い方

リストは列は一列のみ、複数行を持つことができる型です。
この複数値の中からひとつだけ値を取り出すには、このように表します。
%変数名[行]%
ListNumberのうち3つ目の値を取得するには、%ListNumber[2]% となります。
一列だけなので列名は不要で、行番号だけを指定します。行番号は0から始まるのを覚えておきましょう。

データテーブルとの違い

複数”列”を持てるかどうか。エクセルから1列分読み取ってもリストになるわけではなく、1列のデータテーブルになるため列指定が必要です。使いたい変数がリストなのかデータテーブルなのか迷った場合は変数ペインで型を確認してみましょう。

リストのプロパティは保持している行数 .Countがあるのみ。%ListText[0].Length% のように行を指定すれば変数内の各値の型に従ったプロパティが使用できます。
リストには変数グループの中にさまざまなアクションが用意されており、データテーブルよりも小回りが利くイメージです。

リストのプロパティ
リストのプロパティは.Countのみ
リストのアクション
リストのアクションいろいろ

リストから特定の値を取得

リストを使う例でよくあるのは、テキストの分割 アクションを使うような場合でしょうか。読み取った文字列の中から一部だけ取り出したいときなどに使います。
変数の設定アクションで文字列を用意し、スペースで分割されたリストができるようアクションを設定してみましょう。
サンプル住所 値:住所:愛知県 春日井市 弥生町 43902 ※架空の住所です
この形式の住所の中から市区町村名だけ取り出したい場合、毎回1行目になる部分だと分かるので%TextList_住所[1]%と行番号を固定で書けばよいですね。

テキストの分割アクション
テキスト分割の結果

英語表記の月名取得

今度は英語表記の月名リストを作ってみましょう。
datetimeをテキストに変換 アクション(第1回で日付をファイル名に使う方法として使用しました)では、英語表記の月名は取得できません。これは日本語設定でPADを使っているためです。

今回は省略形の英語表記にしてみます。変数の設定アクションで下記のように値をセットしリストを作成。
MonthList 値:%['-', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']%

次に、現在の日時を取得 アクションでCurrentDateTimeを生成します。
CurrentDateTimeのプロパティ.Monthで月の値を数値で取得し、この値をリストの行番号として使う(%MonthList[CurrentDateTime.Month]%)と、3月なら4番目のmarが取れます。月は1~12ですから、0番目に使わない値を入れておくことで月と行番号を揃えて使っています。

新しく変数の設定アクションで、英語表記の月名と日付をつなげた文字列を作ってみます。
MonthDayName 値:%MonthList[CurrentDateTime.Month] + CurrentDateTime.Day%
%%の内側で+を使うと、テキスト値の場合は文字列をつなげます。すると、3/8の場合、mar8という文字列ができます!

英語表記の月名リスト
英語表記の月名リスト
月と月名リストを組み合わせる

エクセルやファイル名などに月の英語表記を入れたい時に使えます。このように少ない個数で、値が変わらないものであれば、作るのも簡単なので使いやすいでしょう。
リストの順番が分かっていればこのようにピンポイントで値を取り出し使うことができます。

データテーブルからリストを作る

固定値のリストをべた書きするよりも、マスタのようなものであれば、やはりエクセルから読み取った方が作成も変更もしやすいでしょう。
エクセルから範囲指定で読み取りExcelDataへ保存、そのうちの1列をリスト化するため、データテーブル列をリストに取得 アクションを使います。事業所列(1列目)を指定しJigyosyoListに保存。

読み取る4行分の表データ
読み取る値
データテーブル列をリストに取得


同じフォーマットで別のファイルから同様に読み取ってリスト化JigyosyoList2リストの統合 アクションを使ってひとつにまとめることもできます。
JigyosyoListJigyosyoList2を統合し、JigyosyoListに値を入れなおしました。値の数が合わせて6行になります。

JigyosyoList2の内容
リストの統合


ひとつにまとめた後、リストから重複する項目を削除 アクションで一意の値のみにすることができます。重複していた大阪支店が削除され、JigyosyoListは5行に。

リストから重複する項目を削除
データテーブル列からの取り出しフロー
フロー全体

このようにリストを加工してからループで使うと処理がスムーズになりますね。

新しいリストの作成

新しいリストの作成 アクションで空のリストを作ることもできます。項目をリストに追加 アクションで任意の値をセットして使います。

新しいリストの作成


項目に追加する値を変数にすることでその時々の値でリストを作成することができます。何の値がどういう順番で入るか分からないため、そのまま書き込んだり、ループに使用して処理することが多いでしょう。

リストを使ってダウンロードファイルの特定

Webブラウザからダウンロードしたファイルがダウンロードフォルダに自動保存される設定のとき、いまダウンロードしたファイルを特定するフローをリストを使って作ってみましょう。

ダウンロードする前にフォルダー内のファイルを取得

事前にファイルのリストを取得しておく。FilesBeforeに保存。

フォルダー内のファイルを取得
STEP
1

ダウンロードボタンを押した後、再度フォルダー内のファイルを取得

上記同様。変数はFilesAfterとしておく。

STEP
2

リスト内容を減らすアクションで、差分を取得

Step1で取得したファイルのBeforeリストと、Step2で取得したファイルのAfterリストの差分ListDifferenceがいまダウンロードしたファイルということになる。Afterリストにファイルが増えるはずなので、設定の”最初のリスト”にはAfterリストを指定する。

リストの内容を減らす
STEP
3

差分が出るまで繰り返し、差分が出たらループを抜ける

ダウンロードに時間がかかることもあるため、Step2~3はループ条件アクションで繰り返す。true = true と設定しておくと、無条件にずっと繰り返すことができるため、差分ファイルが出るまで待機する。ListDifferenceのカウントが0より多ければループを抜けるアクションをセットしておく。

ループ条件とループを抜ける
STEP
4

実際にダウンロードするときには、無限ループにならないよう経過時間を計って何分間まで待つか決めておいたり、長めの時間がかかる場合は予めWaitを入れてループ回数を減らすようにしておくとよいでしょう。


リスト型は自分で作るよりも、処理の結果として出会うことの方が多いと思います。リスト型がどういうものかを知って上手く使ってみてください。
変数シリーズ【第5回】では、自分で作る変数活用例を紹介します。