AppSheetでText型のカンマ区切りデータをリスト化し、ユニークな選択肢を生成する正しい方法
AppSheetのEnum
やEnumList
型の選択肢を動的に生成したい場合、元のデータがText
型でカンマ区切りの文字列として保存されていると、そのままではリストとして扱われず、連結された文字列として認識されてしまうことがあります。
例えば、「ユーザー」テーブルのグループlist
カラムがText
型で、以下のようにデータが格納されているとします。
userID | 社員名 | グループlist |
U001 | 佐藤 | 営業部,経理部 |
U002 | 田中 | 開発部 |
U003 | 山田 | 営業部,広報部 |
U004 | 鈴木 | 人事部,総務部 |
このとき、別のテーブルの担当グループ
カラム(Enum
型など)で、これらのユーザーが所属するすべてのユニークなグループ名(例: {"営業部", "経理部", "開発部", "広報部", "人事部", "総務部"}
) を選択肢として表示したいとします。
{“営業部,経理部” , “開発部” , “営業部,広報部” , “人事部,総務部”}
解決策:SELECTとSPLITの組み合わせ
この課題を解決する最も直接的で簡潔な方法は、ご指摘いただいた通り、SELECT
関数とSPLIT
関数を組み合わせて使用することです。
以下の式を、あなたのEnum
またはEnumList
型カラムの**Suggested values
**に設定してください。
UNIQUE(
SPLIT(
SELECT(ユーザー[グループlist], TRUE),
","
)
)
この式は、以下のステップで動作し、ご希望通りのユニークなグループ名のリストを生成します。
SELECT(ユーザー[グループlist], TRUE)
:- まず、AppSheetは「ユーザー」テーブルの全ての行から、
[グループlist]
カラムの値(例えば"営業部,経理部"
や"開発部"
)を抽出します。 - このとき、
SELECT
関数はこれらのテキスト値を一つのリストとして集約します。結果は、LIST("営業部,経理部", "開発部", "営業部,広報部", "人事部,総務部")
のようになります。まだ、各要素はカンマ区切りの「長いテキスト」のままです。
- まず、AppSheetは「ユーザー」テーブルの全ての行から、
SPLIT(..., ",")
:- ここが重要なポイントです。
SPLIT()
関数は、第1引数にテキストを、第2引数に区切り文字を指定します。 - 実は、AppSheetの
SPLIT()
関数は、第1引数に「テキストのリスト」が渡された場合、そのリストの各要素(それぞれのテキスト)に対してSPLIT
処理を適用し、その結果生成されるすべてのリストを「平坦化」して一つの大きなリストとして返します。 - 例えば、
SPLIT(LIST("営業部,経理部", "開発部"), ",")
を実行すると、"営業部,経理部"
が{"営業部", "経理部"}
に、"開発部"
が{"開発部"}
にそれぞれ分割され、- 最終的にこれらが平坦化されて
{"営業部", "経理部", "開発部"}
というリストが生成されます。
- したがって、
SPLIT(SELECT(ユーザー[グループlist], TRUE), ",")
の結果は、{"営業部", "経理部", "開発部", "営業部", "広報部", "人事部", "総務部"}
のような、すべての個々のグループ名が要素となった平坦なリストになります。
- ここが重要なポイントです。
UNIQUE(...)
:- 最後に、
UNIQUE()
関数がこの平坦なリストから重複するグループ名を取り除き、ユニークなグループ名だけのリスト(例:{"営業部", "経理部", "開発部", "広報部", "人事部", "総務部"}
)が完成します。
- 最後に、
{“営業部” , “経理部” , “開発部” , “広報部” , “人事部” , “総務部”}
まとめ
AppSheetでText
型のカンマ区切りデータをリストとして扱い、そこからユニークな選択肢を生成したい場合は、以下の簡潔な式で実現できます。
UNIQUE(
SPLIT(
SELECT(ユーザー[グループlist], TRUE),
","
)
)