PR

ExcelでXLOOKUPを部分一致で使う方法|「含む」検索を完全解説

Excel
記事内に広告が含まれています。

ExcelのXLOOKUP関数は非常に使い勝手のよい関数ですが、
「部分一致の検索はできないの?」
と困ってしまったことはありませんか?

「XLOOKUP 部分一致 できない」と検索してこの記事にたどり着いた方も多いと思います。

この記事では、
・XLOOKUP関数で部分一致する基本形
・「含む」「前方一致」「後方一致」の考え方
・よくある勘違いと実務での最適解

を、実務目線でそのまま使える数式に絞って解説します。

「XLOOKUP 含む」「XLOOKUP あいまい検索」といったキーワードで調べている方にも役立つ内容です。

XLOOKUPは部分一致できない?【結論】

まず前提として、XLOOKUP関数は完全一致が基本の関数です。
そのため、何も設定しない状態では部分一致検索はできません。

例えば、以下のようなリストがあったとします。

前提条件データ

この表から、
・部署 → 人事部
のデータを、「人事」という検索ワードを使い、社員名を検索します。
すうしきを以下のように入力してみます。

=XLOOKUP("人事",C2:C14,B2:B14)

すると、ご覧のとおり、エラーとなってしまいました。

では、あいまい検索で活用するワイルドカード「*」を使用してみるとどうでしょう。
以下のように、数式を変更してみます。

=XLOOKUP("*人事*",C2:C14,B2:B14)

やはりこれでもエラーが発生してしまいます。

上記のようにワイルドカードを使っても、「人事」を含む値は検索されません。
※XLOOKUPでは、第5引数(match_mode)を指定しない限り、ワイルドカードは有効になりません。

しかし、検索配列側を論理式で作ることで、部分一致検索が可能になります。

XLOOKUPで部分一致する基本形(最重要)

XLOOKUP関数で部分一致を行うには、SEARCH関数を使うことで可能となります。
SEARCH関数を使うことで、検索する文字が何番目に入っていても検索することができます。

=XLOOKUP(TRUE,IFERROR(SEARCH("人事",C2:C14)>0,FALSE),B2:B14)

■仕組みを分解して解説

この数式のポイントは、検索値そのものではなく「TRUE」を探している点です。

SEARCH(”人事”,C2:C14)>0
 →”人事”が見つかればTRUE
 →”人事”が見つからなければエラー
を返します。

つまり、部分一致すればTRUE → 検索値をTRUEで指定しているため、部分一致を検索することが可能になります。

「>0」としているのは、検索文字が何番目に存在するか分からないためです。
SEARCH関数は、指定した文字列の開始位置を返す関数です。
つまり、先頭に対象の文字列があれば「1」、3文字目にあれば「3」と返すため、検索値を数値で指定することが困難になります。
そのため、あえて論理値(TRUE or FALSE)で返すことにより、確実に検索できるようになるということです。

※SEARCH関数は見つからないとエラーを返すため、IFERROR関数でFALSEに変換して安定させています。

前方一致・後方一致はできる?

部分一致と似たニーズとして、
・先頭が一致する(前方一致)
・末尾が一致する(後方一致)

場合を検索したいというケースもあります。

前方一致(先頭一致)

前方一致は、文字数が決まっている場合であればLEFT関数で対応できます。
例えば、左から2文字が「経理」のデータを検索するには、以下のように入力します。

=XLOOKUP(TRUE,LEFT(C2:C14,2)="経理",B2:B14)

ただし、
・文字数が一定ではない
・接頭語として含まれているかだけを判定したい

といった場合、LEFT関数では対応できません。

その場合は、SEARCH関数で「先頭にあるか」を判定します。
例えば、「法務」というワードが先頭にあるデータを検索するには、以下のように入力します。

=XLOOKUP(TRUE,SEARCH("法務",C2:C14)=1,B2:B14)

SEARCH関数は、文字列の開始位置を返すため、 先頭にある場合は必ず「1」になります。
そのため、文字数の指定ができない場合はSEARCH関数を活用してください。

後方一致(末尾一致)

後方一致も同様に、文字数が決まっている場合はRIGHT関数で対応できます。
例えば、社員名の後ろ一文字が「田」の人の部署名を検索するときは、以下のように入力します。

=XLOOKUP(TRUE,RIGHT(B2:B14,1)="田",C2:C14)

一方、文字数があやふやな場合は、SEARCH関数とLEN関数を組み合わせて判定します。
例えば、部署の末尾が「術部」のデータを検索するには、以下のように入力します。

