概要
「同じIDが何回も出てくるけれど、一番下(最新)のデータだけ取りたい」
「履歴表から“最後に一致した値”を取りたい」
こういうときに最強なのが XLOOKUP の検索方向 -1(下から上へ検索) です。
通常の XLOOKUP は「上から下へ検索」するため“最初の一致”を返しますが、
検索モードを -1 に変えるだけで、
下から上へ検索 → 最後に一致した値(最新)を返す
という動きに切り替わります。
基本の使い方(検索方向 -1)
書式
=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
最後の 検索モード に -1 を指定すると「下から上へ検索」になります。
最後に一致した値を取得する基本パターン
顧客IDの“最新の取引日”を取得する例
A列:顧客ID
B列:取引日
同じ顧客IDが複数行ある履歴表で、
E2 に入力した顧客IDの 最後(最新)の取引日 を取りたい場合:
=XLOOKUP(E2, $A$2:$A$100, $B$2:$B$100, "なし", 0, -1)
意味をかみ砕くと:
- E2 の顧客IDを
- A2:A100 を 下から上へ 探して
- 最初に一致した行の B列(取引日)を返す
- 見つからなければ「なし」
これで「最新の1件」だけを簡単に取得できます。
左方向検索でも“最後の一致”が取れる
XLOOKUP は検索範囲と戻り範囲を自由に指定できるため、
左方向でも問題なく“最後の一致”が取れます。
商品コード(右側)から商品名(左側)の“最後の一致”を取得
A列:商品名
B列:商品コード
=XLOOKUP(E2, $B$2:$B$100, $A$2:$A$100, "未登録", 0, -1)
B列を下から検索し、最後に一致した行の A列を返します。
入力が空欄のときは何も表示しない
検索値セル(E2)が空欄のときまで XLOOKUP を走らせると、
「未登録」や「なし」が並んで見づらくなります。
そんなときは IF と組み合わせます。
=IF(E2="","",
XLOOKUP(E2,$A$2:$A$100,$B$2:$B$100,"なし",0,-1))
応用:複数列の“最新行”をまとめて取得
A2:D100 に履歴データがあり、
E2 の顧客IDに一致する 最新の行全体 を取りたい場合:
=INDEX($A$2:$D$100,
XLOOKUP(E2,$A$2:$A$100,ROW($A$2:$A$100)-ROW($A$2)+1,"なし",0,-1),
SEQUENCE(1,4))
- XLOOKUP で「最新の行番号」を取得
- INDEX でその行の A〜D列をまとめて返す
という仕組みです。
よくあるつまずきと対策
検索範囲と戻り範囲の行数を必ず揃える
検索範囲:A2:A100
戻り範囲:B2:B100
のように、開始行・終了行を揃える必要があります。
完全一致(0)が標準なので安心
一致モードを省略しても完全一致になります。
VLOOKUP のように FALSE を書き忘れて事故る心配がありません。
“最後の一致”は検索モード -1 が必須
検索モードを省略すると「上から検索」になり、
“最初の一致”が返ってしまいます。
必ず 第6引数に -1 を指定してください。
例題
問題1: A2:A100 に顧客ID、B2:B100 に取引日があります。E2 の顧客IDに対して、最後に一致した取引日を F2 に表示してください。
=XLOOKUP(E2, $A$2:$A$100, $B$2:$B$100, "なし", 0, -1)
問題2: A2:A100 に商品名、B2:B100 に商品コードがあります。E2 の商品コードに対して、最後に一致した商品名(左方向)を F2 に表示してください。
=XLOOKUP(E2, $B$2:$B$100, $A$2:$A$100, "未登録", 0, -1)
問題3: E2 が空欄のときは何も表示せず、入力されているときだけ“最後に一致した取引日”を表示する式を G2 に書いてください。
=IF(E2="","",
XLOOKUP(E2,$A$2:$A$100,$B$2:$B$100,"なし",0,-1))
問題4: A2:A100 に顧客ID、C2:C100 に金額があります。E2 の顧客IDに対して、最後に一致した金額を F2 に表示してください。
=XLOOKUP(E2, $A$2:$A$100, $C$2:$C$100, "なし", 0, -1)
問題5: A2:D100 の履歴表から、E2 の顧客IDに一致する“最新の行全体”を F2:I2 に表示してください。
=INDEX($A$2:$D$100,
XLOOKUP(E2,$A$2:$A$100,ROW($A$2:$A$100)-ROW($A$2)+1,"なし",0,-1),
SEQUENCE(1,4))
まとめ
XLOOKUP の検索モード -1 を使うと、
「最後に一致した値(最新)」を一発で取得できます。
- 標準は“最初の一致”、-1 で“最後の一致”
- 左方向検索も自由
- 見つからない場合の値も簡単に指定できる
- 履歴表・ログ・取引データで大活躍
このパターンを覚えておくと、
「最新の1件だけ欲しい」という実務の定番ニーズにすぐ対応できるようになります。
