
日々疑問に思ったことをCopilotにサポートしてもらいながらPowerPlatformを勉強中です。学んだことをこのブログで記録・共有していきます。
今回は「変数の値を減らす」アクションの使い方について、実業務で役に立ちそうな事例をサンプルにして解説してます。

では今回のフローで何をやりたいのか?
その目的からスタートします。
フローの目的
目的:注文リストに新しい注文が登録されたときに、対応する商品在庫を取得し、注文数だけ在庫数を減らして更新する。

在庫管理する手間が省けます
今回用意しておくSPOリストは以下の2つ
注文リスト
今回はこの注文リストに手動で注文内容を追記していきます。
まずは”注文リスト”を作成します。
ここに注文内容を追加していくたびに、”在庫リスト”の在庫数を減らしていきます。
次に商品在庫リストです。
注文数に応じて在庫数を減らしていきます。
ステップ①:フローの作成
- Power Automateにアクセス
- 「作成」→「自動化されたクラウド フロー」を選択
- フロー名を入力(例:「注文による在庫減算」)
- トリガーに「SharePoint – 項目が作成されたとき」を選択
- 対象の注文リストを指定

注文リストに追記されたことをトリガーにしてフローが動き出します
ステップ②:商品IDのフィルタークエリ作成(作成アクション)
@concat('field_1 eq ''', triggerBody()?['field_1'], '''')
目的: 注文データの中から商品IDを取り出し、在庫リストを検索するためのフィルター式を作成。
補足: field_1 は「商品ID」列の内部名。表示名ではなく内部名を使う必要があります。

フィルタークエリを「Compose(作成)」アクションなどで事前に作っておくことで、後続の「Get items(複数の項目の取得)」アクションがすっきりします!
ステップ③:商品在庫リストから該当商品を取得(Get items)
- アクション:「SharePoint – 複数の項目を取得」
- サイトアドレス:商品在庫リストのあるサイト
- リスト名:商品在庫リスト
- フィルタークエリ:前のComposeの出力
目的: 注文された商品に対応する在庫情報を取得。

この”フィルタークエリ”にステップ②で事前に作成しておいた式を動的コンテンツとして挿入します
※直接式を記述してもOKですが、可読性が悪いので事前に作成しておきました。
ステップ④:変数の初期化(在庫数)
@int(coalesce(first(outputs('複数の項目の取得:商品在庫リストから注文された商品IDでフィルタ')?['body/value'])?['field_2'], 0))
目的: 取得した在庫情報から「在庫数」を整数型の変数に格納。
補足: field_2 は在庫数の列の内部名。取得結果が空でもエラーにならないように coalesce() を使用。

この部分について、もう少し突っ込んでcopilotに解説してもらいます!

coalesce関数を使うとなぜエラーにならないのか解説していきます
※以下Copilot生成内容
なぜ coalesce() を使うとエラーにならないのか?
Power Automateで SharePoint の「Get items」アクションを使ってデータを取得する際、該当する項目が存在しないと body/value
が空になります。そんなとき、通常の参照方法では null参照エラーが発生する可能性があります。
❌ 通常の参照方法(エラーになる可能性あり)
@int(first(outputs('Get_items')?['body/value'])?['field_2'])
→ 該当データがないと null
を参照してしまい、エラーになります。
✅ coalesce() を使った安全な方法
@int(coalesce(first(outputs('Get_items')?['body/value'])?['field_2'], 0))
→ データがなければ「0」を返すので、エラーにならずに処理が続行できます。
coalesce() の基本動作
coalesce()
は、複数の値の中から「最初に null でない値」を返す関数です。
@coalesce(null, null, 5, 10)
→ 結果は 5
💡 実務でのメリット
- エラー回避: SharePointの取得結果が空でも安全に処理できる
- 初期値設定: 空欄や未入力時に代替値を設定できる
- 型変換がスムーズ: 数値・文字列・日付など、型を問わず使える
📌 他の関数との違い
if()
や empty()
でも条件分岐は可能ですが、coalesce()
は「値が null かどうかを意識せずに、代替値を返す」点でシンプルかつ便利です。
まとめ
coalesce() を使うことで、Power Automateのフローがより安定し、エラーを防ぎながら柔軟な処理が可能になります。特に SharePoint 連携時には、取得結果が空になる可能性を考慮して、積極的に活用するのがおすすめです。

coalesce()関数を使えば、データがない場合は null ではなく 0を返してくれるので、エラーを防ぐことができるという訳ですね。
ステップ⑤:変数の初期化(注文数)
@int(float(triggerBody()?['field_2']))
目的: 注文データから「注文数」を整数型の変数に格納。
補足: SharePointの列が「数値」形式であることを確認しておくと安心。

SharePointで指定している変数の型と、PowerAutomateで指定している変数の型は一致させておく必要があります。
ステップ⑥:条件分岐(在庫が足りているか)
@greaterOrEquals(variables('在庫数'), variables('注文数'))
目的: 在庫数が注文数以上であれば処理を続行。
補足: 在庫不足時にメール通知などを追加することも可能。
ステップ⑦:在庫数を減らす(変数の値を減らす)
- 変数名:在庫数
- 値:@variables(‘注文数’)
目的: 在庫数から注文数を引く。
補足: 対象変数が文字列型だとエラーになるので、必ず「整数型」で初期化。
ステップ⑧:在庫数をSharePointに反映(項目の更新)
- 対象リスト:商品在庫リスト
- ID:取得した商品のID
- 更新内容:field_2(在庫数)に @variables(‘在庫数’)
目的: 減算後の在庫数をSharePointに反映。
補足: IDの取得に失敗すると更新できないので、構造が変わった場合は注意。
ステップ⑨:保存とテスト
- フローを保存
- 「テスト」ボタンで動作確認
- 注文を登録して、在庫数が正しく減るか確認
補足: 実行履歴で各ステップが「成功」になっているかチェック。
まとめ
Power Automateの基本アクション(トリガー、変数、条件分岐、SharePoint連携)を組み合わせた、実務に役立ちそうなフローを作成してみました。
私も勉強しながらということもあり、結構時間がかかってしまいました。。
いろんなフローを作って、アクションの使い方を身に着けていくしかないですね。
コメント