こんにちは、あんこ先生です。
PowerAppsで思い通りにアプリを動かすには条件分岐が必須です。
条件分岐させるために、If関数やSwitch関数を使っていますよね。
でも、このふたつの違いや使い分けってできていますか?
それに、If関数やSwitch関数を使わないほうがよいケースもあるんです。
今回は、「うまく条件分岐できない」、「もっとスマートに記載したい」といった初心者から中級者の方を対象に、条件分岐の使い方について解説します。
この記事を読めば、条件分岐の概要をや記述方法を理解できますよ。
- 条件分岐の概要をなんとなく理解する
- 狙った通りの条件分岐を使える
- IfとSwitch関数以外でも条件分岐できる
PowerAppsでIfやSwitchなどを使って条件分岐する方法
条件分岐とは
“もし〇〇だったら××する”という処理です。
たとえば、信号が青だったら進む、青以外なら止まるといった具合です。
この条件分岐で、値や処理を使い分けることができます。
もちろん二者択一以外にも、範囲や複数条件も指定できます。
PowerAppsでは、条件分岐用にIf関数とSwitch関数が用意されています。
それぞれの概要は次の通りです。
If関数の概要
If(条件式 ,
条件を満たす処理または値 ,
条件を満たさない処理または値
)
指定した条件を満たす(trueになる)まで、1つ以上の条件をテストします。
条件を満たした場合(true)は、対応する処理または値を返します。
条件を満たさない場合(false)は、既定値が返されます。
既定値を指定しない場合は、空白 が返されます。
使用例
If(今日のおやつはチーズケーキ ,
焼いて食べる ,
我慢する
)
Excelとは異なり、入れ子やElseを使わず複数条件を指定することもできますよ。
Switch関数の概要
Switch(条件 ,
結果1 ,処理1 ,
結果2 ,処理2 ,
当てはまらない場合の処理
)
数式の評価結果が、指定した任意の値のどれかに一致するかテストします。
一致した場合は、対応する処理または値を返します。
一致しない場合は、既定値が返されます。
既定値を指定しない場合は、空白 が返されます。
使用例
Switch( 今日のおやつ ,
チーズケーキ ,焼いて食べる,
バナナ ,そのまま食べる,
我慢する
)
If関数とSwitch関使い分け
単一条件や他の異なる条件を評価する場合は、If関数を使用します。
1つの条件を複数の値で評価する場合は、Switch関数を使用します。
Switch関数で評価することはIf関数でも実現できます。
しかし、値が増えるほどコードが長くなり可読性が悪くなります。
簡潔にコードをまとめられる方を使うとすっきりしますよ。
どちらの関数も上から順に評価され、条件を満たしたところで停止します。
つまり、同じ条件、同じ値を複数回記述しても、評価されるのは最初の記述のみとなります。
条件式について│比較・論理演算子
比較演算子
= 等しい
左辺と右辺が等しいかどうか比較します。
テキストでも同様に機能します。
完全一致なので桁が違う、半角スペースが混じっている場合は否定されます。
<> 等しくない
左辺と右辺が等しくないか比較します。
テキストでも同様に機能します。
完全一致した場合は否定されます。
< 左辺が右辺より小さい
左辺と右辺を比較し、右辺より小さいかどうか判定します。
~より、の考え方なので右辺の値は含みません。
<= 左辺は右辺以下
左辺と右辺を比較し、右辺以下かどうか判定します。
以下、の考え方なので右辺の値は含みます。
> 左辺が右辺より大きい
左辺と右辺を比較し、右辺より大きいかどうか判定します。
~より、の考え方なので右辺の値は含みません。
>= 左辺は右辺以上
左辺と右辺を比較し、右辺以上かどうか判定します。
以上、の考え方なので右辺の値は含みます。
見た目が数値でも、テキスト型だと計算されなかったり、警告されたりします。
その場合は、Value関数で囲んで数値に変換しましょう。
論理演算子
And() または && すべての条件を満たす
複数の条件を()で囲むか、&&で繋げます。
囲むか繋げた条件すべてを満たしている場合にtrueを返します。
Or() または || いずれかの条件を満たす
複数の条件を()で囲むか、||で繋げます。
囲むか繋げた条件のいずれかひとつ以上を満たしている場合にtrueを返します。
Not() または ! 条件を満たさない場合
単体または複数の条件を()で囲むか、頭に!を付けます。
囲むか付けた条件を満たさない場合にtrueを返します。
In 指定した文字列を含む
左辺のキーワードが右辺に含まれた場合にtrueを返します。
条件分岐のケーススタディ
一般的な条件分岐をIf関数とSwitch関数で試してみます。
上図のような条件分岐動作確認用アプリを作成しておくと理解が深まりますよ。
数値の評価(単一)
条件スライダー(SliderTest01)の値が1ならtrue
If(SliderTest01.Value=1,true,false)
Switch(SliderTest01.Value,1,true,false)
工夫
PowerAppsの数式では、数値0はfalse、0以外の数値はtrueと評価する特性があります。
これを利用するとIf関数は次のように書き換えることができます。
If(SliderTest01.Value,true,false)
数値の評価(複数択一)
条件スライダー(SliderTest01)の値が1か2ならtrue
If(SliderTest01.Value=1||SliderTest01.Value=2,true,false)
Switch(SliderTest01.Value,1,true,2,true,false)
数値の評価(範囲)
条件スライダー(SliderTest01)の値が1から5の間ならtrue
If(SliderTest01.Value>0&&SliderTest01.Value<6,true,false)
Switch(SliderTest01.Value,1,true,2,true,3,true,4,true,5,true,false)
数値の評価(不特定)
条件スライダー(SliderTest01)の値が1か5か9のいずれかならtrue
If(SliderTest01.Value=1||SliderTest01.Value=5||SliderTest01.Value=9,true,false)
Switch(SliderTest01.Value,1,true,5,true,9,true,false)
数値の評価(しきい値)
条件スライダー(SliderTest01)の値は最大10。8以上ならtrue
If(SliderTest01.Value>80,true,false)
Switch(SliderTest01.Value,8,true,9,true,10,true,false)
工夫
先ほども紹介しましたが、数値0はfalse、0以外の数値はtrueと評価する特性があります。
これを利用するを次のように書き換えることができます。
If(SliderTest01.Value-7,true,false)
複数数値の評価(各単一)
条件2つのスライダー(SliderTest01と02)の値。
ひとつめが1、ふたつめが2ならtrue
If(SliderTest01.Value=1&&SliderTest02.Value=2,true,false)
Switch(SliderTest01.Value,1,Switch(SliderTest02.Value,2,true),false)
工夫
各値をつなげて評価することもできます。
テキスト型になるため、二重引用符で囲む必要があります。
If(SliderTest01.Value&SliderTest02.Value="12",true,false)
Switch(SliderTest01.Value&SliderTest02.Value,"12",true,false)
テキストの評価(単一)
条件テキストボックス(TextTest01)の値が”あんこ”ならtrue
If(TextTest01.Text="あんこ",true,false)
Switch(TextTest01.Text,"あんこ",true,false)
テキストの評価(複数択一)
条件テキストボックス(TextTest01)の値が”こしあん”か”つぶあん”ならtrue
If(TextTest01.Text="こしあん"||TextTest01.Text="つぶあん",true,false)
Switch(TextTest01.Text,"あんこ",true,"つぶあん",true,false)
複数テキストの評価(各単一)
条件:2つのテキストボックス(TextTest01と02)の値。
ひとつめが”こしあん”、ふたつめが”つぶあん”ならtrue
If(TextTest01.Text="こしあん"&&TextTest02.Text="つぶあん",true,false)
Switch(TextTest01.Text,"あんこ",Switch(TextTest02.Text,"つぶあん",true),false)
こちらも各値をつなげて評価することもできます。
If(TextTest01.Test&TextTest02.Test="こしあんつぶあん",true,false)
Switch(TextTest01.Test&TextTest02.Test,"こしあんつぶあん",true,false)
ブール値の評価(単一)
条件チェックボックス(CheckTest01)にチェックされていれば”済み”
If(CheckTest01.Value=true,"済み",false)
Switch(CheckTest01.Value,true,"済み")
工夫
チェックボックスコントロールの戻り値はブール型なのでそのまま条件として記載できます。
If(CheckTest01.Value,"済み",false)
ブール値の評価(複数)
条件チェックボックス(CheckTest01と02)の両方がチェックされていれば”済み”
If(CheckTest01.Value=true&&CheckTest02.Value=true,"済み",false)
Switch(CheckTest01.Value,true,Switch(CheckTest02.Value,true,"済み"))
ブール値の評価(組み合わせ)
条件チェックボックス(CheckTest01と02)の組み合わせで評価
両方チェックなら”完璧”、片方チェックなら”合格”、チェックなしは”追試”
If(CheckTest01.Value=true&&CheckTest02.Value=true,"完璧",
CheckTest01.Value=true||CheckTest02.Value=true,"合格",
"追試"
)
Switch(CheckTest01.Value,
true,Switch(CheckTest02.Value,true,"完璧","合格"),
false,Switch(CheckTest02.Value,true,"合格","追試")
)
工夫
これまた各値をつなげて評価することもできます。
If(CheckTest01.Value&CheckTest02.Value="truetrue","完璧",
CheckTest01.Value&CheckTest02.Value="truefalse","合格",
CheckTest01.Value&CheckTest02.Value="falsetrue","合格",
CheckTest01.Value&CheckTest02.Value="falsefalse","追試"
)
Switch(CheckTest01.Value&CheckTest02.Value,
"truetrue","完璧",
"truefalse","合格",
"falsetrue","合格",
"falsefalse","追試"
)
その他の評価方法
これらはIf関数やSwitch関数を経由せず条件分岐として使用できます。
IsBlank関数
指定したフィールドまたはレコード、コントロールが空かどうか判定します。
空の場合にtrueを返すため、対象データがある場合は削除用のごみ箱アイコンを表示するという使い方ができます。
IsEmpty関数
指定したテーブルの中身が空かどうか判定します。
空の場合にtrueを返すため、対象データがない場合は登録、ある場合は修正という使い方ができます。
IsNumeric関数
指定したデータが数値かどうか判定します。
数値ならtrueを返すため、入力内容が数値のみか、電話番号にハイフンが含まれていないかなど確認することができます。
IsMatch関数
指定したデータが特定のパターンに一致しているか判定します。
一致していればtrueを返すため、例えばメールアドレスを入力させたときに書式があっていっるか確認することができます。
CountRows関数
テーブルのレコード数を返します。
PowerAppsは数値0以外はtrueと判定されます。
そのため、レコードがある=テーブルが空じゃないということが分かります。
戻り値がブール型なら、IfやSwitch関数を使わなくてもVisibleなどに直接指定できるよ
使用例
Visibleプロパティの制御
If(IsBlank(テーブル.Value),true,false)
or
IsBlank(テーブル.Value) //こっちの方がスマート
まとめ
今回はPowerAppsで条件分岐する方法を解説しました。
If関数とSwitch関数の違いは理解できましたか?
値を特定できる場合や値の組み合わせで判定させる場合はSwitch関数、それ以外、特に数値の範囲を判定させる場合はIf関数がおススメです。
アプリ開発とは切っても切れない関係なので、コードは短く簡潔に記述するよう心がけましょう!
また、変数を扱えるとより高度な条件分岐が行えます。
こちらの記事も読んでみてください。