AppSheetのデータ式でよく使われる INDEX()
関数
これは、リストから特定の位置の値を取得するのにとても便利な関数です。
この記事では、基本的な構文から応用事例までを丁寧に解説します。
INDEX関数とは?
INDEX(list, position)
- list:対象となるリスト(テーブルの列、SPLIT関数の結果など)
- position:取得したい位置(1始まり)
基本の使い方
例1:単純なリストから値を取り出す
INDEX(LIST("A", "B", "C"), 2)
結果 → B
例2:列から2件目を取り出す
INDEX([列名], 2)
ただし、通常 [列名]
は単一値になるため、このままでは使えません。
リストを取得するには SELECT()
や SPLIT()
と組み合わせるのが基本です。
例3:複数行のテキストから1行目を取り出す
外部APIなどで取得した改行含みのレスポンスから、特定の行を取り出したい場合
INDEX(SPLIT([response],
), 2)
→ [response]
が以下だった場合
番号:1234-6789-0000-1111
番号:1111-1234-2222-3333
番号:2222-6789-4444-5555
結果 → 番号:1111-1234-2222-3333
例4:SELECT()との併用で特定条件の行を取得
INDEX(SELECT(Users[Email], [Role] = "管理者"), 1)
Users
テーブルで Role = "管理者"
の1番目の Email
を取得
ただしSELECTの結果が0件の場合はエラーになります。
ANY(SELECT(Users[Email], [Role] = "管理者"))
であれば問題なくエラーになりません。
例5:フォーム内で1件目の選択肢を初期値に
INDEX(SELECT(商品[商品名], [カテゴリ] = "文房具"), 1)
[カテゴリ] = "文房具"
の[商品名]から最初の1件を取得
応用:SPLIT, SUBSTITUTEとの組み合わせで柔軟な整形処理
TRIM(SUBSTITUTE(INDEX(SPLIT([response],
)), 1), "番号:", ""))
結果 → 1111-1234-2222-3333
→ 改行で分割 → 1行目だけ取得 → 不要なラベルを除去 → 不要な空白があればトリム
こうした複合処理で入力データを整形できます。
注意点
ポイント | 説明 |
---|---|
インデックスは1から始まる | INDEX(list, 0) や INDEX(list, -1) はエラーになります |
空のリストには注意 | SELECT() などが空リストの場合、INDEX() もエラーになる可能性があります |
配列要素がTextでない場合もある | SPLIT() 結果が [text] ではなく [number] の場合は型に注意 |
まとめ
目的 | 式例 |
---|---|
文字列から最初の行だけ取得 | INDEX(SPLIT([response], , 1) |
リストの2番目を取得 | INDEX(LIST("A", "B", "C"), 2) |
条件に合う最初のメールを取得 | INDEX(SELECT(Users[Email], [Role]="管理者"), 1) |
商品カテゴリでの初期値選定 | INDEX(SELECT(商品[商品名], [カテゴリ]="文房具"), 1) |
おすすめの活用場面
AppSheetでの文字列処理を柔軟に扱える INDEX()
関数SPLIT()
や SUBSTITUTE()
との併用で、より高度なロジックも実現できます