未分類

はじめてでも迷わない!XLOOKUP関数をやさしく深掘り――実務で使える設定・応用まで徹底ガイド

k.w
\お買い物マラソン開催中/

Excelでの検索・参照作業をもっと確実に、もっと速く。そんなニーズに応えるのがXLOOKUP(エックスルックアップ)です。ここでは基礎から一歩踏み込み、実務でつまずきやすいポイントや高速化の工夫まで、まとめて解説します。

はじめにXLOOKUPとは?

XLOOKUPは、探す値を指定範囲から見つけ、その行(または列)の対応値を返す関数です。VLOOKUP/HLOOKUPの弱点(左側検索不可・列挿入に弱い・未一致時のIFERROR併用が必要…)を解消し、柔軟で読みやすい式が書けます。

引数と書式の理解

一般形:

=XLOOKUP(検索値,検索範囲,戻り範囲,未一致時,一致モード,検索モード)

引数意味要点
検索値探したい値(セル参照/文字列/数値)前後空白や型ズレに注意
検索範囲検索対象の1列(または1行)戻り範囲と高さ/幅を揃える
戻り範囲返したい列(または行)複数列OK(スピル)
未一致時見つからない時の表示“該当なし”など任意文字列
一致モード一致方法の指定0=完全一致(既定), −1/1=近似, 2=ワイルドカード
検索モード検索方向/方式1=先頭から, −1=末尾から, 2/−2=バイナリ

未一致時はIFERROR不要

VLOOKUPではIFERRORでラップしがちですが、XLOOKUPは第4引数「未一致時」で直接指定できます(式が読みやすく、計算も軽くなります)。

一致モードと検索モードの早見表

一致モード動作注意点
0完全一致最も安全。既定値
−1以下で最も近い検索範囲は昇順に並べる
1以上で最も近い検索範囲は昇順に並べる
2ワイルドカード(* ?)「一致モード=2」を必ず指定
検索モード動作用途
1先頭→末尾へ線形検索通常の検索
−1末尾→先頭へ線形検索最後の一致を取りたい時
2昇順のバイナリ検索大規模データ高速化(要昇順)
−2降順のバイナリ検索大規模データ高速化(要降順)

基本の使い方商品コードから商品名を検索

  • 商品コード:A2:A100、商品名:B2:B100、検索値:E2とします。
  • 商品名をF2に表示:
    =XLOOKUP(E2,A2:A100,B2:B100,”該当なし”)
  • 未一致時は「該当なし」と表示され、#N/Aが見出しや集計に伝播しません。

応用編複数条件・2次元参照・複数列返却

複数条件(部署×役職)

  • D列に複合キー:D2=B2&”|”&C2 を作成し下方へコピー(「|」は区切り記号)。
  • 検索キー:G2=E2&”|”&F2(E2=部署、F2=役職)。
  • 氏名を取得:
    =XLOOKUP(G2,D2:D100,A2:A100,”該当なし”)

2次元(行×列)で値を取り出す

  • 左に品名(行ラベル)、上に月(列ラベル)のクロス表で売上を取得:
  • =XLOOKUP(H2,A2:A100,XLOOKUP(I2,B1:Z1,B2:Z100,”該当なし”),”該当なし”)
  • 外側で行を、内側で列を選ぶイメージです(INDEX/MATCHの代替)。

複数列をまとめて返す(スピル)

  • 商品コードから「商品名・単価・在庫」を横に同時取得:
    =XLOOKUP(E2,A2:A100,B2:D100,”該当なし”)
  • F2以降に横方向へ自動スピルします(表計算の整形が楽に)。

部分一致・最後の一致・高速検索

前方一致・部分一致(ワイルドカード)

  • 「食」で始まる商品名のコードを返す:
    =XLOOKUP(“食“,B2:B200,A2:A200,”該当なし”,2)
  • は任意の文字列、? は任意の1文字です。

最後の一致(下から上へ探す)

  • 同一コードが複数回出現、最新(最後)の行を取得:
    =XLOOKUP(E2,A2:A100,B2:B100,”該当なし”,0,−1)

大規模データを高速に(バイナリ検索)

  • 検索範囲が昇順に並んでいるとき:
    =XLOOKUP(E2,A2:A100000,B2:B100000,”該当なし”,0,2)
  • 降順なら検索モードは −2。並び順が条件なので注意。

よくあるエラーと対処

型の不一致(数値と文字列)

  • 数字に見えて文字列のコード → VALUE/– で数値化、TEXTで文字列化。
  • 例:検索値を文字列化して合わせる:
    =XLOOKUP(TEXT(E2,”0″),A2:A100,B2:B100,”該当なし”)

前後の空白・不可視文字

  • TRIM/CLEANで整形:
    =XLOOKUP(TRIM(E2),TRIM(範囲) … ) は配列変換が重いことも。
    入力元でデータクレンジングするのが最善。

日付の一致

  • 見た目が同じでもシリアル値が違う/時刻付きでズレる場合あり。
    INTで日付に丸める、またはTEXT(E2,”yyyy-mm-dd”)でキー化。

実務で役立つテクニック

LETで式を読みやすく軽くする

  • 同じ範囲を何度も参照しない:
    =LET(k,TRIM(E2), keyRange,TRIM(A2:A100), retRange,B2:B100, XLOOKUP(k,keyRange,retRange,”該当なし”))

CHOOSECOLS/TAKEで戻り範囲を整形

  • 広い戻り範囲から必要列だけ:
    =XLOOKUP(E2,A2:A100,CHOOSECOLS(B2:H100,1,3,5),”該当なし”)

テーブル(構造化参照)で壊れない式

  • 表をテーブル化しておけば、列の増減でも式が自動追随:
    =XLOOKUP([@コード],Table1[コード],Table1[商品名],”該当なし”)

よくある質問や疑問

Q1: 複数ヒットをすべて取得できますか?

XLOOKUP単体は最初(または最後)の1件を返します。複数行を返すなら FILTER を使います。

  • =FILTER(B2:B100,A2:A100=E2,”該当なし”)
  • 条件が複数なら、(条件1)*(条件2)… でAND、(条件1)+(条件2)… でOR。

Q2: 大文字小文字を区別できますか?

標準のXLOOKUPは大文字小文字を区別しません。厳密一致なら、EXACT と FILTER/XMATCH を組み合わせます。

  • =FILTER(B2:B100,EXACT(A2:A100,E2),”該当なし”)

Q3: XLOOKUPが#N/Aになる原因は?

  • 前後空白・全角/半角違い・型違い(文字列/数値)・日付の時刻混在。
  • 未一致時引数でユーザー向けメッセージを返しつつ、元データの整備を。

今すぐ解決したい!どうしたらいい?

数式の見直しやデータ整形の相談、大量データの高速化など、状況に合わせて最短ルートをご提案します。気軽にご連絡ください。

まとめ

XLOOKUPは「探す→返す」をシンプルかつ堅牢にする強力な関数です。未一致時の表示・ワイルドカード・最後の一致・高速検索・複数列返却まで、一通り押さえれば、VLOOKUP時代の悩みはほぼ解消します。さらに LET/CHOOSECOLS/テーブルを組み合わせて、読みやすく壊れにくい設計を目指しましょう。運用で詰まったら、いつでも相談してください。

ABOUT ME
記事URLをコピーしました