Power Automateでフローを作っていると、「変数の初期化」というアクションに出会います。プログラミング経験がないと、この「初期化」という言葉でつまずきがちです。

変数は、ひとことで言えば値を一時的に入れておく箱です。たとえば「メールの添付ファイルが何個あったか」を数えるとき、数を覚えておく場所が必要になります。それが変数です。

この記事では、変数の作り方から4つの操作アクション、そして公式が警告している落とし穴までを、初心者の方向けにまとめます。

変数とは?何のために使うのか

Microsoftの公式ドキュメントでは、変数の用途がこう説明されています。

変数はループの実行回数の追跡に役立ちます。配列を反復処理したり、特定の項目について配列をチェックしたりするには、変数を使用して、各配列項目に適用されるインデックス番号を参照できます

もっとも多い使い道が「数を数える」ことです。処理した件数、エラーが出た回数、条件に合致したデータの数——こうした値を保存しておくために使います。

また、変数の有効範囲についても明記されています。

変数は存在し、それらを作成するクラウド フロー内でのみグローバルです。また、フロー内のループの反復全体にわたって持続します

つまり、1つのフローの中だけで有効で、別のフローには引き継がれません。一方でループを何周しても値は保持されるため、カウントに使えるわけです。

「変数の初期化」で箱を用意する

変数を使うには、まず「変数を初期化する」アクションで箱を作ります。指定する項目は3つです。

項目必須内容
名前必須変数につける名前(例:カウント)
種類必須データ型(後述)
値任意最初に入れておく値

「値」は省略できますが、公式は設定を推奨しています。

オプションですが、変数の開始値が常にわかるように、この値をベスト プラクティスとして設定してください

数を数える用途なら、0を入れておくのが基本です。空のまま始めると、計算時に思わぬ動きをすることがあります。

ここが重要:初期化には2つのルールがある

公式ドキュメントに、見落としやすい制限が2つ書かれています。

変数はグローバル レベルでのみ宣言でき、スコープ、条件、ループ内では宣言できません

つまり条件分岐やループの内側では変数を作れません。必ずフローの一番外側(トップレベル)で初期化します。「変数の初期化アクションが追加できない」というつまずきは、たいていこれが原因です。

アクションは一度に 1 つの変数しか作成できません。新しい変数ごとに個別の変数の初期化アクションが必要です

変数を3つ使いたければ、初期化アクションも3つ並べることになります。まとめて宣言することはできません。

選べる変数の種類(データ型)

公式では、次のデータ型が使えるとされています。

種類入れられるもの使う場面
整数1, 2, 100 など件数を数える
浮動小数点数1.5, 3.14 など金額・割合の計算
ブール値true / false「該当あり/なし」の判定
文字列文字・テキストメール本文の組み立て
配列複数の値のまとまり一覧をためる
オブジェクト構造を持ったデータ複数項目をひとまとめに扱う

迷ったときは、数を数えるなら「整数」、文字をためるなら「文字列」、一覧を作るなら「配列」と覚えておけば大半は足ります。

変数を操作する4つのアクション

作った変数は、次のアクションで操作します。

アクションできること使える型
変数の設定別の値に入れ替えるすべて
変数の増分値を増やす(既定は+1)整数・浮動小数点数のみ
変数の減分値を減らす(既定は-1)整数・浮動小数点数のみ
文字列変数に追加
配列変数に追加
末尾に付け足す文字列・配列

「増分」と「追加」は別物です。増分は数値を足し算するもの、追加は末尾に要素をくっつけるものです。文字列や配列に増分は使えません。

また「変数の設定」には型の制約があります。公式にはこう書かれています。

新しい値と変数のデータ型が一致している必要があります。このアクションには既定値がないため、この値は必須です

整数の変数に文字を入れようとするとエラーになります。初期化のときに選んだ型を、途中で変えることはできません。

実例:添付ファイルの数を数える

