Power Automateの変数の使い方|初期化・値の設定・増やす・配列への追加を実例で解説
はじめに
Power Automate でフローを組んでいると、
- 「ループの中で件数を数えたい」
- 「処理した結果を溜めていきたい」
- 「途中で作った値をあとで使い回したい」
という場面が必ず出てきます。
これらを実現するのが「変数」です。
本記事では、変数まわりの5つのアクション(初期化・設定・増やす・配列変数に追加・文字列変数に追加)の使い方を、2026年7月に実機で検証した結果に基づいて解説します。
実際に試してみると、「初期化はループの中に置けるように見えるのに保存できない」「型のエラーは実行前にすべて保存時点で弾かれる」「Compose(作成)ではどうやっても累積カウントできない」など、ドキュメントを読むだけでは分かりにくい挙動がいくつも確認できました。
エラー文の原文つきで紹介します。
- ループの中で件数カウントや合計、文字列の連結をしたい
- 「変数を初期化する」で保存時にエラーが出て困っている
- Compose(作成)と変数をどう使い分ければいいか知りたい
Power Automate の基本・できることの実例一覧はこちらにまとめています。

変数のアクションは5種類
Power Automate の「変数」コネクタには、次の5つのアクションがあります。
| アクション | 役割 | よく使う場面 |
|---|---|---|
| 変数を初期化する | 変数を宣言し、型と初期値を決める | すべての変数利用の最初に必須 |
| 変数の設定 | 変数の値を丸ごと上書きする | 途中結果の保存・フラグの切り替え |
| 変数の値を増やす | 数値型変数に指定した数を足す | 件数カウント・合計の集計 |
| 配列変数に追加 | 配列の末尾に要素を追加する | ループで抽出した値のリスト化 |
| 文字列変数に追加 | 文字列の末尾に文字列を連結する | メール本文などの組み立て |
順番に、実機で確認した挙動を見ていきます。
変数を初期化する|型は6種類
変数を使うには、まず「変数を初期化する」アクションで名前・型・初期値を宣言します。「タイプ」ドロップダウンで選べる型は、次の6種類です(実際の表示順)。
- ブール値
- 整数
- 浮動小数点数
- 文字列
- オブジェクト
- 配列

初期化はトップレベル限定|「置けるのに保存できない」ワナ
「変数を初期化する」には、フローの最上位(トップレベル)にしか置けないという制約があります。ここで注意したいのが、その制約の「現れ方」です。
実際に試すと、デザイナー上ではスコープの中にも 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: '。
変数の設定|型エラーは保存前に弾かれる
「変数の設定」は、変数の値を丸ごと上書きするアクションです。ここで気になるのが「整数変数に文字列を入れたらどうなるのか」——実行時にエラーになるのか、それとも事前に防がれるのか。
実機で整数変数 count に対して次の3パターンを試したところ、3つとも保存前の静的チェックでブロックされました。表示されるメッセージは「有効な整数を入力してください。」です。
- リテラル文字列 ‘abc’ → ブロック
- 式 concat(‘a’,’b’,’c’) → ブロック(戻り値が文字列型と静的に判定される)
- 文字列変数の参照 variables(‘msg’) → ブロック(宣言型が文字列と分かっている)


「保存は通って実行時に落ちる」のではなく、型が静的に確定できる値はすべて保存前にチェックされる、というのが実際の挙動でした。トリガー入力のように実行時にしか型が決まらない値を使わない限り、型不一致の実行時エラーはむしろ起こしにくい設計です。
同じ名前の変数は二度初期化できない
同名の変数(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: '。
変数の値を増やす|選べるのは数値型だけ
「変数の値を増やす」は、数値型変数に指定した数を足すアクションです。件数カウントや合計の集計に使います。
「文字列や配列の変数に使ったらどうなるのか」を試そうとしたところ、そもそも試せませんでした。対象を選ぶドロップダウンには数値型(整数・浮動小数点数)の変数しか表示されないためです。検証フローには整数の sum・count、配列の list、文字列の msg の4変数がありましたが、候補に出たのは sum と count のみでした。

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

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

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

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

並列実行(コンカレンシー)と変数の相性
Apply to each には「コンカレンシー制御」というループを並列実行する設定があり、処理を高速化できます。ただし、並列実行中の変数書き込みは公式に非推奨とされています(複数の反復が同時に同じ変数を更新すると、値が失われる可能性があるため)。
実際にどうなるのか、コンカレンシー制御を ON(並列度20)にした5要素のループ内で sum に +1 する増分を実行してみました。期待値は、初期値0 + ループ前の+1 + ループ5回で 6 です。

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


変数のスコープはフロー全体|「スコープ」で区切れない
プログラミング経験があると「スコープの中で設定した変数は外から見えないのでは?」と考えたくなりますが、Power Automate では違います。
検証では、「スコープ」アクションの中で文字列変数 msg に set-inside-scope という値を設定し、スコープを抜けた後の Compose から variables(‘msg’) を参照しました。結果は保存も実行もエラーなしで、スコープの外から設定後の値がそのまま読み取れました。

つまり 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周目の実行結果がこちらです。


outputs(‘ComposeTotal’) は「ループの前に1回実行された ComposeTotal の結果」を指し続けるだけで、ループが何周してもその値は更新されません。Compose には「前回の実行結果を覚えておく」という状態の概念がないためです。
補足:式が評価されないときは「@」の付き方を確認
検証中にハマった小ネタをひとつ。値の入力欄に「テキスト直接入力」と「動的コンテンツのトークンクリック」を混在させると、フィールド全体が @{…} を埋め込んだ普通の文字列(文字列内挿)として保存され、式として評価されません。出力が add(0, 1) のような文字列のままになります。
まとめ
- 変数のアクションは5種類。まず「変数を初期化する」で型(6種類)と初期値を宣言する
- 初期化はトップレベル限定。スコープ・ループ内には「置けるのに保存できない」
- 型不一致・二重初期化などのエラーはほぼすべて保存時に弾かれる(実行時ではない)
- 並列実行×変数書き込みは公式非推奨。小規模の実測では競合しなかったが、確実性重視なら逐次実行に
- 変数はフロー全体でグローバル。「スコープ」で可視範囲は区切れない
- ループでの累積(合計・カウント・連結)は Compose では不可能。変数の存在意義はここにある
変数や式の扱いも含めて、Power Automateを基礎から順番に動画で学びたい方には Udemy の講座がおすすめです。ノーコードでのフロー構築から Microsoft 365 連携まで、実務に直結する内容を約3時間で学べます(セール期間中は大幅割引になることが多いです)。
変数を溜める舞台になるループの使い方と、保存できない・動かないときのエラー対処はこちらの記事でどうぞ。








