自動化
PR

Power Automateの変数の使い方|初期化・値の設定・増やす・配列への追加を実例で解説

sanane
記事内に商品プロモーションを含む場合があります

はじめに

Power Automate でフローを組んでいると、

  • 「ループの中で件数を数えたい
  • 「処理した結果を溜めていきたい
  • 「途中で作った値をあとで使い回したい

という場面が必ず出てきます。

これらを実現するのが「変数」です。

本記事では、変数まわりの5つのアクション(初期化・設定・増やす・配列変数に追加・文字列変数に追加)の使い方を、2026年7月に実機で検証した結果に基づいて解説します。

実際に試してみると、「初期化はループの中に置けるように見えるのに保存できない」「型のエラーは実行前にすべて保存時点で弾かれる」「Compose(作成)ではどうやっても累積カウントできない」など、ドキュメントを読むだけでは分かりにくい挙動がいくつも確認できました。

エラー文の原文つきで紹介します。

こんな人にオススメ
  • ループの中で件数カウントや合計、文字列の連結をしたい
  • 「変数を初期化する」で保存時にエラーが出て困っている
  • Compose(作成)と変数をどう使い分ければいいか知りたい

Power Automate の基本・できることの実例一覧はこちらにまとめています。

あわせて読みたい
Power Automateとは?できること・使い方・始め方を実例40本で解説
Power Automateとは?できること・使い方・始め方を実例40本で解説

変数のアクションは5種類

Power Automate の「変数」コネクタには、次の5つのアクションがあります。

アクション役割よく使う場面
変数を初期化する変数を宣言し、型と初期値を決めるすべての変数利用の最初に必須
変数の設定変数の値を丸ごと上書きする途中結果の保存・フラグの切り替え
変数の値を増やす数値型変数に指定した数を足す件数カウント・合計の集計
配列変数に追加配列の末尾に要素を追加するループで抽出した値のリスト化
文字列変数に追加文字列の末尾に文字列を連結するメール本文などの組み立て

順番に、実機で確認した挙動を見ていきます。

変数を初期化する|型は6種類

変数を使うには、まず「変数を初期化する」アクションで名前・型・初期値を宣言します。「タイプ」ドロップダウンで選べる型は、次の6種類です(実際の表示順)。

  • ブール値
  • 整数
  • 浮動小数点数
  • 文字列
  • オブジェクト
  • 配列
「変数を初期化する」のタイプドロップダウンに6種類の型が表示されている画面

初期化はトップレベル限定|「置けるのに保存できない」ワナ

「変数を初期化する」には、フローの最上位(トップレベル)にしか置けないという制約があります。ここで注意したいのが、その制約の「現れ方」です。

実際に試すと、デザイナー上ではスコープの中にも Apply to each(それぞれに適用する)の中にも、普通に配置できてしまいます。エラー表示も出ません。

初期化アクションをスコープ内に配置できてしまったデザイナー画面
初期化アクションをApply to each内に配置できてしまったデザイナー画面

ところが、その状態で「保存」を押すと次のエラーが出て保存が拒否されます。

XRM API に対する要求が失敗しました。エラー: 'Message: Flow client error returned with status code "BadRequest" and details "{"error":{"code":"InvalidFlow","message":"The variable action '変数を初期化する_3' of type 'InitializeVariable' cannot be nested in an action of type 'スコープ'."}}". Code: 0x80060467 InnerError: '。
スコープ内の初期化アクションを保存しようとしてInvalidFlowエラーが表示された画面

「cannot be nested in an action」というエラーが出たら、初期化アクションの置き場所が原因です。スコープやループの中に置いた「変数を初期化する」を削除し、フローの最上位(一番外側)に置き直せば保存できます。UI 上は配置できてしまうので、エラー文を見て初めて気づくパターンが多いです。

変数の設定|型エラーは保存前に弾かれる

「変数の設定」は、変数の値を丸ごと上書きするアクションです。ここで気になるのが「整数変数に文字列を入れたらどうなるのか」——実行時にエラーになるのか、それとも事前に防がれるのか。

実機で整数変数 count に対して次の3パターンを試したところ、3つとも保存前の静的チェックでブロックされました。表示されるメッセージは「有効な整数を入力してください。」です。

  • リテラル文字列 ‘abc’ → ブロック
  • 式 concat(‘a’,’b’,’c’) → ブロック(戻り値が文字列型と静的に判定される)
  • 文字列変数の参照 variables(‘msg’) → ブロック(宣言型が文字列と分かっている)
