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() との併用で、より高度なロジックも実現できます
