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

【永久保存版】AppSheetで覚えておくべきList関数

【永久保存版】appsheetで覚えておくべきList関数

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

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

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

新UI画面の説明

まずはじめに

本記事はこんな人におすすめ!!
  • AppSheetで最低限覚えておきたいList関数が知りたい人
  • リスト型のデータとは何かを知りたい人
本記事を読んで出来るようになること
  • リストの作成方法
  • リストを作成する関数が求める引数の渡し方が分かる

AppSheetにおけるアプリ開発において、「リストを返す関数」の理解は不可欠です。

この概念の習得には困難を伴うことがありますが、特にその中でも中核をなすのがSELECT()関数です。

この関数は、AppSheet初心者にとって特に難解に感じられる傾向があります。

本記事では、SELECT()関数を軸に、リストを扱う上で知っておきたい大切な考え方や関連関数を幅広くご紹介していきます。これらのリスト型関数を使いこなせるようになれば、AppSheetでのアプリ開発の可能性はぐっと広がります。

ぜひこの記事を参考に、AppSheetの知識をさらに深めていきましょう(^^)


「リスト」の入力が求められる場面を理解しよう

listとは

まず最初に、AppSheetで「リスト」の入力が求められるのはどのような時なのかを把握しておきましょう。

結論から言うと、主にユーザーに値の入力制限を設けたり、入力補助として「おすすめの値」を提供したりしたい場合にリストを使用します。

入力制限(Valid if)
Valid ifの画面

AppSheetには、ユーザーが入力するデータに特定の制限を設ける機能(Valid ifなど)があります。

これは、アプリの作成者が「このカラムには、これらの値しか入力してほしくない」という意図がある場合に活用します。

このような入力制限を設定する際、具体的に「入力してほしいデータ」として、リスト形式のデータを送ることが可能になります。ユーザーはそのリストの中からしか値を選択できなくなるため、データの整合性を保ち、誤入力を防ぐことができます。

入力補助(Suggested values / Auto-compute > Initial valueなど)
Suggested valueの説明

AppSheetの入力フィールドでは、ユーザーへの入力補助としてリストを活用する場面もあります。

これは「Suggested values(提案値)」や「Auto-compute > Initial value(初期値)」といった設定で利用されます。

このカラムにリストを用意することで、ユーザーに対して「おすすめの値」として選択肢を提示することが可能になります。

ただし、これはあくまで「おすすめ値」や「提案値」です。ユーザーは提示されたリストから選ぶだけでなく、必要であれば新しい値を自分で入力して登録することも可能です。

リスト入力を識別するポイント

AppSheetでリストを送ることが可能かどうかは、以下の画像の赤矢印部分(AppSheetのエディター画面)を見れば簡単に判別できます(^^)

リストを入力できる場所

リスト型関数の定義と代表的な作成方法

list expressionとは

次に、「リスト関数」の定義を確認し、どのような方法でリストを作成できるのかを見ていきましょう。

リスト関数とは、その名のとおり、リスト形式のデータ(値の集合)を使用したり、新しく生成したりする関数を指します。

AppSheetで作成できるリストは多岐にわたります。

例えば、Number型(数字のリスト)、Email型(メールアドレスのリスト)、特定の列の値(カラム値のリスト)などがあります。ただし、重要な点として、一つのリストは必ず一つのデータタイプ(型)の値のみを集めたものになります。異なるデータタイプが混在することはありません。

代表的なリストの作成方法は、以下の5つです。

  • 直接リストを作成する
  • データタイプをEnumlistに設定する
  • データタイプRefの特性を利用する
  • テーブル/カラム値の関係から作成する
  • 関数に引数を渡して作成する

それでは、それぞれの方法について順番に詳しく見ていきましょう。


直接リストを作成する方法

直接リストを作成

リストを作成する一つ目の方法は、関数などを使わずに直接リストの要素を記述するものです。

具体的な方法は以下の2通りです。

中括弧 { } でくくる

最もシンプルにリストを作成する方法です。

リストに含めたい値を中括弧 {} で囲み、複数の値がある場合はカンマ , で区切ります。

例: {"りんご", "バナナ", "オレンジ"} 例: {10, 20, 30}

LIST()関数を使用する

LIST()関数を用いることでも、直接リストを作成できます。

括弧 () の中にリストに含めたい値をカンマ , で区切って入力します。

LIST()関数の使い方: LIST(value1, value2, ..., value n)

list関数の説明

ポイント:

  • 括弧の中の値はカンマで区切ります。
  • リスト内の値は全て同じデータタイプである必要があります。

使用例:

例えば、データの入力値に制限をかけたい場合を想定してみましょう。

あるカラムのValid if設定にLIST(1, 2, 3)と入力すると、ユーザーはそのカラムに対して半角の1、2、または3のいずれかの値しか選択・入力できなくなります。


データタイプをEnumlistに設定する

データタイプをenumlistにする