公式ドキュメントで紹介されている、もっとも基本的な使い方です。メールの添付ファイルが何個あるかを数えます。

  1. トリガー…「新しいメールが届いたとき」を設定し、添付ファイルを含める設定にする
  2. 変数の初期化…名前「カウント」/種類「整数」/値「0」
  3. それぞれに適用(ループ)…添付ファイルの一覧を渡す
  4. 変数の増分…ループの中に置き、カウントを1ずつ増やす
  5. メールの送信…最後にカウントの値を通知する

ポイントは「増分アクションをループの内側に置く」ことです。外に置くと1回しか実行されず、正しく数えられません。

添付ファイルの扱いそのものについてはメールの添付ファイルを自動保存する方法でも解説しています。

【要注意】ループの並列実行と変数

公式が明確に警告している、もっとも重要な落とし穴です。

既定では、「それぞれに適用」ループの各反復は順番に実行されます。ループの反復を並行して実行して、パフォーマンスを向上させることができます。(中略)ループ変数が予測可能な結果を返すことが重要であれば、ループの繰り返しを順次実行する必要があります

ループには「並列実行」という高速化の設定があります。しかし変数を使っている場合、複数の処理が同時に同じ変数を書き換えて、数が合わなくなることがあります。

さらに、こうも書かれています。

変数を増分または減分する場合を除いて、ループ内の変数を変更すると、ループを並行して実行した場合に予期しない結果が発生する可能性があります

「速くしたい」と思って並列実行をオンにすると、カウントが狂う——これは気づきにくい不具合です。エラーは出ず、ただ数字だけが合わなくなります。変数を使うループでは、既定の順次実行のままにしておくのが安全です。

よくあるつまずき

症状原因と対処
変数の初期化が追加できないループや条件の中に入れようとしている。フローの一番外側に置く
増分アクションが選べない変数の型が文字列や配列になっている。整数か浮動小数点数のみ対応
カウントが1で止まる増分アクションがループの外にある
値を設定するとエラー初期化時の型と、代入する値の型が違う
数が合わないループが並列実行になっている

よくある質問

Q. 「初期化」とはどういう意味ですか?

変数という箱を用意して、名前・型・最初の値を決める作業のことです。使う前に必ず1度だけ行います。

Q. 別のフローの変数を使えますか?

できません。公式のとおり、変数は作成したフローの中でのみ有効です。

Q. スマートフォンから変数を追加できますか?

できません。公式に「モバイル デバイスを使用して変数を追加することはできません」と明記されています。パソコンのブラウザから編集してください。

Q. 変数の中身を確認するには?

フローの実行履歴を開くと、各アクションで変数がどんな値だったかを確認できます。うまく動かないときは、まずここを見るのが近道です。

Q. 変数を使わずに済ませる方法はありますか?

単純なフローなら、前のアクションの結果をそのまま次に渡せば足ります。変数が必要になるのは、値を覚えておいて後から使いたいときです。数を数える、条件によって内容を変える、といった場面で登場します。

まとめ

  • 変数は値を一時的に入れておく箱。もっとも多い用途は「数を数える」こと
  • 使う前に「変数の初期化」で名前・種類・値を決める
  • ループや条件の中では初期化できない。フローの一番外側に置く
  • 1つのアクションで作れる変数は1つだけ
  • 型は整数・浮動小数点数・ブール値・文字列・配列・オブジェクトの6種類
  • 操作は設定・増分・減分・追加の4種類。増分は数値型のみ
  • 設定するときは型を一致させる必要がある
  • ループの並列実行と変数の組み合わせは危険。数が合わなくなる

最初は「カウント」という整数の変数を1つ作り、ループの中で増やしてみるところから始めてみてください。基本を押さえておくと、条件分岐や繰り返しの組み立てが一気に楽になります。

Power Automateの全体像についてはPower Automateとは?できること・始め方もあわせてご覧ください。

参考にした主な資料

ABOUT ME
IT解決チャンネル編集部
ExcelやWord、Windows、Googleスプレッドシートなど、ビジネスで使うITツールの使い方を初心者にもわかりやすく解説しています。関数の使い方から実務で役立つ応用テクニックまで、画像付きでていねいに紹介。パソコン操作で困ったときの頼れる情報源を目指しています。