PowerApps│コントロールの入力漏れを手軽に判定する方法

こんにちは、あんこ先生です。

ギャラリー形式のチェックリストアプリを作ったはいいものの、入力漏れが多くて困っていませんか?

ひどいときは全部空で登録されることもありますよね。

でもひとつずつ入力されているか判定するのめんどいです。

フォーム版だったら全項目を入力必須にするだけで事足りますが、ギャラリー版ではそううまくいきません。

そこで、今回はギャラリーのテンプレートに設置したコントロールが入力されているかまとめて判定する方法を紹介します。

これでひとつ問題が解決しますね!

コントロールの入力漏れを手軽に判定する方法


今回作るもの

上図の通り、なし・ひとつ以上・すべての3段階で判定します。

よく使うチェックボックスとテキスト入力で作りこんでみます。

項目数は多すぎると紹介しにくいので5つとしています。

ギャラリーの性質上、スクロールさえすれば数に制限はありません。

一応100個以下を目安にしてください。


判定の仕様│チェックボックス

チェックボックスはtrue or falseの2択です。

通常、確認したらチェックをつけると思うのでtrueなら入力済みとして判定させます。


判定の仕様│テキスト入力

テキスト入力は空でなければ入力済みとして判定させます。

1文字以上入力されていればOKです。


ギャラリー版チェックリストの作成

今回の目的は入力漏れの判定なので、チェックリストはかんたんなものにします。

ギャラリーの中に4つコントロールを投げるだけです。

動作目的ならチェックボックス│chkAnsテキスト入力│txtAnsの2つだけでも大丈夫です。

ギャラリーのItemsは下記をコピペしちゃってください。

With({tblQes:["お風呂","トイレ","玄関","キッチン","秘密の部屋"]},
    AddColumns(Sequence(5,1),"Qes",Index(tblQes,ThisRecord.Value).Value)
)

項目番号はThisItem.Value、項目名はThisItem.Qesラベルに指定してください。

これで準備は完了です。

具体的な入力判定方法│チェックボックス


ひとつもチェックされていない│チェックボックス

まずチェックボックスから判定していきます。

ひとつめは、ひとつもチェックされていない場合にtrueを返すパターンです。

//ひとつもチェックしていない
IsEmpty(Filter(galChekList.AllItems,chkAns.Value))

ギャラリーのAllItemsをチェックボックスの結果でFilterし、IsEmpty関数でその中身が空かどうか判定しています。

IsEmpty関数はテーブルが空の時にtrueを返します。

つまり、ひとつもチェックされていなければ、テーブルは空になりtrueを返すわけです。


ひとつ以上チェックされている│チェックボックス

次にどれかひとつ以上チェックされている場合にtrueを返すパターンです。

//ひとつ以上チェックされている
!IsEmpty(Filter(galChekList.AllItems,chkAns.Value))

これは先ほどの反転ですね。

同じように、ギャラリーのAllItemsをチェックボックスの結果でFilterし、IsEmpty関数でその中身が空かどうか判定しています。

その結果を!│notで反転させています。

つまり、テーブルが空でなければtrueを返すわけです。


すべてチェックされている│チェックボックス

最後はすべてチェックされている場合にtrueを返すパターンです。

//すべてチェックされている
CountRows(galChekList.AllItems)=CountRows(Filter(galChekList.AllItems,chkAns.Value))

まず、ギャラリーのAllItemsCountRows関数で総数を求めます。

そして同じようにCountRows関数でチェックされている数を求め、総数と等しいかどうかで判定します。

とてもかんたんに求められましたね。

具体的な入力判定方法│テキスト入力


ひとつも入力されていない│テキスト入力

続いてテキスト入力を判定していきます。

ひとつめは、ひとつも入力されていない場合にtrueを返すパターンです。

//ひとつも入力されていない
IsEmpty(Filter(galChekList.AllItems,Len(txtAns)>0))

ギャラリーのAllItemsをテキスト入力が0文字より多いものでFilterし、IsEmpty関数でその中身が空かどうか判定しています。

IsEmpty関数はテーブルが空の時にtrueを返します。

つまり、ひとつも入力されていなければ、テーブルは空になりtrueを返すわけです。


ひとつ以上入力されている│テキスト入力

次にどれかひとつ以上入力されている場合にtrueを返すパターンです。

//ひとつ以上入力されている
!IsEmpty(Filter(galChekList.AllItems,Len(txtAns)>0))

これも先ほどの反転ですね。

同じように、ギャラリーのAllItemsをテキスト入力が0文字より多いものでFilterし、IsEmpty関数でその中身が空かどうか判定しています。

その結果を!│notで反転させています。

つまり、テーブルが空でなければtrueを返すわけです。


すべて入力されている│テキスト入力

最後はすべてチェックされている場合にtrueを返すパターンです。

//すべて入力されている
CountRows(galChekList.AllItems)=CountRows(Filter(galChekList.AllItems,Len(txtAns)>0))

まず、ギャラリーのAllItemsCountRows関数で総数を求めます。

そして同じようにCountRows関数でテキスト入力が0文字より多い数を求め、総数と等しいかどうかで判定します。

こちらも、かんたんに求められましたね。

応用方法


複合条件で判定

例えばチェックボックスがチェックされていて、テキスト入力にも何か文字が入っている場合です。

これはかんたん、条件を&&で繋げるだけです。

IsEmpty(Filter(galChekList.AllItems,chkAns.Value)) && IsEmpty(Filter(galChekList.AllItems,Len(txtAns)>0))

どちらか一方が入力されていればよい場合も、条件を||で繋げるだけです。

IsEmpty(Filter(galChekList.AllItems,chkAns.Value)) || IsEmpty(Filter(galChekList.AllItems,Len(txtAns)>0))


色やアイコンを変えたい

判定したら色やアイコン変えたりしたいですよね。

これもかんたん、条件をそのままIf関数で囲んでColorIconに応用するだけです。

//ひとつも入力されていない場合は青系、入力されている場合は赤系の色にする
If(IsEmpty(Filter(galChekList.AllItems,Len(txtAns)>0)),
RGBA(56, 96, 178, 1),
RGBA(178, 96, 56, 1)
)

アイデア次第で、いろんな表現ができそうですね。

コントロールの入力漏れを手軽に判定する方法のまとめ

今回はコントロールの入力漏れを手軽に判定する方法を紹介しました。

ギャラリー型のチェックリストでも、まとめて判定できることがわかりましたね。

繰り返しのチェックリストならフォーム型よりも作りやすいのでオススメです。

注意点がひとつ、ギャラリーのAllItemsはスクロールしないと先頭から100レコードしか読み込みません。

ふつうは最後までスクロールするので問題ないとは思いますが、この制限は覚えておくと良いです。

ご支援よろしくおねがいします

この記事を気に入ってくださった方、寄付してあげてもいいよという方がいらっしゃっいましたら、ご支援いただけると助かります。

下記リンクからAmazonギフト券で、金額は15円からお気持ちを入力してください。

受取人のメールアドレスは amazon@anko7793.com までお願いします。

メッセージもいただけるとたいへん喜びます。

よろしくお願いします。

Amazonギフト券(Eメールタイプ) 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
七草あんこ
非IT系中間管理職やってます。社命によりoffice365を主軸とした業務改善プロジェクトメンバーに任命されたことでPowerAppsと出会えました。いまではビジネス・プライベートを問わず、欠かせないツールになっています。導入初期やアプリ作成時に遭遇した諸問題の解決法とサンプルアプリの作り方を紹介していきます。主にTwitterで情報収集しているので不明点など呟いているとお邪魔するかもしれません。