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', 'すいか': '' }
3. やりたかったこと
- ループの中で、新しいキー(例:「ぶどう」)がすでに辞書に存在するかどうかを判定したい
- すでに存在する場合はループを終了(または、その回だけスキップして次に進む)
- 存在しない場合は、新しくキーと値を辞書に追加する
4. つまづいたポイント
Power Automate DesktopのCustom Object(辞書型の変数)には、標準では「このキーが存在するかどうか」を判定するアクションや関数がありません。
存在しないキーをうっかりそのまま参照すると、フローを実行するまでもなく、編集画面の時点で以下のようなエラーが出てしまいます。
'最初のオペランド': 構文エラーです。
5. 試したこと(トライ&エラー)
試したこと①:IsEmpty でキーの存在チェック
最初に思いついたのは、辞書のプロパティに対して IsEmpty を使う方法でした。
If MyObj['すいか'].IsEmpty = True then
...
Else if MyObj['りんご'].IsEmpty = True then
...
Else if MyObj['ぶどう'].IsEmpty = True then
...
End
「まだ存在しないキーなら IsEmpty が True になるはず」という想定でしたが、存在しないキー(MyObj['ぶどう'])を指定した時点でエラーになってしまい、この方法は使えないと分かりました。IsEmpty はあくまで「値が空かどうか」の判定であり、「キーがそもそも存在するか」の判定には使えません。
変数 'MyObj' にプロパティ 'ぶどう' がありません。
試したこと②:海外コミュニティで見つけた Contains を使う方法
日本語の情報では同様の事例が見つからず、英語で検索したところ、海外のコミュニティで「辞書をテキストとして扱い、Contains / NotContains でキーの有無を判定する」という方法が紹介されていました。これを試したところ、狙い通りに動作しました。
6. 解決方法
Custom Objectの変数を %変数名% の形でテキストに変換すると、key '値' という文字列表現を含む形になります。この性質を利用し、NotContains(または Contains)関数で「対象のキーがすでに辞書のテキスト表現に含まれているか」を判定します。
Power Automate Desktop IFで特定のキーを判定

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)のサポートを受けています。技術的な調査・検証は筆者自身によるものです。



