管理人がみんなに伝えたい!!と思った知識や学びを気ままに書いています(^^)

【簡単設定!】AppSheetで入力制限を設定する方法

【簡単設定!】入力制限を設定する方法

本記事はノーコードアプリ開発について全く知らなかった管理人が独学で勉強し、ここ大事!と感じた部分を記事にまとめています。

本ブログでは新UI画面で内容をまとめています。

新旧画面への切り替えは、下図を参考に該当アイコンをクリックしてください(^^)

新UI画面の説明

まずはじめに

本記事はこんな人におすすめ!!
  • Valid ifの基礎を勉強したい人
  • アプリを利用する人によって入力する値に制限を付けたい人
  • Valid ifに入力する関数の例を勉強したい人
本記事を読んで出来るようになること
  • Valid ifに関数を入力することで、アプリ開発者が欲しいデータを収集できる
  • Yes/NoとList の関数が理解できる

今回の記事は、AppSheetアプリに入力される値に制限を設ける設定に焦点を当てます。

アプリ開発者にとって、予期せぬデータが入力されることは、データの品質低下や後続の処理エラーに繋がることがあります。

しかし、この記事のような設定を導入すれば、想定外のデータを自動的に検知し、入力を弾くことが可能です。

内容的には中級者以上向けの話になりますが、ここに気づけるようになったあなたは、きっとアプリ開発に余裕が出てきた証拠!

私がよく使うValid ifに送る関数や設定を記事にまとめましたので、ぜひ参考にしてください(^^)

それでは勉強していきましょう!


Valid ifとは?

Valid ifのイメージ

Valid ifは、AppSheetエディターのDataペイン内、Columnタブから特定カラムの設定画面を開くと表示されます。

valid ifの場所

その中に「Data Validity(データの有効性)」というセクションがあり、そこに以下の2つの項目があります。

  • Valid if: 入力制限を判定するための関数を入力する場所です。
  • Invalid value error: 入力された値がValid ifで設定した条件を満たさなかった際に、ユーザーの画面に表示させるエラーメッセージです。

次に、このValid ifに入力が求められる関数のタイプを確認してみましょう。

valid ifの詳細

Valid ifに入力できる関数は、大きく分けて2パターンあります。

  1. 「はい」か「いいえ」で答えることができる Yes/No関数 (例: [数量] > 0ISNOTBLANK([商品名]) など)
  2. 入力可能な値を指定する List関数 (例: {"A", "B", "C"}テーブル名[カラム名] など)

まずは、この基本をしっかりと押さえてください。

AppSheetがどんなタイプの関数を求めているかを理解することが、AppSheet上達への近道です!

それぞれの関数で代表的なものをまとめました

参考記事

おすすめの入力制限

オススメの条件式

それでは、私がValid ifでよく使う設定を具体的に見ていきましょう。

今回検証に用いるテーブルの関係性は以下のとおりです。

データテーブルの説明

各テーブルのカラムは以下のように設定しています。

Validation
Validationシート
  • 入力者: ユーザーテーブルとRef関係を結びつけるカラム
  • 所属: [入力者].[所属]の関数で、入力者の所属情報を自動的に引っ張り出すためのカラム
  • 日付: Dateデータタイプのカラム
  • 入力制限の判定: Valid ifの効果を確認するためのカラム
ユーザー
ユーザーシート
  • 名前: Label値として表示させるカラム
  • email: Key値として設定するカラム
  • 所属: [入力者].[所属]の関数で情報を紐つけるためのカラム

それでは、これらの設定を使って具体的な入力制限の検証を始めていきましょう!


登録されているデータをリストとして表示させる

ユーザーテーブル

まず、設定が最も簡単な「入力してほしい値をリストとして提示する」方法を説明します。

この設定方法は非常にシンプルです。Valid ifに以下の形式で入力するだけです。

テーブル名[カラム名]

試しにValid ifユーザー[名前]を入力してみましょう。

入力制限の検証
関数入力前
関数入力前

「入力制限の判定」カラムは、この時点では任意の値を入力することが可能です。

関数入力後
関数入力後

ユーザー[名前]の関数をValid ifに入力すると、「入力制限の判定」カラムの入力値が、ボタン形式の選択肢として表示されるようになります。

💡 ポイント!

