doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

【Excel】部分一致で「最後の一致セル」を取得する4つの方法【全バージョン対応】

スポンサーリンク


【Excel】部分一致で「最後の一致セル」を取得する4つの方法【全バージョン対応】

「VLOOKUPで検索したら、最初にヒットしたものしか取れなかった…」

そんな経験はありませんか?複数の一致候補がある中で一番最後(最新)のデータを取り出したいのに、Excelの標準的な関数では最初の一致しか返せず、途方に暮れてしまうケースは意外と多いです。

この記事を読み終えると、部分一致で最後の一致セルを取得する4つの方法を習得できます。お使いのExcelのバージョンに関係なく使える方法を揃えていますので、自分の環境に合った数式をそのままコピーして使ってみてください。


この記事で使うサンプルデータ

以下のA列データを前提に解説します。

A列(商品名)
2 りんごジュース
3 みかんゼリー
4 りんごタルト
5 ぶどうジュース
6 りんごパイ

目標:「りんご」を含む最後の商品名 → りんごパイ を取得する


どの方法を選べばいい? まず確認しよう

方法を詳しく見る前に、自分に合う方法を選ぶための簡単な判断基準を示します。

Excel 2021 / Microsoft 365 を使っている
 └→ 方法①(XLOOKUP版)← 最も直感的でおすすめ

Excel 2010〜2019 を使っている
 ├→ 方法②(LOOKUP版)← 最もシンプル・おすすめ
 └→ 方法③(AGGREGATE版)← エラー制御を細かくしたい場合

Excel 2007 など古いバージョン / 配列数式が使える環境
 └→ 方法④(INDEX+MATCH配列版)

迷ったら方法②(LOOKUP版)を選んでください。最も短い数式で、Excel 2007以降のすべてのバージョンで動作します。


方法①:XLOOKUP + SEARCH(Excel 2021 / M365向け)

数式

=XLOOKUP(1,
  (ISNUMBER(SEARCH("りんご", A2:A6))) *
  (ROW(A2:A6) = MAX(ISNUMBER(SEARCH("りんご", A2:A6)) * ROW(A2:A6))),
  A2:A6)

仕組みの解説

  1. SEARCH("りんご", A2:A6) → 各セルで「りんご」が何文字目にあるかを返す(なければエラー)
  2. ISNUMBER(...) → エラーを FALSE、一致を TRUE(数値として1)に変換
  3. MAX(ISNUMBER(...) * ROW(...)) → 部分一致した行の中で最も大きい行番号を取得
  4. ROW(A2:A6) = MAX(...) → その最大行番号と一致する行だけを TRUE にする
  5. XLOOKUP(1, ..., A2:A6) → ①と④をかけ合わせ、1 になる(=最後の一致)の行の値を返す

一致しない場合のエラー対策(推奨):

=IFERROR(XLOOKUP(1,
  (ISNUMBER(SEARCH("りんご", A2:A6))) *
  (ROW(A2:A6) = MAX(ISNUMBER(SEARCH("りんご", A2:A6)) * ROW(A2:A6))),
  A2:A6), "一致なし")

方法②:LOOKUP + SEARCH(全バージョン対応・最もシンプル)

数式

=LOOKUP(2, 1/(ISNUMBER(SEARCH("りんご", A2:A6))), A2:A6)

仕組みの解説

一見わかりにくいですが、LOOKUPの「仕様を逆手に取った」古典的テクニックです。

  1. SEARCH(...) → 一致位置またはエラーの配列を生成
  2. ISNUMBER(...)TRUE(1)または FALSE(0)の配列に変換
  3. 1/ISNUMBER(...) → TRUEの行は 1、FALSEの行は #DIV/0! エラーになる
  4. LOOKUP(2, ...) → 配列中に 2 は存在しないため、LOOKUPは「2以下の最大値」を探す仕様により、エラーをスキップしながら最後の 1 の位置の値を返す

この「存在しない値を検索させて最後の有効値を取る」のがこの数式のポイントです。

エラー対策付き:

=IFERROR(LOOKUP(2, 1/(ISNUMBER(SEARCH("りんご", A2:A6))), A2:A6), "一致なし")

✅ Excel 2007以降で動作。配列数式(Ctrl+Shift+Enter)不要で最もコンパクト。


方法③:INDEX + AGGREGATE + SEARCH(Excel 2010以降)

