0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power Automate Desktop: 辞書(Custom Object)に特定のキーが存在するか判定する方法

0
Last updated at Posted at 2026-08-07

Power Automate Desktop: 辞書(Custom Object)に特定のキーが存在するか判定する方法

1. 概要(TL;DR)

Power Automate Desktopで、辞書(Custom Object)にキーと値をどんどん追加していくループ処理を作っていました。
その際、「すでに同じキーが辞書に存在する場合はループを終了する(あるいはスキップする)」という判定をしたかったのですが、PADのCustom Objectには「キーが存在するか」を直接判定するアクション・関数が用意されていません。
IsEmpty で判定しようとしたところ実行前の時点でエラーになり、最終的には辞書をテキスト化して Contains / NotContains で判定する方法で解決しました。

2. 前提・環境

  • Power Automate フロー:Desktopフロー
  • 使用アクション:Loop変数の設定IF
  • 使用している変数の型:Custom Object(辞書)
  • 例として、以下のような辞書を扱う想定とします。
{ 'りんご': '680', 'みかん': '580', 'すいか': '' }

スクリーンショット 2026-08-07 152555.png

3. やりたかったこと

  • ループの中で、新しいキー(例:「ぶどう」)がすでに辞書に存在するかどうかを判定したい
  • すでに存在する場合はループを終了(または、その回だけスキップして次に進む)
  • 存在しない場合は、新しくキーと値を辞書に追加する

4. つまづいたポイント

Power Automate DesktopのCustom Object(辞書型の変数)には、標準では「このキーが存在するかどうか」を判定するアクションや関数がありません。
存在しないキーをうっかりそのまま参照すると、フローを実行するまでもなく、編集画面の時点で以下のようなエラーが出てしまいます。

'最初のオペランド': 構文エラーです。

スクリーンショット 2026-08-07 160257.png

5. 試したこと(トライ&エラー)

試したこと①:IsEmpty でキーの存在チェック

最初に思いついたのは、辞書のプロパティに対して IsEmpty を使う方法でした。

If MyObj['すいか'].IsEmpty = True then
    ...
Else if MyObj['りんご'].IsEmpty = True then
    ...
Else if MyObj['ぶどう'].IsEmpty = True then
    ...
End

「まだ存在しないキーなら IsEmptyTrue になるはず」という想定でしたが、存在しないキー(MyObj['ぶどう'])を指定した時点でエラーになってしまい、この方法は使えないと分かりました。IsEmpty はあくまで「値が空かどうか」の判定であり、「キーがそもそも存在するか」の判定には使えません。

変数 'MyObj' にプロパティ 'ぶどう' がありません。

スクリーンショット 2026-08-07 150741.png

試したこと②:海外コミュニティで見つけた Contains を使う方法

日本語の情報では同様の事例が見つからず、英語で検索したところ、海外のコミュニティで「辞書をテキストとして扱い、Contains / NotContains でキーの有無を判定する」という方法が紹介されていました。これを試したところ、狙い通りに動作しました。

6. 解決方法

Custom Objectの変数を %変数名% の形でテキストに変換すると、key '値' という文字列表現を含む形になります。この性質を利用し、NotContains(または Contains)関数で「対象のキーがすでに辞書のテキスト表現に含まれているか」を判定します。

スクリーンショット 2026-08-07 151058.png

Power Automate Desktop IFで特定のキーを判定
スクリーンショット 2026-08-07 151227.png

If NotContains($'''key \'%MyObj%\'''', $'''ぶどう''', False) Then
    Set MyObj['ぶどう'] to 590
Else
    // すでに存在する場合の処理(ループ終了 or スキップなど)
End
  • %MyObj% を文字列テンプレート内に埋め込むと、辞書全体を key 'りんご', key 'みかん', ... のようなテキストとして扱える
  • そのテキストの中に、対象のキー(例:ぶどう)が key 'ぶどう' という形で含まれていないかを NotContains でチェックする
  • 含まれていなければ(=まだ登録されていない新しいキーなら)辞書に追加
  • 含まれていれば(=すでに登録済み)ループを終了、またはその回の処理をスキップして次のループへ

7. まとめ・所感

  • Power Automate DesktopのCustom Objectには「キーが存在するか」を直接判定する機能がなく、存在しないキーに直接アクセスするとデザイン時点でエラーになる
  • 辞書を文字列テンプレートでテキスト化し、Contains / NotContains で部分一致判定する方法で代用できる
  • この方法は「辞書の重複チェック」だけでなく、リストや辞書に何らかの値が含まれているかをざっくり判定したい場面全般に応用できそう
  • 情報が国内では見つかりにくかったため、同じ詰まり方をした人の助けになれば

※本記事の構成検討・文章のドラフト作成にあたり、AI(Claude)のサポートを受けています。技術的な調査・検証は筆者自身によるものです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?