=XLOOKUP(TRUE,SEARCH("術部",C2:C14)=LEN(C2:C14)-LEN("術部")+1,B2:B14)

この式では、
・文字列全体の長さから
・検索語の文字数を引き
・1を足す

ことで、「末尾に出現する文字位置」を算出し、後方一致しているかを判定することができます。

含む検索=SEARCH関数、 位置が決まっている一致=LEFT / RIGHT関数
と使い分けることで、シンプルに考えることができます。

該当データがない場合のエラー対策

該当するデータが存在しない場合、XLOOKUP関数は #N/Aエラーを返します。
実務では、第4引数を必ず指定しておくのがおすすめです。

=XLOOKUP(TRUE,SEARCH("情報システム",C2:C14)>0,B2:B14,"該当なし")

これだけで、エラーによる見づらさを防げます。

よくある勘違いと注意点

ここでは、XLOOKUP関数に関するよくある勘違いと注意点をまとめてみました。

ワイルドカード(*)は使えない?

XLOOKUPは完全一致が基本ですが、実はmatch_modeに「2」を指定すればワイルドカード検索も可能です。

例えば、冒頭で記載した数式では、エラーが発生してしまいましたね。

=XLOOKUP("*人事*",C2:C14,B2:B14)

この数式を、以下のように変更します。
第5引数(match_mode)を2にすることでワイルドカードを使用した部分一致を検索することができます。
VLOOKUP関数と少し勝手が違うので、戸惑いやすいポイントです。

=XLOOKUP("*人事*",C2:C14,B2:B14,,2)

ただし、SEARCH関数で位置を判定する方法を活用するほうが応用が効きます。
単純に検索ワードを含んでいる場合や、前方(先頭)・後方(末尾)一致でも活用できるので、XLOOKUP関数の活躍の幅が広がります。

複数条件で部分一致したい場合は?

「部署に○○を含み、かつ役職が△△」のように、 部分一致 × 複数条件で検索したいケースもあります。

その場合は、今回紹介したSEARCH関数の考え方を応用し、 論理式を掛け算(AND条件)・足し算(OR条件)で組み合わせることで可能となります。

👉 XLOOKUP関数の複数条件検索はこちらで詳しく解説しています。
こちらもぜひチェックしてみてください。

複数件を一覧で取得したい場合は?

XLOOKUP関数は、最初に見つかった1件のみを取得する関数です。
条件に合うデータを一覧で取得したい場合は、FILTER関数を使う方が適しています。

👉 FILTER関数の使い方はこちらで詳しく解説しています。
こちらもぜひチェックしてみてください。

XLOOKUPの「部分一致」「含む検索」「ワイルドカード検索」は、使い分けを理解すれば決して難しくありません。

まとめ|XLOOKUP部分一致はこの形を覚えればOK

XLOOKUPでも、工夫すれば部分一致検索は十分に可能です。

★ポイント
✅手軽に部分一致するなら → match_mode=2+ワイルドカード
✅柔軟に制御したいなら → SEARCH関数を組み合わせる
✅前方・後方一致は、文字数固定ならLEFT/RIGHT関数
✅文字数が不定の場合は、SEARCH関数で位置判定
✅1件取得ならXLOOKUP関数、一覧取得ならFILTER関数

部分一致検索は、実務で使う場面が非常に多いテクニックです。

まずは今回紹介した基本形を押さえ、 必要に応じて 複数条件検索FILTER関数 へステップアップしてみてください。

最後まで読んでいただき、ありがとうございました。

ろじゃー

仕事・子育てに奮闘中の社会人です。
仕事でも日常生活でも、ちょっとでも便利になることが紹介できるブログを書いています!
 
仕事柄、PC操作やエクセル、VBAなどは得意です!
Excel歴は10年以上の事務職。
関数やVBAを活用して、資料作成やデータ分析をはじめとした様々な業務の効率化・自動化に取り組んできました。
 
このブログでは、実際の業務で使える効率化テクニックを発信しています。
「わからない」や「困った」など問題を抱える方や、もっと効率化したいと思っている方に、少しでも役立てれば幸いです!

ご質問・ご相談など、お気軽にご連絡ください。

ろじゃーをフォローする
ご質問・ご相談はこちらへ!
 ろじゃー|日々、ちょっとずつ良くなることを目指すブロガー
Excel歴10年以上。VBAや関数、業務効率化などを発信中。
📩 お問い合わせはこちら
Excel
シェアする
ろじゃーをフォローする

コメント

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