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),
","
)
)