AGGREGATE はあまり知られていませんが、「エラーを自動で無視しながら集計できる」非常に強力な関数です。配列数式を使わずにエラーを除外した計算ができる点が魅力です。

数式

=INDEX(A2:A6,
  AGGREGATE(14, 6,
    (ROW(A2:A6) - ROW(A2) + 1) / ISNUMBER(SEARCH("りんご", A2:A6)),
    1))

仕組みの解説

  1. ROW(A2:A6) - ROW(A2) + 1 → 相対行番号(1〜5)を生成
  2. ISNUMBER(SEARCH(...)) → 一致しない行は FALSE(0)になる
  3. 相対行番号 / ISNUMBER(...) → 不一致行はゼロ除算エラー(#DIV/0!)になる
  4. AGGREGATE(14, 6, ..., 1) → 第1引数14はLARGE相当、第2引数6はエラー無視。エラーを除いた中で最大の行番号(=最後の一致行)を取得
  5. INDEX(A2:A6, ...) → その行番号の値を返す

エラー対策付き:

=IFERROR(INDEX(A2:A6,
  AGGREGATE(14, 6,
    (ROW(A2:A6) - ROW(A2) + 1) / ISNUMBER(SEARCH("りんご", A2:A6)),
    1)), "一致なし")

✅ Excel 2010以降で動作。Ctrl+Shift+Enter不要


方法④:INDEX + MATCH の配列数式(Excel 2007以降)

数式(Ctrl+Shift+Enter で確定)

=INDEX(A2:A6,
  MATCH(1,
    ISNUMBER(SEARCH("りんご", A2:A6)) *
    (ROW(A2:A6) = MAX(ISNUMBER(SEARCH("りんご", A2:A6)) * ROW(A2:A6))),
    0))

ロジックは方法①と同じですが、XLOOKUPの代わりにINDEX+MATCHを使います。数式入力後に必ずCtrl+Shift+Enterで確定してください。数式バーに {=...} と波括弧が表示されれば成功です。


方法の比較まとめ

方法 使用関数 対応バージョン 配列数式 簡潔さ 備考
① XLOOKUP版 XLOOKUP + SEARCH 2021 / M365 不要 ★★★☆☆ 読みやすく直感的
② LOOKUP版 LOOKUP + SEARCH 2007以降 不要 ★★★★★ 最短・最も汎用的
③ AGGREGATE版 INDEX + AGGREGATE + SEARCH 2010以降 不要 ★★★☆☆ エラー制御が柔軟
④ 配列数式版 INDEX + MATCH + SEARCH 2007以降 必要 ★★☆☆☆ 旧環境の最終手段

シンプルさの基準: 数式の文字数と、初見で理解できる難易度で評価しています。②は全体でも最短の数式であり、仕組みを覚えてしまえば応用も効くため最高評価です。


よくある疑問・エラー対処

Q. 一致するものが1つもない場合は?

#N/A#VALUE! エラーが出ます。すべての数式を IFERROR(数式, "一致なし") で囲むことで、エラーの代わりに任意のテキストを表示できます。

Q. 大文字・小文字を区別して検索したい

SEARCH の代わりに FIND を使ってください。FIND は大文字小文字を区別します。

Q. 空白セルが含まれていても動作する?

方法②〜③はエラー(空白由来のエラーを含む)を無視する構造なので基本的に問題ありません。方法④の場合は IFERROR を内側に追加するとより安全です。

Q. #VALUE! エラーが出る

検索範囲(例:A2:A6)と返却範囲のサイズが一致しているか確認してください。また、方法④でCtrl+Shift+Enterを忘れていないかも確認しましょう。


まとめ

状況 おすすめ方法
Excel 2021 / M365 で直感的に書きたい ① XLOOKUP版
バージョンを問わず最短で書きたい ② LOOKUP版(最推奨)
10以降でエラー制御を柔軟にしたい ③ AGGREGATE版
古いバージョンで配列数式が使える ④ INDEX+MATCH版

どの方法を使う場合も、IFERROR を組み合わせてエラー処理をしておくことが実務での安心につながります。まずは方法②のLOOKUP版を試してみて、自分のExcel環境や用途に合わせて他の方法も活用してみてください。


💡 この記事が役に立ったら、ブックマーク・シェアをしていただけると励みになります。VLOOKUP・XLOOKUPの応用テクニックをまとめた関連記事もあわせてご覧ください!