DESIGN / CODE / INFRA / AI

解説

XLOOKUPで同じIDが二行あるとどっち?最初・最後と未一致を分けよう

完全一致で検索するXLOOKUPの例。重複IDを先頭から探す場合と末尾から探す場合、見つからないときの値を分けて確認する。

XLOOKUPで同じIDが二行あるとどっち?最初・最後と未一致を分けよう
保存リストを見る →
この記事の道しるべ 5項目

IDから金額を取り出すXLOOKUPを使ったら、同じIDの別の行が返ってきた。IDが重複する表では、どこから探すかも結果に関わるよ。

このページはGoogleスプレッドシートの数式を入力できる人向け。普通のシート上のXLOOKUPを使い、完全一致・検索の向き・未一致を架空の三行で比べる。BigQuery向けのXLOOKUPとは分けて扱うよ。

三行の検索表を用意する

A1にID、B1に金額と入力し、A2:B4を次にする。

行 ID 金額
2 A101 100
3 A102 200
4 A101 350

この表ではA101が二回ある。返る金額が違うので、先に「一つだけ選ぶのか」「重複をエラーとして確認するのか」を決めたいね。XLOOKUPを置くだけで、IDが一意であることは保証されないよ。

完全一致で先頭から探す

E2にA101を入力し、F2へ次の数式を入れる。

=XLOOKUP(E2, A2:A4, B2:B4, "未登録", 0, 1)

検索キーはE2、探す場所はA2:A4、取り出す場所はB2:B4。第五引数の0は完全一致、第六引数の1は先頭から末尾へ探す指定だよ。

この条件なら、最初のA101に対応する100が結果になる。大きい金額を選んだり、二行を合計したりする関数ではないんだ。

末尾から探すなら検索モードを-1へ

=XLOOKUP(E2, A2:A4, B2:B4, "未登録", 0, -1)

この例では最後のA101に対応する350になる。第五引数の0はそのままで、第六引数の検索の向きだけを変えているよ。

検索キー 先頭からの1 末尾からの-1
A101 100 350
A102 200 200
A999 未登録 未登録

最後の行が必ず最新の記録とは限らない。更新日時で決めたいなら、その日時と並び順の条件を別に揃えよう。表を並べ替えると、先頭・末尾に当たる行も変わるよ。

未一致と、ほかのエラーを混ぜない

第四引数の未登録は、完全一致するIDが見つからない場合の表示。第四引数を省略した場合の既定は#N/Aだよ。

これは表のすべての不具合を隠すための設定ではない。範囲の大きさが揃っていないなど、別の原因まで未登録と考えないでね。今回の縦方向の例では、検索範囲と結果範囲の行数を同じにしている。

また、空欄の金額や0という結果を、IDが見つからないことと同じに扱わないようにしよう。まず一致した行があるか、次に取り出す値は何かを確認したいね。

数字の引数を取り違えない

一致モードの-1と、検索モードの-1は役割が違う。ここで使ったのは第六引数の-1だけ。第五引数は完全一致の0に固定しているので、近いIDへ自動で置き換える例ではないよ。

検索モードには並べ替え条件が必要な別の値もある。数式を速そうな値へ変更する前に、公式の前提を確認しよう。この例では先頭・末尾の二方向だけを扱っている。

練習を終えるときは、出力側のF列の式と練習用の検索キーだけを消し、検索表は確認用に残せる。実データのIDを消して試す必要はないよ。

2026年10月29日にGoogle公式の完全一致・検索方向・未一致の条件を確認し、この三行の参照結果を独立のスクリプトで照合した。実際のSheets画面や数式を実行したとの主張ではないよ。UNIQUEの比較単位、IFERRORとIFNAも関連するね。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。