EnumList型で選べる値を条件によって動的に変える方法

Tips
AppSheetDataTipsデータ型

AppSheetで「複数選択可能なフィールド(EnumList)」を使っていると、次のようなニーズが出てきませんか?

「A部門の人にはA関連の項目だけを選ばせたい」
「ステータスが完了のときだけ、特定の項目を除外したい」
「ユーザーの役割によって選択肢を変えたい」

この記事では、EnumListの「選択肢」を条件に応じて変化させる方法を、例とともに分かりやすく解説します。


想定シナリオ

  • タスク テーブルにある 担当部署 列(EnumList)で複数部署を選ばせる
  • ただし、ユーザーの所属(ユーザー[部署])によって選べる値を制限したい

基本設定:EnumList列の作成

  1. テーブル:タスク
  2. 列:完了部署(Type: EnumList / Base Type: Text)
  3. Allow other values: 必要に応じて ON(ユーザー入力を許可)
  4. Values に式を指定(次のセクション参照)

例1:所属部署によって選択肢を制御する

目的: ログインユーザーが属する部署で選択候補を変更したい

テーブル:ユーザー

メールアドレス氏名部署
yamada@yourcorp.jp山田 太郎開発部
tanaka@yourcorp.jp田中 花子営業部
suzuki@yourcorp.jp鈴木 次郎開発部
sato@yourcorp.jp佐藤 三郎管理部
  • ログインユーザーが開発部なら{“開発” ,”運用”, “インフラ”}
  • ログインユーザーが営業部なら{“営業”}
  • ログインユーザーが管理部なら{“総務”, “労務”, “経理”}
SWITCH( 
  ANY(SELECT(ユーザー[部署], [メール] = USEREMAIL())),  
  "開発部", LIST("開発", "運用", "インフラ"), 
  "営業部", LIST("営業"), 
  LIST("総務", "労務", "経理")
)

🔍 この式は「ユーザー」テーブルと連携して、現在のログインユーザーの部署に応じてEnumListの選択肢を出し分けます。


例2:ある条件(例:タスクの種類)によってリストを制御

IF(
[タスク種別] = "点検", LIST("点検部", "品質管理部"), LIST("生産部", "工程管理部")
)

🔍 別フィールドの値に応じて選択肢を変更できます。


応用例:ログインユーザーが属する部署のメンバーを選ばせる

SELECT(ユーザー[氏名], [部署] = ANY(SELECT(ユーザー[部署], [メール] = USEREMAIL())))

よくあるつまずきポイント

症状原因解決策
値が表示されないValid_If の式がリストになっていないLIST() または SELECT() で返す
「Allow other values」が効かない無効にされているAllow other values を ON にする
重複が発生複数の条件で同じ値を追加しているUNIQUE() を使って重複を除去する

Use Case

条件
特定の値だけ除外したいSELECT(..., NOT(IN(...)))
特定条件のときだけ追加したいIF(..., [選択肢], LIST())
常に一定の値を追加したい[値] + LIST("常時含めたい項目")

関連してよく使う項目

技術説明
SELECT()リストを条件で取得
IF() / SWITCH()条件に応じた選択肢の切り替え
IN() / NOT()含む/含まないを判定
[_THISROW]現在行の値に基づいた制御が可能