Valid ifへの入力は、あくまで入力制限です。そのため、表示された選択肢以外の新しい項目を増やすことはできません

もし、ユーザーが新規の選択肢を追加することを許可したい場合は、Valid ifではなくSuggested Valueにリストを送るようにしましょう。


日付カラムの入力値によって対象カラムの入力を制限させる

日付入力制限のイメージ

次に、データが入力される日付に基づいて、他のカラムの入力を制限する設定を作成してみましょう。

これにより、例えば将来の日付や過去の日付など、特定の期間外の入力を防ぐことができます。

用いる関数はEOWEEK()関数です!

参考記事

今回は、入力週の翌週水曜日以降の日付のみを許可する制限をターゲットに設定してみました。

Valid ifに入力する関数は、以下を用います。

[_THIS] >= (EOWEEK(TODAY()) + 4)
eoweek関数の入力

関数の解説:

  • TODAY(): 現在の日付を取得します。
  • EOWEEK(TODAY()): TODAY()が属する週の終わり(通常は日曜日)の日付を取得します。
  • EOWEEK(TODAY()) + 4: EOWEEK(TODAY())で取得した日付に4日を加算します。これにより、翌週の水曜日の日付が算出されます。(例:今日が2025年6月5日(木)の場合、EOWEEK(TODAY())は2025年6月8日(日)を返し、それに4日足すと2025年6月12日(水)となります。)
  • [_THIS]: 現在編集しているカラムの値を参照します。
  • [_THIS] >= ...: 編集中のカラムの値が、計算された「翌週水曜日」以降の日付である場合にTRUEを返します。

この関数は、今週末から4日を足した日(つまり来週の水曜日)以降の入力のみを許可する制限をかけています。

例えば、来週の月曜日以降にしたい場合は+2に、来週の金曜日以降にしたい場合は+6に変更すればOKです!

効果の検証

この設定を行った結果を見てみましょう。

入力日を弾く画面

例として、2025/06/12(来週の水曜日)より前の日付を入力しようとすると、入力値が弾かれます

入力成立の表示

関数の条件を満たす日付(来週の水曜日以降)であれば、入力を受け付けます。

このように日付に基づく入力制限は、特定の期間内のデータのみを受け付けたい場合に非常に有効です(^^)


文字数と特定の文字が含まれているかどうかを判定する

文字列の検証イメージ

次に、入力された値が特定の文字数であったり、特定の文字列を含んでいるか(または含んでいないか)を検証する入力制限を考えてみましょう。

こういった時に役立つ関数を挙げてみました。

  • LEN()関数: 文字列の文字数を数える関数
  • CONTAINS()関数: ある文字列の中に、特定の文字や単語が含まれているかを判定する関数
  • RIGHT()関数とLEFT()関数: 文字列の先頭や末尾から特定の文字数分の文字列を抽出する関数

別の記事でこれらの記事についてまとめています

参考記事

それでは、これらの関数を組み合わせて、Valid ifで検証してみましょう!

例1: 文字数と先頭の文字を制限する

Valid ifに以下の関数を入力します。

len関数とleft関数
AND(LEN([_THIS]) = 5, LEFT([_THIS], 1) = "9")

この関数は、「文字数が5かつ文字列の始めが"9"であること」を条件としています。

効果の検証
効果の検証1

文字列の始めが"9"でも、文字列が5文字以上であるためNGとなります。

効果の検証2

文字列が5文字でも、最初が"9"ではないためNGとなります。

効果の検証3

文字数が5、かつ文字列の始めが"9"である場合は、入力を受け付けてくれます(^^)

例2: 文字数と特定の文字を含まないことを制限する

もう1つ、別のパターンを試してみましょう。

Valid ifに以下の関数を入力します。

携帯番号入力制限
AND(LEN([_THIS]) = 11, NOT(CONTAINS([_THIS], "-")))

この関数は、「文字数が11かつ文字列の中にハイフン(-)を含めないこと」を条件としています。

例えば、電話番号や特定のコードを入力する際に、桁数を揃えつつ不要な記号の入力を防ぎたい場合に有効です。

効果の検証
入力エラーの画面
入力OKの画面

この設定により、携帯番号をハイフンありで入力すると弾かれますが、ハイフン無しで携帯番号を入力すると受け付けてくれます。

