【Power Apps】If関数の完全ガイド|『値を返すIf』と『処理を行うIf』の理解、Switchとの使い分け

Power Apps の If 関数(If())は、ラベルの Text / Fill などで「値を返す」使い方と、OnSelect / OnChange などで「処理を実行する」使い方の2パターンがある。

この記事では、If の基本構文(if/else、elseif)、既定値を省略したときに Blank(空白)を返す仕様、&& / || を使った複合条件の書き方を、実例(スクショ)つきでまとめます。

「結局どの書き方が正解?」で迷ったときに、コピペしてすぐ使えるメモとしてどうぞ。

スポンサーリンク

Power Appsのifは2種類の効果を持つ:値を返すifと処理を行うif

Power Appsのifは、

  • Excelのように値を返すif
  • プログラムのように処理を行うif

の両方の機能を持っている。

値を返すif

例えば、ラベルのTextプロパティにこんな文を書けば、
スライダーが25のときに、「Result1」という文字列を返してくる。

これがExcelのような値を返すifの使い方。

処理を行うif

対して、例えばラベルのTextプロパティに変数strを入れて、

スライダーのOnChangeにこんな文を書けば、

スライダーの値が25に変わったときに、strに「Result1」が代入処理が行われラベルにResult1と表示される。

これが処理を行うif

ちなみに上の書き方だと一旦スライダーが25になってしまうと、「Result1」が表示され続ける。

こんな感じで、Power AppsのIfは値を返すif処理を行うifがある

結果を返すIfはTextプロパティやFillプロパティなどの値を入れる場所で使用し、処理を行うIfはOnChangeやOnSelectなどのイベントが発生したときに呼び出されるプロパティ内で使用する。

Power Appsのifの仕様

下の記事でも書いたが、Power Appsのifの仕様は
どの条件もtrueではなく、どの一致も見つからない、および既定の結果を指定しない場合は空白を返す
となっている。

つまり、(やらないとは思うけど)以下の式はtrueを返す。

IsBlank(if(false,false)) 

予期せぬ挙動を防ぐため、ifの既定の結果は必ず設定したほうがよさそう。

ifの書き方

それでは実際にifの使い方をご紹介。

if else

やりたいこと

If(条件)
  処理1
else
  デフォルト処理

Power Appsでは

If(条件, 処理1, デフォルト処理)

if elseif else

やりたいこと

If(条件1)
  処理1
else if(条件2)
  処理2
else
  デフォルト処理

Power Appsでは

If(条件1, 処理1, 条件2, 処理2, デフォルト処理)

第3引数に条件分を入れるとelseifになる。

デフォルト処理を省略した場合、結果を返すifなら空白が返され、処理を行うifなら何も行わない。

And条件

やりたいこと

If(条件1 かつ 条件2)
  処理1
else
  デフォルト処理

Power Appsでは

If(条件1 && 条件2, 処理1, デフォルト処理)

Or条件

やりたいこと

If(条件1 もしくは 条件2)
  処理1
else
  デフォルト処理

Power Appsでは

If(条件1 || 条件2, 処理1, デフォルト処理)

AndやOr内の条件は,で区切っていけばいくつでも追加していくことができる。

If と Switch の使い分け(どっちを使うべき?)

Power Apps(Power Fx)では条件分岐に If をよく使うけど、条件が増えてくると If が長くなって読みにくくなりがち。
そんなときに便利なのが Switch で、「ある値が何か」によって処理を分けたい場合に読みやすく書ける。

まず結論:使い分けの目安

  • Switch が向いてる:1つの値(Status など)が「どれに一致するか」で分岐したいとき(分岐が3つ以上だと特に強い)
  • If が向いてる:範囲判定(以上/未満)や、複合条件(A && B、A || B)、計算結果を含む条件など「一致」以外で分岐したいとき

Switch がハマる例(値の一致で分岐)

たとえばステータスの値で表示文言を変えるなら、If を並べるより Switch のほうが見通しが良い。

 
// Status の値に応じて表示テキストを返す例 
Switch( Status, 
    "完了", "Done", 
    "保留", "Pending", 
    "中止", "Canceled", 
    "Unknown" // ←どれにも一致しない時のデフォルト 
)

If がハマる例(範囲・複合条件)

数値がしきい値以上か、期間内か、複数条件を満たすか…みたいなケースは If のほうが素直。

// 範囲判定の例(値の一致ではない) 
If( Slider1.Value >= 25 && Slider1.Value < 50, "25以上50未満", "それ以外" ) 

「条件が多い」けど一致じゃないときの裏ワザ(Switch(true, ...))

If が長くなりすぎるときは、Switch を “条件の羅列” みたいに使う書き方もある(好みは分かれるけど、ネストIfより読みやすいことが多い)。

// Switch を If の elseif のように使う(上から順に評価したい時) 
Switch( true, 
    条件1, 処理1, 
    条件2, 処理2, 
    条件3, 処理3, 
    デフォルト処理
) 

迷ったら、「同じ項目(1つの値)を見て分岐するなら Switch」「条件式が主役なら If」って覚えると外しにくい。

それでもIfやSwitchが長すぎて管理しきれない? → ユーザー定義関数のすすめ

条件分岐が増えすぎて「App.Formulas」や「OnSelect」がスパゲッティ状態になっているなら、そのロジックを「ユーザー定義関数(UDF)」として切り出すのがおすすめ。

関連記事

コメント

タイトルとURLをコピーしました