【Power Apps】条件式関数/演算子まとめ

Power Appsでは、条件式を扱うための関数や演算子が豊富に用意されており、さまざまな条件式やBoolean値で利用される基本的な要素なのでよく理解しておく必要があります。
これらの関数と関連する演算子（`=`, `<>`, `&&`, `||`, `!`など）について、具体的な使用例とともに解説します。

## 関数説明・構文

### 比較演算子

値を比較するために使用する演算子です。

| 演算子 | 説明 | 例 |
|--------|------|-----|
| = | 等しい | 値 = 10 |
| <> | 等しくない | 値 <> 10 |
| in | 含む | "a" in 値 |
| < | より小さい | 値 < 10 |
| > | より大きい | 値 > 10 |
| <= | 以下 | 値 <= 10 |
| >= | 以上 | 値 >= 10 |

[Power Apps の演算子と識別子 - Power Platform | Microsoft Learn](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/operators)

in演算子は今回紹介しませんので、以下の記事をご覧ください。

https://powerplatformnikki.com/inexactin

### 論理演算子

複数の条件を組み合わせるために使用する演算子です。
これらは関数でも同じことができるので、可読性に応じて使い分けましょう。

| 演算子 | 説明 | 例 |
|--------|------|-----|
| && | かつ (And) | 条件1 && 条件2<br>And(条件1, 条件2) |
| \|\| | または (Or) | 条件1 \|\| 条件2<br>Or(条件1, 条件2) |
| ! | 否定 (Not) | !条件<br>Not(条件) |

[And、Or、および Not 関数 - Power Platform | Microsoft Learn](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-logicals)

### If関数

条件式を最も使用するIf関数も紹介しておきます。

> 条件が true の場合は 1 つの値を返し、false の場合は別の値を返します。
> 
> [公式より引用](https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-if)

```
If(条件式, 真の場合の値 [,偽の場合の値] )
```

## 基本的な使い方

### If関数での条件分岐

If関数を使用して、条件に応じて異なる値を返すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/7913181f-51f7-6279-423b-659d4fe4f533.png)


```
// 数値が10より大きい場合は「大きい」、それ以外は「小さい」と表示
If(
    Value > 10,
    "大きい",
    "小さい"
)
```

### 複数条件の組み合わせ

論理演算子を使用して、複数の条件を組み合わせることができます。
よくあるAからBの範囲にあるかどうかは以下のような数式で判断できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/b0f535ea-3101-b5ff-4344-cdadae723c96.png)

```
// 数値が10より大きく、20より小さい場合は「範囲内」、それ以外は「範囲外」と表示
If(
    Value > 10 && Value < 20,
    "範囲内",
    "範囲外"
)
```

日付範囲の判定も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/7b29bd77-e2e4-0a36-a553-55887f6df4e0.png)

### Notの使い方

ブール値の値をtrueからfalseに、falseからtrueにすることができます。

以下4例はどれも同じ出力(true)をしますので、関数の制限などに応じて使い分けてください。

```
true <> false
true = !false
Not(true = false)
!(true = false)
```

## 実践的な活用例

### コントロールの表示/非表示制御

Visibleプロパティに条件式を設定して、コントロールの表示/非表示を制御できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/c05cf1ee-d9e3-55c1-021f-2684f0103787.png)

```
// Slider1の値が50以上の場合のみLabelを表示
Label.Visible = Slider1.Value >= 50
```

ちなみにこの書き方でも問題ないですが、数式が長くなるだけなのでIfを使用する必要はないです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/cdcfd3f3-7ca6-b07b-24b7-1c7d9a722705.png)

### Filter関数との組み合わせ

Filter関数の条件式として使用することで、データの絞り込みができます。
第二引数以降の条件は増やすほどAnd条件でフィルターされていきますので、Or条件が必要な場合はOr関数または||を使用しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/084ca2db-682e-897a-7e2f-61f0eb6f17b6.png)

```
//Filter関数をOr条件フィルター
Filter(
    SampleList,
    Or(
        容量.Value = First(ComboboxCanvas1_1.SelectedItems).Value,
        容量.Value = Last(ComboboxCanvas1_1.SelectedItems).Value
    )
)
```

複雑なフィルターになってくるとFilter関数の外側にIfを使用して条件分岐したくなりますが、可読性や保守性が著しく低下しますのでやめてください🙇‍♂️

https://youseibubu.com/apps/galleryfilter

### 入力値の検証

Button.OnSelect等で入力値のバリデーションチェックができます。

```
If(
    // テキスト入力が空でないことをチェック
    !IsBlank(TextInput1.Text) &&
    // 数値が0より大きいことをチェック
    Value1.Value > 0,
    // 条件を満たす場合の処理
    Collect(テーブル, {列1: TextInput1.Text, 列2: Value1.Value}),
    // 条件を満たさない場合の処理
    Notify("入力値を確認してください", NotificationType.Error)
)
```

こちらも条件が増えるほど可読性や保守性が低下するので、他の実装方法や簡単な実装方法も考える必要があります。

https://powerplatformnikki.com/validationcheck

## おわりに

Power Appsはローコードツールというのは名ばかりで特に条件式はゴリゴリに数式を考える必要があり、複雑なロジックをそのままゴリゴリに書いてしまうと可読性やパフォーマンスが低下してしまいます。

そうならないためにもあらかじめ条件を整理したり、他の実装方法を検討したりなどの工夫が必要になります。

https://yo-yon.hatenablog.com/entry/powerapps2024241208

### 元記事

https://powerplatformnikki.com/conditional/