こんにちは、あんこ先生です。
ギャラリー形式のチェックリストアプリを作ったはいいものの、入力漏れが多くて困っていませんか?
ひどいときは全部空で登録されることもありますよね。
でもひとつずつ入力されているか判定するのめんどいです。
フォーム版だったら全項目を入力必須にするだけで事足りますが、ギャラリー版ではそううまくいきません。
そこで、今回はギャラリーのテンプレートに設置したコントロールが入力されているかまとめて判定する方法を紹介します。
これでひとつ問題が解決しますね!
Contents
コントロールの入力漏れを手軽に判定する方法
今回作るもの
上図の通り、なし・ひとつ以上・すべての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))
まず、ギャラリーのAllItemsをCountRows関数で総数を求めます。
そして同じように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))
まず、ギャラリーのAllItemsをCountRows関数で総数を求めます。
そして同じように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関数で囲んでColorやIconに応用するだけです。
//ひとつも入力されていない場合は青系、入力されている場合は赤系の色にする
If(IsEmpty(Filter(galChekList.AllItems,Len(txtAns)>0)),
RGBA(56, 96, 178, 1),
RGBA(178, 96, 56, 1)
)
アイデア次第で、いろんな表現ができそうですね。
コントロールの入力漏れを手軽に判定する方法のまとめ
今回はコントロールの入力漏れを手軽に判定する方法を紹介しました。
ギャラリー型のチェックリストでも、まとめて判定できることがわかりましたね。
繰り返しのチェックリストならフォーム型よりも作りやすいのでオススメです。
注意点がひとつ、ギャラリーのAllItemsはスクロールしないと先頭から100レコードしか読み込みません。
ふつうは最後までスクロールするので問題ないとは思いますが、この制限は覚えておくと良いです。
コメントを残す