リストを作成する二つ目の方法は、AppSheetにデータを読み込んだ際に必ず行う、カラムのデータタイプ設定を利用するものです。

設定方法は非常に簡単で、該当するカラムの設定画面からデータタイプをEnumlistにするだけです。

Enumlistは、あらかじめ定義された複数の選択肢(リスト)の中から、ユーザーが一つまたは複数を選択できるようにするデータタイプです。

この設定を行うことで、AppSheetが自動的にドロップダウンリストやチェックボックスなどの形式で、指定した選択肢を表示してくれます。

Enumlistの使い方はこちらの記事で詳しく学べます

参考記事

データタイプRefの特性を利用する

データイプrefの説明

3つ目の方法は、先ほどのEnumlistと同様に、データタイプの設定を活用するものです。

AppSheetでは、複数のシート(テーブル)間でデータに親子関係を持たせることが可能です。

この親子関係をRef(参照)データタイプで設定すると、親テーブル(参照元となるシート)に[Related XXXs]という仮想カラム(Virtual Column: VC)が自動的に作成されます。

この[Related XXXs]という仮想カラムのデータタイプは、常にリスト型として生成されます。

この特性を利用することで、関連する子データのリストを簡単に取得・表示することが可能になります。

AppSheetでアプリ開発をするならRef機能については学んでおきましょう

参考記事

テーブル名とカラム名の関係からリストを作成する

テーブル-カラム名からリストを作成

AppSheetで最もシンプルかつ直感的にリストを作成する方法の一つが、テーブル名とカラム名を直接組み合わせて指定する方法です。

入力例:

例えば、シート名が「ユーザー」で、その中に「email」というカラム(列)がある場合を考えてみましょう。

リストの作り方

ユーザー[email]

と入力すると、AppSheetは「ユーザー」シートの「email」カラムに含まれるすべての値をリストとして取得します。

返り値の例:

aaa@gmail.com, bbb@gmail.com, ccc@gmail.com

これはAppSheetにおいて、リストを作成する最も基本的で簡単な構文です。

後ほど詳しく解説するSELECT()関数でも頻繁に登場する形なので、必ず覚えておきましょう!


関数に引数を渡してリストを作成する

最後に、特定の関数に引数(入力値)を渡すことでリストを生成する方法をご紹介します。

リストを作成する関数は数多く存在しますが、ここでは私がこれまでに実際に使用したことがある関数を厳選してピックアップしました。

これら以外にも関数は存在しますが、まずは以下の関数群を最低限覚えておけば、多くの場合で困ることはないでしょう。

それでは、順番に見ていきましょう(^^)


INTERSECT()関数

INTERSECT()関数は、二つのリストに共通して含まれる要素を抽出して、新たなリストとして返します。

INTERSECT()関数の使い方

INTERSECT(list1, list2)

  • list1: 1つ目のリストを指定します。
  • list2: 2つ目のリストを指定します。
intersect関数の説明

この関数は、list1list2の両方に存在する項目のみを抽出し、その結果をリストとして返します。

INTERSECT()関数の返り値例:

関数の入力値返り値
INTERSECT(LIST(1,2,3),LIST(2,3,4))2,3
INTERSECT(仕事[対応者],LIST(aaa@gmail.com))[対応者]カラムにaaa@gmail.comがいる場合
そのメールアドレスを持つデータをリストで返す

ユースケース:

INTERSECT()関数は、例えばAppSheetのAutomation機能において、複雑な条件を持つメールの宛先を絞り込みたい場合に有効です。

複数の条件で対象となるリストを個別に作成し、それらをINTERSECT()関数で結合することで、最終的な宛先リストを正確に限定することが可能になります。


LIST()関数

LIST()関数は、指定した複数の値をまとめて一つのリストとして生成します。

LIST()関数の使い方

LIST(value1, value2, ..., value n)

  • 括弧の中にリストに含めたい値をカンマ , で区切って入力します。
  • 重要なポイントとして、リスト内のすべての値は同じデータタイプである必要があります。
list関数の説明

この関数は、すでに本記事の「直接リストを作成する方法」の項目でも簡単に触れていますので、詳細な説明は割愛します。


SELECT()関数

SELECT()関数は、AppSheetにおいて最も強力で汎用性の高い関数の一つです。

特定の条件に基づいて、指定したデータセットから値のリストを抽出するために使用されます。

SELECT()関数の使い方

SELECT(dataset name[column name], select-row?, [, distinct-only?])

dataset name[column name] (第一引数):

リストとして値を取得したい対象を指定します。具体的には、テーブル名またはスライス名と、その中のカラム名を組み合わせたリストを指定します。

例: Orders[ProductName](「Orders」テーブルの「ProductName」カラムの値のリスト)

select-row? (第二引数):

第一引数で指定されたリストの各行に対して適用されるフィルター条件式を指定します。この条件式は、各行のデータが抽出対象として適切であるか否かをTRUEまたはFALSEで判断できる形式でなければなりません。

distinct-only? (第三引数):

