【AppSheet】Valid Ifで入力欄を自由入力にする方法を実例で分かりやすく解説。プルダウンや選択式にしない|エラーメッセージのカスタマイズ(This entry is invalid, AND・IN関数)

app sheet アップシート appsheet-prograshi(プロぐらし)-kv AppSheet
記事内に広告が含まれていることがあります。

AppSheetの超便利な機能にValid Ifがあります。Valid Ifを使うとカラムの値の選択肢を自由に指定することができます。

ただし、デフォルトではプルダウンや選択肢から選ぶ形になってしまいます。ここでは、デフォルトのプルダウンなどの選択肢を表示するのではなく、自由入力のインプットボックス(入力項目)として表示する方法についてまとめています。

また自由入力にした際に表示される「This entry is invalid」というエラーメッセージの変更方法についても解説しています。



Valid Ifを自由入力項目にする方法

Valid Ifを使ってアプリ上のフォームで自由入力の形で表示するには以下のようにAND関数とIN関数を使います。

AND( TRUE, IN( [_THIS], 選択肢のリスト ))


ANDは真偽値でtrueかfalseのどちらかを返す関数です。必ず2つ以上の引数を必要とします


実例:Valid Ifを自由入力項目にする方法

実例を見るのが一番早くわかりやすいと思います。


通常の指定

例えば、以下のようにValid Ifで特定のカラムを指定したとします。

テーブル名[カラム名]


Valid If とはAppSheetの各カラムの「Data Validity」の中で設定できる項目です。

大カテゴリー一覧[大カテゴリー]


すると、デフォルトの表示はプルダウンとなります。



また、Valid Ifで指定した選択肢が少ない場合はプルダウンではなく、ラジオボタンのような選択肢として表示されます。


表示がどちらになるかはAppSheet側が自動で調整します。私の場合だと4つまでが選択肢の表示で、5つ以上だとプルダウンになりました。


MEMO

ビューで表示する形式を「ボタン」か「プルダウン」にするかは、カラム設定の「Input mode」で指定できます。

Autoにすると表示項目が少ないときはボタンで、多い場合はプルダウンになります。


自由入力形式

ここで自由入力形式にするにはValid Ifの数式を以下のようにします。もともとの数式に、AND( true, IN([_THIS]をくっつけるだけです。

AND( true, IN([_THIS], 大カテゴリー一覧[大カテゴリー] ))


すると、アプリ上の表示は自由入力になります。

 ↓ 直接入力


以上で完了です。


エラーメッセージのカスタマイズ方法(This entry is invalid)

デフォルトのエラーメッセージ

自由入力となるため、許可されていない値も入力することが可能になります。

このとき、許可されていない値を入力すると「This entry is invalid」というエラーメッセージが表示されます。


エラーメッセージのカスタマイズ

Valid Ifのエラーメッセージをカスタマイズするには「Data Validity」の「Invalid value error」に表示したい値(または値を返す数式)を入力します。


すると、アプリ上で指定した内容が表示されます。


注意点:Refのカラムは自由入力にできない(条件式は有効)

Valid Ifを設定しようとしているカラムのタイプがRefの場合、ANDとIN関数を使って自由入力にする数式を記述しても自由入力にすることはできません

通常と同じくプルダウンか選択形式の表示となります。



例えば以下のように、大カテゴリーカラムのタイプがRefだとします。


このとき、Valid Ifに自由入力となる数式を記述します。

AND( true, IN([_THIS], SELECT( 大カテゴリー一覧[KEY画像名用], LEN([大カテゴリー])=2 )))


この場合でも、アプリ上の表示はプルダウンとなります。しかもSELECTで条件式を使って絞り込みをしているにも関わらず、条件式が無視されてすべての要素が表示されます


このとき、条件式自体は有効なので、条件に合致しない値を選択するとエラーメッセージが表示されます


もちろん、ANDとIN外して、SELECTのみにすれば、条件に合致するリストのみが表示されます。

SELECT( 大カテゴリー一覧[KEY画像名用], LEN([大カテゴリー])=2 )





参考




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