このように、LEN()CONTAINS()、そしてNOT()といった関数を組み合わせることで、ユーザーに特定の形式での入力を強制し、データの整合性を高めることができます(^^)


〇〇以上、〇〇以下を満たしているかを判定する

続いて、入力された数字が特定の範囲内にあるかを判定する入力制限を見ていきましょう。

これは、数量や点数など、数値データの入力精度を高めるのに役立ちます。

数字の大小を検証するイメージ

Valid ifには、AND()関数と比較演算子を組み合わせて、以下のように入力します。

関数の入力値
AND([_THIS] < 5, [_THIS] >= 0)

この関数は、「入力される数字が0以上、かつ5未満であること」を条件としています。

効果の検証
入力値の検証1

入力値が5(またはそれ以上)の場合、条件「5未満」を満たさないため、入力が弾かれます。

効果の検証2

一方、入力値が1のように0以上5未満である場合は、すべての条件を満たすため、入力値として受け付けてくれます。

このように、AND()関数を使うことで複数の数値条件を組み合わせ、より厳密な入力範囲を設定することが可能です。


アプリユーザーによって入力値を変更させる

ユーザー権限の付与イメージ

最後に、ユーザー属性に基づいて表示される入力項目を動的に変更する設定をしてみます(^^)

この種の動的な入力制御は、特定の状況下でユーザーに対して適切な選択肢や情報のみを提示するために有効です。

動的入力制御に活用される主要関数

AppSheetの表現言語には、入力項目の動的な制御を実現するための複数の関数が用意されています。

代表的な関数を以下に示します。

  • SELECT()関数: 指定された条件を満たすレコードから、特定のカラムの値をリストとして抽出します。
  • LIST()関数: 複数の指定された値を要素とするリストを生成します。
  • IF()関数: 単一の条件分岐を構築し、条件の真偽に基づいて2つの結果を返します。
  • IFS()関数: 複数の条件を順次評価し、最初に真となった条件に対応する結果を返します。これは、3つ以上の分岐ロジックを実装する際に特に有用です。

所属カラムに基づく選択肢の動的変更例

それではIFS()関数を入力して、ユーザーの「所属」カラムの値に基づいて、次に表示される選択肢を動的に変更する設定を検証してみましょう!

この設定は、Valid IfSuggested Valuesに適用されることが多いです。

入力した関数
IFS( [所属] = "開発部", LIST("A型", "B型", "O型"), [所属] = "営業部", LIST("天秤座", "山羊座", "魚座"), [所属] = "経理部", LIST("読書", "ドライブ", "キャンプ")
)

上記のIFS()関数を適用することで、AppSheetアプリケーションは以下のように動作します。

  • ユーザーが入力した[所属]の値が「開発部」である場合、当該入力項目には「A型」「B型」「O型」のリストが選択肢として提示されます。
  • [所属]が「営業部」である場合、選択肢は「天秤座」「山羊座」「魚座」のリストに切り替わります。
  • [所属]が「経理部」である場合、選択肢は「読書」「ドライブ」「キャンプ」のリストに変化します。
所属が開発部の場合
所属が開発部の画面

所属が開発部のAさんは、選択肢がA型、B型、O型になります。

所属が営業部の場合
営業部の入力画面

所属が営業部のBさんは、選択肢が天秤座、山羊座、魚座になります。

所属が経理部の場合
経理部の画面

所属が経理部のCさんは、選択肢が読書、ドライブ、キャンプになります。


まとめ

本記事では、AppSheetにおける入力制限の設定に焦点を当てて解説しました。

アプリ開発者にとって、予期せぬデータの入力は、データ品質の低下や後続処理におけるエラーのリスクを高める要因となります。

このような課題に対し、AppSheetの入力制限機能を適切に活用することで、アプリケーションへの入力データを自動的に検知し、不適切な値を排除することが可能となります。

本記事では、汎用性の高い設定例を中心にまとめましたが、この他にもたくさんのTIPSがあると思うので、面白い設定があれば記事を追加したいと思います。

応用を学びたい人はこちらの記事を参考にしてください

参考記事

記事内容について何かありましたらページ下にあるコメント欄からコメントをお願いします。

わかりにくかった部分や間違った情報などご指摘いただけると嬉しいです!

勉強お疲れさまでした(^^)

コメントを残す

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

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。