整数変数に文字列abcを設定しようとして「有効な整数を入力してください。」と表示された画面
式や変数参照でも同様に型不一致がブロックされる画面

「保存は通って実行時に落ちる」のではなく、型が静的に確定できる値はすべて保存前にチェックされる、というのが実際の挙動でした。トリガー入力のように実行時にしか型が決まらない値を使わない限り、型不一致の実行時エラーはむしろ起こしにくい設計です。

同じ名前の変数は二度初期化できない

同名の変数(count)を2回「変数を初期化する」で宣言した場合も、保存時に次のエラーで拒否されます(原文)。

XRM API に対する要求が失敗しました。エラー: 'Message: Flow client error returned with status code "BadRequest" and details "{"error":{"code":"InvalidFlow","message":"A variable must only be initialized once. The variables 'count' are initialized in two or more of these actions ''."}}". Code: 0x80060467 InnerError: '。
同名変数countの二重初期化で保存時エラーが表示された画面

ここまで見てきたとおり、配置制約・型不一致・二重初期化のエラーはすべて「保存時(設計時)」に弾かれます。変数まわりでつまずくのは実行中ではなくほぼ保存の瞬間、と覚えておくと切り分けが速くなります。実行時エラーも含めたエラー全般の対処はエラー別の原因と直し方の記事にまとめています。

変数の値を増やす|選べるのは数値型だけ

「変数の値を増やす」は、数値型変数に指定した数を足すアクションです。件数カウントや合計の集計に使います。

「文字列や配列の変数に使ったらどうなるのか」を試そうとしたところ、そもそも試せませんでした。対象を選ぶドロップダウンには数値型(整数・浮動小数点数)の変数しか表示されないためです。検証フローには整数の sum・count、配列の list、文字列の msg の4変数がありましたが、候補に出たのは sum と count のみでした。

変数の値を増やすの対象ドロップダウンに数値型変数のsumとcountしか表示されない画面

UI レベルで完全にブロックされるので、エラーメッセージを見る機会すらありません。整数変数への増分はもちろん正常に動作します。

整数変数countへの増分が正常に実行された結果画面

配列変数に追加・文字列変数に追加|ループで値を溜める

ループで処理した値をリストや文字列として溜めていくのが「配列変数に追加」「文字列変数に追加」です。検証では、Apply to each のソースに5要素の配列を渡し、ループ内で現在の要素 item() をそれぞれの変数に追加しました。

createArray('a','b','c','d','e')
配列変数listにitem()を追加するアクションの設定画面
文字列変数msgにitem()を追加するアクションの設定画面

実行はエラーなく成功し、実行履歴で a〜e の5要素が正しくループに渡っていることを確認できました。

5要素配列のループ実行が成功した実行履歴画面

「文字列変数に追加」は指定した文字列をそのまま末尾に連結します。改行やカンマ区切りで溜めたい場合は、追加する値の側に区切り文字を含めて設計してください。

なお、Apply to each そのものの使い方(自動で挿入される条件・入れ子・途中で抜ける方法など)は別記事で詳しく解説しています。

あわせて読みたい
Power Automateの「それぞれに適用する」の使い方|並列化で高速化・入れ子・途中で抜ける方法
Power Automateの「それぞれに適用する」の使い方|並列化で高速化・入れ子・途中で抜ける方法

並列実行(コンカレンシー)と変数の相性

Apply to each には「コンカレンシー制御」というループを並列実行する設定があり、処理を高速化できます。ただし、並列実行中の変数書き込みは公式に非推奨とされています(複数の反復が同時に同じ変数を更新すると、値が失われる可能性があるため)。

実際にどうなるのか、コンカレンシー制御を ON(並列度20)にした5要素のループ内で sum に +1 する増分を実行してみました。期待値は、初期値0 + ループ前の+1 + ループ5回で 6 です。

Apply to eachのコンカレンシー制御をONにして並列度20に設定した画面

結果は、2回実行してどちらも sum=6。今回の条件(5要素・並列度20)では、値の欠落や競合は再現しませんでした。

並列実行1回目のCompose出力がsum=6となった実行結果
並列実行2回目も同じくsum=6となった実行結果

「小規模なら壊れなかった」というのはあくまで今回の実測結果で、安全が保証されたわけではありません。要素数が多い場合や重い処理を挟む場合の挙動は未検証です。並列実行と変数の組み合わせは公式に非推奨のため、確実に集計したい場面では並列化をオフにする(逐次実行にする)のが無難です。