オプションの引数です。取得するリストに重複した値を含めるかどうかTRUE(重複を除外)またはFALSE(重複を許容)で指定します。省略した場合はFALSEとして扱われます。

  • SELECT()関数の重要性

このSELECT()関数は、AppSheetでアプリを開発する上で避けては通れない最重要関数です。

その汎用性は非常に高く、アプリのあらゆる場面で活用されます。

冗談抜きで、この関数を使いこなせるようになれば、AppSheetにおけるデータ操作の大部分をカバーできるようになります。もし私が今からAppSheetの関数を学び直すとしたら、間違いなくこのSELECT()関数から集中的に学習します。

この関数を使いこなせるかでアプリの完成度は大きく変わります

参考記事


SORT()関数とTOP()関数

これらの関数は単体で使うことは稀ですが、他の関数と組み合わせることで、リストから任意の値を効率的に抽出する際に非常に役立ちます。

SORT()関数の使い方

SORT()関数は、指定されたリストの要素を昇順または降順に並べ替えます。

SORT(list[, descending?])

  • list (第一引数): 並べ替えたいリストを指定します。
  • descending? (第二引数): オプション引数です。TRUEを指定すると降順(大きい順)に、FALSEを指定するか省略すると昇順(小さい順)に並べ替えます。
sort関数の説明
TOP()関数の使い方

TOP()関数は、リストの先頭から指定した数の項目を抽出します。

TOP(list, how-many)

  • list (第一引数): 値を取り出したいリストを指定します。
  • how-many (第二引数): リストから返される項目(要素)の数を指定します。
top関数の説明

組み合わせ例:成績トップ3の取得

せっかくなので、SORT()関数とTOP()関数を組み合わせる例を考えてみましょう。

生徒名簿の仮データ

例えば、生徒名簿にテストの点数をデータとして管理するテーブルがあるとします。

このデータから成績上位3人の点数を取得したい場合、以下のように入力します。

TOP(SORT(生徒名簿[点数], TRUE), 3)

この関数は、以下のように動作します。

  • SORT(生徒名簿[点数], TRUE): まず、生徒名簿テーブルの[点数]カラムからすべての点数を取得し、TRUEが指定されているので降順(高い点数から低い点数へ)に並べ替えます
  • TOP(..., 3): 次に、並べ替えられた点数のリストに対し、TOP()関数が先頭から3つの値を取り出します。

もし点数が上図だった場合、返り値は{97, 96, 94}となります。


まとめ

今回は、AppSheetにおけるリスト型関数について解説しました。

リスト操作に困った時に私がよく言うのは、「困ったらとりあえずSELECT()関数を使ってみよう!」ということです。

身も蓋もないように聞こえるかもしれませんが、実はこれが、覚えることを最小限に抑えつつ多くの問題を解決する秘訣だったりします。

リスト型関数は、引数の渡し方など、基本的な考え方が共通しているものが多いです。

今回ご紹介した関数以外にもありますが、まずは「こんな関数があったな」とざっくりと覚えておくだけで、いざという時に役立つはずです。

リスト型関数を使いこなすことで、AppSheetアプリの柔軟性と機能性は格段に向上します。

ぜひ今回の内容を参考に、皆さんのAppSheetスキルをさらに磨いていきましょう!

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

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

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

AppSheetで覚えておきたい関数についてまとめています

参考記事

2 COMMENTS

かりゅう

こんにちは。
あなたのおかげで解決した課題がいくつもあります。
ありがとうございます。

ですが、あと一つどうしても解決したい課題があります。
enumlistで選択する項目をEnumList で複数選択した項目で絞り込みをかけたいです。

sort(select(Aシート[リストID],and(if(isnotblank([大分類]),[大分類]=[_thisrow].[大分類],true),if(isnotblank([中分類]),[中分類]=[_thisrow].[中分類],true))),true)

上記の大分類は1項目で良いのですが、中分類は複数項目で絞り込みたいです。

関数や説明が上手くできておらず申し訳ありません。
ぜひ解決していただきたいです。

返信する
k

コメントありがとうございます(^^)
直前にEnumlistで選択した項目に該当するリストを、次の入力項目に反映させたいという悩みですね。
以下のダミーデータで検証しました。(リスト用のシートを別に用意したほうがいいです)
○Aシート(シート名):Key値はリストID
リストID 大分類 中分類
A 営業部 男性
B 営業部 男性
C 総務部 男性
D 人事部 女性
E 製造部 女性
F 開発部 女性

1.大分類をEnumlist(Enumでも可)、Suggested valueにunique(Aシート[大分類])と入力
2.中分類をEnumlist、Suggested valueにunique(select(Aシート[中分類], in([大分類], [_thisrow].[大分類])))と入力

これで例えば営業部と総務部の2つを選べば中分類は男性のみ、ここに製造部を加え3つにすると中分類は男性と女性の2つが表示されます(^^)

返信する

コメントを残す

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

CAPTCHA



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