Power Automate for desktop 変数

公開日

変数シリーズ【第5回】自分で作る変数活用例 です。
変数の設定 アクションを使って、自由に変数を作ることができます。このシリーズでもサンプル値を入れたりと既に使ってきましたが、他にどんな活用方法があるか見てみましょう。

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

値の確認

変数の設定 アクションを使う場面のひとつめは、値の確認です。【第3回】プロパティで、使う前にどんな値が入るか確認しようということで使ってみましたね。
プロパティや、データテーブルのひとつのセルを指す %ExcelData[0]['氏名']% など、値と型を変数ペインで確認することができます。
わかっているつもりで記入しても間違うことはよくあります。思っていた結果にならない時は、変数の値と型を疑ってみるのもひとつの方法です。

従業員マスタに住所欄を設けたエクセルから範囲を読み取り ExcelData とし、0行目の住所列の値をプロパティ.Trimmedを使って変数に入れてみましょう。

従業員マスタ(住所あり)
読み取る値
変数の設定に値を入れる
.Trimmedは手入力します

新たな変数として名前を付ける

上記のようにトリムした住所や%ExcelData[0]['氏名']%のような長い変数を後続の処理で使う場合、値の確認のためだけでなく新たな変数 ”住所”のように作るのがおススメです。変数名が"住所" だと内容もわかりやすくなります。

トリムされているかどうか確認するために、元の値とトリム後の値の長さ.Lengthを使った変数も作成してチェックしてみましょう。
トリム後の長さは、 値: %住所.Length% プロパティは%の内側に!
長さが18→17に変わり文字列の前後にあった不要なスペースが除去されたことが確認できました。

フロー、トリムした住所と、文字の長さを変数に保存
トリム済みの値が入った住所変数を使って長さを取得
トリムした住所、トリム前後の文字の長さの実行結果
変数名が長いため途切れていますが、Before:18 After:17です

想定した値が変数に設定できたかどうか確認できたら、確認のためだけの変数は無効にするか削除するかしておきましょう。
残しておいても害はないのですが、不要な処理を行わず、変数の一覧に不要な変数がない方がすっきりして見やすいと思います。

ちなみに変数ペインで値を確認するときに、変数の数が多く見たい変数を探すのが大変なときはピン留めを使うと便利です。上図のように注目したい変数を一覧の上部に📌で固定できます。

べた書きはひとつに

固定値やファイルパスなどべた書きが必要な場面はありますが、同じ内容を複数回書く必要が出てきたら変数に入れてみてください。後々値を変える必要が出たときに、変更が楽になります。

さきほどトリムした住所と元の値の長さを設定したアクションを見てみると、ExcelData[0]['住所'] ← この部分が同じです。
この同じ部分を変数名:住所 値:%ExcelData[0]['住所']% としましょう。そしてこの値が入っていたところを変数に置き換えます。
住所変数はその後.Trimmedを付けた値で上書きしています。このように同じ変数で値を上書きすることで必要以上に変数を持たずに済みます。

共通部分を変数化するフローの一部

同じことをするアクションも同様です。
条件によって書き込む値は変えるけれど書き込むセルは同じ場合、それぞれ書き込むアクションを置くかと思います。

書き込む先の行・列は同じなので書き込むアクションをひとつにすることもできます。書き込む値を変数名:GroupCode 値:条件ごとに設定('A'か'B')として作り、書き込むアクションの値に変数をセットすればよいですね。
条件によって違うのはGroupCodeだけというのが見た目にも分かりやすくなったのではないでしょうか。

Before、アクションをそれぞれ置く
書き込むアクションはふたつ
After、アクションをひとつにする
書き込むアクションはひとつに

必ずひとつにすべき、というわけではありません。見たときに分かりやすく変更しやすくなっていると、修正するときや他の人へ引き継ぐときに楽になりますので、考慮してみてください。

設定関連情報を入れる

固定値やファイルパス、フォルダパス、メールアドレスなどの設定に関する情報は、複数個所で使わないとしても変数に入れておくと良いかもしれません。

そして設定情報はフローの冒頭にまとめておく、もしくは設定が多い場合はサブフローにまとめ冒頭で呼び出すのが個人的にはおススメです。
冒頭一カ所にまとまっていることで見つけやすく、管理しやすくなります。他の人にフローを渡し、各個人の設定に変更してもらうときも分かりやすいでしょう。

設定情報をフローの冒頭に置く
同じフォルダの他のファイルも参照するときは、フォルダとファイル名も分けておくと使いやすい

変化する数値 カウンターを作る

エクセルへ転記するときなど、書き込む先の行や列番号をずらしていくことも変数を使うと可能です。

  1. ループに入る前に、変数を作る。変数名:行番号 値: 2 ※この値は書き込みをスタートする行番号にします。
  2. ループの中で、Excelワークシートに書き込む アクションなどで、行番号変数を使う。
  3. 変数を大きくする アクションを使って、行番号変数の数値を1ずつ大きくする。
  4. ループの次の周では行番号が1大きくなり、書き込む先がずれる。

他の使い方として、ある条件に当てはまるときだけカウントアップし件数を数えることもできますね。この場合は初期値0からスタートしましょう。
処理結果のメールに該当データの件数を記載するなどに使えそうです。

行番号や件数を作る
行番号へGroupCode値を書き込み、事業所が「横浜支店」である件数を数えます

%''%(空文字)の活用

