Power Automateで変数を使いこなす。初期化・セット・追加の全パターン

Power Automateの変数は、フローの中で値を一時的に保存しておく仕組みです。使い方のルールを知っておかないと、なぜか値が更新されない、スコープの外で使えないといった詰まりポイントにはまります。

変数の基本:3つのアクション

変数を初期化する・変数の設定・値を増やすなど

Power Automateで変数を扱うアクションは主に3つです。それぞれ役割が明確に分かれています。

アクション役割使うタイミング
変数を初期化する変数を宣言して初期値を設定するフローの最初に一度だけ
変数の設定変数の値を上書きする変数の値を更新したいとき
文字列変数に追加文字列変数に文字を追加するテキストを少しずつ積み上げるとき
配列変数に追加配列変数に要素を追加するループ内でリストを組み立てるとき
変数の値を増やす/減らす整数変数に数値を加算/減算するカウンターを増やす/減らすとき

変数を初期化する は必ず先に実行する必要があります。初期化されていない変数を変数の設定で使おうとするとエラーになります。フローを作り始めたら、使う変数はすべてフローの最初にまとめて初期化しておくのが基本です。

変数を初期化する:変数の宣言

型と初期値を決める

変数を初期化するでは、変数の名前・型・初期値を設定します。型は以下から選びます。

  • String(文字列):テキストを保存する
  • Integer(整数):整数の数値を保存する
  • Float(浮動小数点数):小数を含む数値を保存する
  • Boolean(真偽値):true か false を保存する
  • Array(配列):複数の値のリストを保存する
  • Object(オブジェクト):キーと値のペアを保存する

初期値は空白にしておいても構いませんが、Integer や Float は初期値に 0 を入れておくと後で 変数の値を増やす/減らすや変数の設定で計算するときにエラーが出にくいです。Array 型は初期値に空の配列 [] を入れておくのが定番です。

スコープの外では使えない

変数には重要なルールがあります。変数を初期化する は、Scope(スコープ)や Apply to each、条件分岐(Condition)などのコンテナアクションの中では実行できません。必ずフローのトップレベル(一番外側)に置く必要があります。

Scope の中で変数を初期化しようとするとエラーになる、という経験は多くの人がしています。私も最初にエラーメッセージを見たとき意味がわからなかったのですが、変数の初期化はフローの一番外側でしかできないという制約があるためです。

一方で変数の設定は、Scope や Apply to each の中から使えます。初期化だけが外側に制限されていると覚えておきましょう。

変数の設定:値の上書き

現在の値を新しい値に差し替える

変数の設定は、すでに存在する変数の値を新しい値に上書きします。計算結果を変数に保存したり、条件によって変数の内容を切り替えたりするときに使います。

たとえばステータスを表す変数 varStatus を初期化しておき、後続の処理で条件によって承認済みや却下といった値に切り替えるパターンです。条件分岐の中でそれぞれ変数の設定を使えば、後続の処理では varStatus の値を見るだけで済みます。

式を使った計算も入れられる

変数の設定の値には式を使えます。たとえばカウンターを1増やすなら以下のように書きます。

add(variables('varCount'), 1)

varCount という整数変数に1を足した値で上書きする式です。ループのたびにこれを実行すれば、処理した件数を数えられます。整数の加算なら変数の値を増やすを使うほうがシンプルですが、掛け算や割り算など他の計算が必要なときは変数の設定+ 式の組み合わせが必要です。

文字列変数に追加:値の追加

文字列をつなげる

文字列変数に追加は、文字列変数の末尾に文字を追加します。複数の処理結果をひとつの文字列に積み上げていくときに使います。

たとえばメールの本文を組み立てる場合。それぞれに適用(Apply to each)でリストを1件ずつ処理しながら、各行のテキストを改行コードつきで varMailBody に追記していき、ループが終わったら varMailBody をメール送信アクションの本文に渡します。

concat(items('Apply_to_each')?['Title'], ':', items('Apply_to_each')?['Status'], decodeUriComponent('%0A'))

decodeUriComponent('%0A') は改行コードの入れ方です。メール本文での改行はこれを使うのが確実で、私もよく使います。

配列に要素を追加する

配列変数に追加は、配列変数に新しい要素を1件追加します。条件に合ったアイテムだけを配列に集めて、後でまとめて処理するパターンでよく使います。

たとえばApply to eachで全件を処理しながら、特定の条件を満たすものだけを varFiltered 配列に追加していき、ループ後に varFiltered の中身だけを対象に次の処理をするという使い方です。フィルタリングをPower Automate側でやりたいときに役立ちます。

変数を使うときのよくある失敗と対処

Appendが意図せずループをまたいで蓄積される

フローを複数回実行したとき、前回の実行の値が残っていると思っている人がいますが、変数はフローの実行のたびに変数を初期化するから始まるので、実行をまたいで値が引き継がれることはありません。

ただし同一実行内のループでは当然累積されます。Apply to eachが10回回れば Append も10回実行され、文字列や配列には10件分のデータが蓄積されます。これは意図した動作ですが、テスト時に想定より長いメール本文が生成されて驚くことがあります。

変数名は日本語でも使えるが英語がおすすめ

変数名は日本語でも設定できます。ただし、式の中で変数を参照するとき(variables('変数名') の形)に日本語の変数名が入ると、後で式を見直したときに読みにくくなります。個人的には varStatus、varCount、varMailBody のように先頭に var をつけた英語名にしています。チームで使うフローなら命名規則を最初に決めておくと管理が楽になります。

複雑なデータはObject型で扱う

複数のキーと値のセットをひとまとめに保存したい場合は Object 型の変数が使えます。JSON形式でデータを保持でき、後続のアクションで特定のキーの値だけを取り出すことができます。ただしObject型はやや扱いが難しいので、まずは String・Integer・Array の3つをしっかり使いこなすのが先決です。

Power Automateのトリガーの種類と使い分けはこちらの記事で、Apply to eachとの組み合わせパターンはApply to each完全攻略で解説しています。変数はこれらと組み合わせて使うことが多いので、合わせて確認してみてください。

まとめ

Power Automateの変数は、変数を初期化するで宣言、変数の設定で上書き、Append で追加という3ステップで使います。初期化はフローの一番外側に置く制約さえ覚えておけば、基本的な使い方には困りません。

最初はシンプルなカウンターや文字列の積み上げから試してみましょう。変数を使いこなせるようになると、フローで表現できることが一気に増えます。楽しみながら試してみてください。

Xでフォローしよう