Power AppsのIndex関数|テーブルのn番目を取り出す方法

FirstやLastでは取り出せない「3番目」「5番目」の要素を取り出したいとき、Index関数を使います。Splitと組み合わせると、区切り文字で分割した文字列の任意の部分を取り出せます。

Index関数の基本

Index関数は、テーブルから指定した行番号のレコードを返します。引数は2つです。

Index(テーブル, 行番号)

行番号は1始まりです。テーブルの1行目を取り出すIndex(テーブル, 1)はFirst(テーブル)と同じ結果になります。

Index(["A","B","C","D"], 3).Value
// 結果:C

Firstは先頭行、Lastは末尾行しか取れませんが、Indexは行番号を指定できるため、中間の任意の要素を取り出せます。

Splitと組み合わせる

Splitで文字列をテーブルに変換してからIndexで要素を取り出すパターンは、区切り文字で区切られたデータを扱うときに特に役立ちます。

// "東京/大阪/名古屋/福岡" の3番目を取り出す
Index(Split("東京/大阪/名古屋/福岡", "/"), 3).Value
// 結果:名古屋

SplitはValueという1列のテーブルを返すため、Indexの後に .Value をつけて文字列として取り出します。Split・First・Lastの使い方についてはこちらの記事をご覧ください。

実例3パターン

コレクションのn番目を取り出す

ボタンを押すたびに次の項目を表示するスライドショー的なUIで、現在のインデックスを変数で持ちながらIndexで表示内容を切り替えます。

// 変数 varIndex を 1 で初期化しておく
// 「次へ」ボタンのOnSelect
Set(varIndex, varIndex + 1);

// ラベルのText
Index(colSlides, varIndex).Title

コレクションの使い方についてはこちらの記事で詳しく解説しています。

SharePointリストの特定行を参照する

SharePointリストの先頭から数えてn行目のデータを取り出したい場面です。GalleryのSelectedを使わずにIndex指定でレコードを取り出せます。

Index(
    SortByColumns(社員リスト, "社員番号", Ascending),
    varTargetRow
)

ただし、SharePointリストにIndexを直接かけると委任の警告が出る場合があります。データ量が多い場合はCollectでコレクションに取り込んでからIndexを使うほうが安全です。委任についてはこちらの記事を参照してください。

ギャラリーで選択せずにn番目の行を操作する

ギャラリーを使わず、プログラムで特定行のデータを取得・編集したいケースです。たとえば「最新の申請を自動で選択状態にする」処理でIndexが活用できます。

// 日付降順でソートした先頭行を変数に格納
Set(
    varLatestRecord,
    First(SortByColumns(申請リスト, "申請日", Descending))
)

このケースではFirstで対応できますが、「最新から2番目」を取りたい場合はIndex(SortByColumns(...), 2)という書き方になります。

IndexとFirst・Lastの使い分け

関数取り出す位置行番号の指定
First先頭行のみ不要
Last末尾行のみ不要
Index任意のn番目必要(数値または変数)

単純に先頭・末尾を取るならFirst・Last、動的に位置を変えたい場合はIndexを使います。

まとめ

Index関数は、FirstとLastだけでは対応できない「n番目」を取り出す関数です。Splitと組み合わせてn番目の文字列を取り出す、コレクションをスライドショー的に操作する、といった場面で便利に使えます。

ギャラリーのSelected(選択行)を使う方法と比べて、Indexはプログラム側で行を制御できるのが強みです。ギャラリーの使い方はこちらの記事で解説しています。

Power Appsのその他のテキスト関数についての完全ガイドはこちらの記事をご覧ください

使い始めると、データ操作の幅が一気に広がります。ぜひ活用してみてください。

Xでフォローしよう