変数そのものを作るわけではないのですが、%で囲んで計算できるのと同じように、シングルクォーテーション2つを%で囲んで作る空文字 %''% も覚えておきましょう。
空文字とは何も値が入っていない状態で、長さ0の文字列を表します。

不要文字の削除

テキストを置換する アクション(データテーブル内で検索または置換する アクションなどでも同様)で文字列の中から不要な文字を除去するときに使います。

文字列内のスペースを削除する場合、検索するテキストに半角スペース%' '%や全角スペース%' '%%で囲み入力します。%で囲まないスペースを入力するとエラーになります。
そして置き換え先のテキストに%''%を入力します。これで文字列内に含まれる半角・全角スペースを除去(置換)することができます。

テキストを置換するアクションの設定
検索するテキスト、置き換え先のテキストにそれぞれ設定
テキストの置換前後の値
文字列に含まれていたスペースが除去された

変数値のクリア

一度変数に入った値は%''%をセットしてクリア(上書き)します。
たとえば、ループ内で条件に合う場合のみ変数に値をセットし、その値をメッセージ表示するとします。1周目で値が入り、2周目で条件に合わない場合値はセットしません。つまり変数の内容は変わらず、1周目でセットした値をメッセージで表示してしまいます。

このままではその行ごとの値が正しく表示されませんので、条件を判定する前にクリアしておくか、条件にElseを追加しクリアするようにしましょう。

変数のクリアがないフロー
変数のクリアがない
事前に値をクリアするフロー
予め値をクリアする
Elseで値をクリアするフロー
If-Elseでクリアする

空と空白の違い

空の他に、実は空白というものもあります。エクセルで空欄を単一セルで読み取ると空ですが、空欄を含む範囲で読み取り空欄のセルの値を確認すると<空白>になります。

空欄の単一セルを読み取ると空
空欄を単一セルで読み取ると空
空欄を範囲で読み取ると空白
空欄を範囲で読み取り、そのセルは空白
種類空である空白である
空(empty)テキスト値×
空白(blank)空白の値

基本的には同じようなものと思って大丈夫です。If アクションの演算子で『空である』を使えばどちらだとしても判定できます

値の入っていない行を削除したい場合には注意が必要です。リスト変数から行を削除したいとき、リストから項目を削除 アクションを使います。
空の場合:ループ不要で 値:%''%を指定してすべて削除できます。
空白の場合:リストから空白を削除するには下記の方法で削除してください。空の場合でも有効です。

  1. リストをループする。
  2. If アクションで『空である』かを判定する。
  3. 空と判定されたときのインデックス(行番号)を指定してリスト項目を削除する。
リストから空を削除
リストから空を削除、これだけでOK
リストから空白を削除
リストから空白を削除
リストから空白を削除するフロー
リストから空白を削除するフロー

データテーブルの場合は、データテーブルから空の行を削除するという新しいアクションが追加されました!空白の場合でも簡単に削除できます。

条件分岐を整理する

%で囲むと値の比較をすることもできます。
予め値を設定する変数を作ります。変数名:BoxType 値:S
そして比較する変数を作ります。IsTypeS 値:%BoxType = 'S'% 結果はTrueとなります。

「BoxType変数の値が'S'である」の正誤の結果を返す、という意味になります。結果はブール値型 True / False で返り変数ペインで確認できます。
つまりIfアクションと同じように比較判定することができるのです。

数値型の比較も作ってみましょう。Weight 値:500、IsWeightOver500 値:%Weight > 500%
演算子が >(大なり)の場合は500を含みませんので、結果はFalseということになります。

さきほど紹介した空白かどうかも Weight変数で調べてみましょう。IsWeightBlank 値:%IsBlank(Weight)%
Weightの値が500のままなら、結果はFalseで返るでしょう。

比較演算子(=, <>, >, >=, <, <=)の他にも、%IsBlank()%や%StartsWith()%などのIfアクションで選択できる演算子が使えます。
その他の使用できる演算子は 公式ページへ

複数の比較を書くこともでき、AND(かつ)、OR(または)、NOT(でない)などを使います。
IsCheckTypeS 値:%BoxType = 'S' AND Weight < 500% → どちらもTrueなら結果はTrue
IsCheckType 値:%BoxType = 'S' OR BoxType = 'M'% → どちらかがTrueなら結果はTrue
IsNotCheckType 値:%NOT(BoxType = 'S' OR BoxType = 'M')% →()内の結果がTrueなら結果はFalse、例の場合だと'S'か'M'以外ならTrue

変数の設定に比較を入れると、結果はブール値になる
変数に比較を入れると結果はブール値になる

変数を使って比較するのは少し複雑になりますので、Ifアクションの代わりに変数の設定アクションを使って一部ずつ正しく結果が出るかテストしてみるのに有効です。

また、次のような長く複雑な条件をIfアクションに設定する場合、パーツごとに分割して変数化しておくと見やすく分かりやすくなります。この方法もおススメです。

Ifアクションに複雑な条件を設定
最初のオペランドが複雑で分かりにくい
条件を分割し、変数の設定に切り出す
条件を分割して変数にしておき、Ifアクションで使う

実際に自分でフローを作ってみると自分で作る変数の必要性を感じる場面が出てくると思います。今回の活用例を参考にぜひ使ってみてください。

変数を作ってあるけれど、この変数どこで使っていたかな??というときは、フロー変数の使用状況の検索を使ってチェックできます。

変数シリーズまだ続きます!