Excel関数 逆引き集 | 最後に一致した値 → XLOOKUP(検索方向:-1)

Excel VBA Excel
スポンサーリンク

概要

「同じ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件だけ欲しい」という実務の定番ニーズにすぐ対応できるようになります。

タイトルとURLをコピーしました