変数のスコープはフロー全体|「スコープ」で区切れない

プログラミング経験があると「スコープの中で設定した変数は外から見えないのでは?」と考えたくなりますが、Power Automate では違います。

検証では、「スコープ」アクションの中で文字列変数 msg に set-inside-scope という値を設定し、スコープを抜けた後の Compose から variables(‘msg’) を参照しました。結果は保存も実行もエラーなしで、スコープの外から設定後の値がそのまま読み取れました。

スコープ内で設定した変数msgの値をスコープ外のComposeで参照できた実行結果

つまり Power Automate の「スコープ」はアクションを見た目上グルーピングする(そしてエラーハンドリングの単位になる)だけの存在で、変数の可視範囲を制限する機能ではありません。変数は常にフロー全体でグローバルです。

「スコープ内でしか使えないローカル変数」という概念は存在しません。

Compose(作成)との違い|累積には変数が必須

途中の値を保持する手段としては Compose(作成)アクションもよく使われます。「変数と Compose はどう違うの?」という疑問に、実測で白黒つけます。

ループの外に値 0 の Compose「ComposeTotal」を置き、ループの中の Compose「AddOne」で次の式を評価させました。「前回の結果に1を足す」を Compose だけで実現しようという試みです。

@add(outputs('ComposeTotal'), 1)

結果は、5回のループ反復すべてで入力=1・出力=1のまま。1, 2, 3, 4, 5 と増えていくことはありませんでした。1周目と5周目の実行結果がこちらです。

ループ1周目のCompose AddOneの入力と出力がどちらも1の実行結果
ループ5周目でもCompose AddOneの入力と出力が1のままで累積しない実行結果

outputs(‘ComposeTotal’) は「ループの前に1回実行された ComposeTotal の結果」を指し続けるだけで、ループが何周してもその値は更新されません。Compose には「前回の実行結果を覚えておく」という状態の概念がないためです。

使い分けの結論: 1回計算した値を後で参照するだけなら Compose で十分。ループの中で値を積み上げていく処理(合計・カウント・連結)には変数が必須です。これが Power Automate に「変数」が存在する理由そのものです。

補足:式が評価されないときは「@」の付き方を確認

検証中にハマった小ネタをひとつ。値の入力欄に「テキスト直接入力」と「動的コンテンツのトークンクリック」を混在させると、フィールド全体が @{…} を埋め込んだ普通の文字列(文字列内挿)として保存され、式として評価されません。出力が add(0, 1) のような文字列のままになります。

式として評価させたい場合は、フィールドの内容を単一の @ で始まる生テキストにします(例: @add(outputs(‘X’), 1))。関数で値をラップするときはトークンクリックに頼らず、フィールドを一度空にしてから @ 始まりで直接入力するのが確実です。fx エディタで「この式には問題があります」と表示されても、コードビューを見ると正しく保存されていることがあるので、最終確認はコードビューで行うのがおすすめです。

まとめ

  • 変数のアクションは5種類。まず「変数を初期化する」で型(6種類)と初期値を宣言する
  • 初期化はトップレベル限定。スコープ・ループ内には「置けるのに保存できない」
  • 型不一致・二重初期化などのエラーはほぼすべて保存時に弾かれる(実行時ではない)
  • 並列実行×変数書き込みは公式非推奨。小規模の実測では競合しなかったが、確実性重視なら逐次実行に
  • 変数はフロー全体でグローバル。「スコープ」で可視範囲は区切れない
  • ループでの累積(合計・カウント・連結)は Compose では不可能。変数の存在意義はここにある
Power Automate を体系的に学びたい方へ

変数や式の扱いも含めて、Power Automateを基礎から順番に動画で学びたい方には Udemy の講座がおすすめです。ノーコードでのフロー構築から Microsoft 365 連携まで、実務に直結する内容を約3時間で学べます(セール期間中は大幅割引になることが多いです)。

変数を溜める舞台になるループの使い方と、保存できない・動かないときのエラー対処はこちらの記事でどうぞ。

あわせて読みたい
Power Automateの「それぞれに適用する」の使い方|並列化で高速化・入れ子・途中で抜ける方法
Power Automateの「それぞれに適用する」の使い方|並列化で高速化・入れ子・途中で抜ける方法
あわせて読みたい
Power Automateでフローが動かない時の対処法|エラー別の原因と直し方
Power Automateでフローが動かない時の対処法|エラー別の原因と直し方
記事URLをコピーしました