【Excel】初心者向けXLOOKUP使い方ガイド|VLOOKUP・HLOOKUPとの違いも紹介

Excelで名簿やカタログリストを扱っていると、 「別シートから値を引っ張りたい」「コードに対応する名前を表示したい」 といった「検索して値を取り出す作業」が発生します。

このときに、よく利用されるのが 「VLOOKUP関数」「XLOOKUP関数」です。

VLOOKUP関数は古くから使われている関数ですが、 検索方向の制限や列番号指定など、初心者がつまずきやすいポイントが多くあります。

一方、XLOOKUP関数はそれらの弱点をすべて解消した新しい検索関数で、 縦・横どちらでも検索でき、エラー処理も簡単、構造変更にも強いというメリットがあります。

この記事では、 XLOOKUP関数を中心に使い方を解説し、 そのあとでVLOOKUP関数との違いや使い分けを解説します。

Excel初心者でも迷わず使えるようになる内容になっていますので、 ぜひ最後まで読んでみてください。

目次

結論:XLOOKUP関数が基本、VLOOKUP関数/HLOOKUP関数は旧式

Excelで「検索して値を取り出す」作業をするなら、今はXLOOKUP関数が標準です。

Office 365やExcel 2021以降を使っているなら、まずXLOOKUP関数を使うのが正解です。

VLOOKUP関数/HLOOKUP関数は古い関数で、制限が多く、柔軟性に欠けます。

スクロールできます
比較項目VLOOKUP関数HLOOKUP関数XLOOKUP関数
検索方向縦方向
(左→右のみ)
横方向
(上→下のみ)
縦・横どちらもOK
検索の柔軟性左側に検索列が必要上側に検索行が必要検索範囲と返す範囲を自由に指定
列/行番号指定列番号の指定が必要行番号の指定が必要不要
(返す範囲を直接指定)
構造変更への強さ
(検索対象リストの編集)
列追加で壊れやすい行追加で壊れやすい強い
(範囲指定のため壊れにくい)
エラー時の処理IFERRORと併用IFERRORと併用第4引数で直接指定可能
一致モード完全一致/近似値完全一致/近似値完全一致がデフォルト+柔軟な検索モード
利用可能バージョンExcel 2019以前も可Excel 2019以前も可Excel 2021 / Office 365
役割縦方向検索の旧式関数横方向検索の旧式関数VLOOKUP・HLOOKUPの完全上位互換
実務での使用頻度まだ多い(旧環境で使用)あまり見ない現代の標準

XLOOKUPの基本的な使い方

XLOOKUP関数の構文

=XLOOKUP(検索値, 検索範囲, 返り範囲, [一致しなかった場合], [一致モード], [検索モード])

使用例1:縦方向検索

=XLOOKUP(G2,A:A,B:B,"該当なし")
  • A列の商品コードからG2に入力した「C201」を探し、B列の商品名を返す
  • 見つからない場合は「該当なし」と表示
XLOOKUP関数の使用例を図解
TIPS

XLOOKUPではVLOOKUPではできなかった、検索範囲を軸にした左右両方の列を検索することができます。

例えば今回の表では

=XLOOKUP(G2,B:B,A:A,"該当なし")
  • B列の商品名からG2に入力した「USB-Cハブ」を探し、A列の商品コードを返す
  • 見つからない場合は「該当なし」と表示

と検索する列の左側の範囲の値を返すことができます。

XLOOKUP関数において、戻り範囲が検索範囲の左側にある場合の使用例を図解

使用例2:横方向検索

=XLOOKUP(I2,B1:G1,B4:G4,"該当なし")
  • 1行目(B1:G1)の日付からI2に入力した「9月2日」を探し、4行(B4:G4)の販売数を返す
  • 見つからない場合は「該当なし」と表示

データテーブルにおける行列の追加・削除

XLOOKUP関数はVLOOKUP関数/HLOOKUP関数と異なり、列番号/行番号の指定が不要なため、行列の追加・削除で検索範囲を再度指定しなおす必要がありません

例えば、以下の表でB列に新しく列を挿入すると、VLOOKUP関数では戻り範囲が変化した結果”0”を返します。

VLOOKUP関数では列の追加で検索結果が崩れることを図解

同じ表でXLOOKUP関数を使えば、新たに列を挿入しても、検索範囲や戻り範囲が自動で追従されます。

XLOOKUP関数では列を追加しても検索結果が崩れないことを図解

エラー時の処理(第4引数)

XLOOKUP関数における第4引数は 「見つからない場合に返す値」 を指定します。

検索値が見つからないとき、通常は #N/A が返ります。

XLOOKUP関数で第4引数を指定せずに、エラーが出た場合#N/Aが返されることを図示

第4引数を指定すると、好きな文字や値を返すことができます。

今回の例では「該当なし」としましたが、「空白セルを返す」もよく使う処理です。

表示したい内容第4引数の書き方
該当なしと表示“該当なし”
空白にする“”
ハイフンにする“-“
0を返す0

一致モード(第5引数)

第5引数は 「検索値と検索範囲をどう比較するか」 を指定する引数です。

一致モードには 4種類あります。

一致モード数値動作
完全一致(デフォルト)0完全一致する値を探す
完全一致(次に小さい値)-1完全一致がなければ「次に小さい値」を返す
完全一致(次に大きい値)1完全一致がなければ「次に大きい値」を返す
ワイルドカード一致2* や ? を使った部分一致検索

完全一致(0)※デフォルト

検索値と完全に一致する値を探します。

最初に示した例のように第5引数に何も指定がないと、この完全一致になります。

=XLOOKUP(G2,A:A,B:B,"該当なし",0)
  • A列の商品コードからG2に入力した「C201」を探し、B列の商品名を返す
  • 見つからない場合は「該当なし」と表示

完全一致または次に小さい値(-1)

「完全一致(次に小さい値)」VLOOKUPの近似値検索(TRUE)とほぼ同じ動作です。

完全一致する値がなければ、比較する検索値の次に小さい値を参照します。

IF関数などでも同様の処理はできますが、数値の範囲検索で使うことができます。

例えば 「テストの点数に応じた評価をつけたい」といった判定表で便利です。

=XLOOKUP(点数,判定基準点,対応する評価,,-1)

  • 完全一致がなければ「次に小さい値」を探す
  • 例えば得点が 83 点なら、83より小さく一番近い値=80点の行を参照する
XLOOKUP関数で第5引数に"-1"「完全一致(次に小さい値)」を入力した時の範囲検索の例を図解
どどん

上の例では第4引数を指定しませんでしたが、「完全一致(次に小さい値)」では検索値に近い値を探しに行くことで、ほぼエラーになることがありません。
それでも返す値がない時は「#N/A」が表示されます。

完全一致または次に大きい値(1)

先ほどとは逆に、完全一致する値がなければ、比較する検索値の次に大きい値を参照します。

例えば 「荷物サイズに応じた送料計算」といった判定表で便利です。

=XLOOKUP(荷物のサイズ,判定基準となるサイズ,対応する送料,,1)

  • 完全一致がなければ「次に大きい値」を探す
  • 例えば得点が 83 点なら、83より大きく一番近い値=100サイズの行を参照する
XLOOKUP関数で第5引数に"1"「完全一致(次に大きい値)」を入力した時の範囲検索の例を図解

ワイルドカード一致(2)|部分一致検索

部分一致検索ができる自由度をより広げるモードです。

ワイルドカードの使用例:

スクロールできます
記号意味使用例
?任意の一文字洗?機 と書くと洗濯機や洗顔機などがヒットします。

?の数は文字数と一致しているので、『洗濯乾燥機』をヒットさせようとすると 洗???機 とする必要があります。

逆にこの場合、『洗浄機』などの3文字パターンはヒットしません。
*任意の文字列
(0文字以上)
洗*機 と書くと『洗』『機』の間の文字数に関係なくヒットします。

この場合は『洗濯機』も『洗顔機』も『洗濯乾燥機』も全てヒットします。
~エスケープ
(特殊文字を文字として扱う)
ワイルドカードを無効化して、文字として扱うことができます。

ワイルドカード使用時の実際の挙動

?(任意の一文字)

ワイルドカードを使うと、検索の結果複数の項目がヒットすることがありますが、XLOOKUP関数ではスピル機能(複数行を自動展開して返す機能)はありません。

そのため、検索値に一致する 最初の1件だけ を返す設計になっています。

以下の図の例で『洗?機』と入力すると『洗濯機』の2件と『洗顔機』の2件の合計4件該当しますが、
検索結果は最初の『洗濯機』の『アクアウォッシュ』のみ返されます。

XLOOKUPでワイルドカードの『?』を使用した時の実際の挙動を図解
*(任意の文字列(0文字以上))

以下の図の例で『洗*機』と入力すると『洗濯機』の2件、『洗濯乾燥機』の2件、『洗顔機』の2件の合計6件該当しますが、
検索結果は最初の『洗濯機』の『アクアウォッシュ』のみ返されます。

XLOOKUPでワイルドカードの『*』を使用した時の実際の挙動を図解

このとき『洗顔機』の2件を削除すると、次にヒットする『洗濯乾燥機』の『スマートウォッシュドライ』が返されます。

XLOOKUPでワイルドカードの『*』を使用したr例で、最初にヒットした項目が削除されると、次にヒットする検索結果が返されることを図示
~ エスケープ(特殊文字を文字として扱う)

『?』や『*』などのワイルドカードを無効化して、文字として扱うことができます。

検索したい文字列の中に、ワイルドカードとして使用する記号が入っている場合に使用します。

以下の図の例で説明します。

商品コードの検索値を『A*1』としたとき、通常であれば任意の文字列(0文字以上)のワイルドカードが適用され、一番最初にヒットする、『A54321』の商品コードに相当する、『アクアウォッシュ』が返されます。

商品コードの検索値を『A*1』としたとき、通常であれば任意の文字列(0文字以上)のワイルドカードが適用され、一番最初にヒットする、『A54321』の商品コードに相当する、『アクアウォッシュ』が返されることを図示。

ここでエスケープを使って、『A~*1』と入力すると、『A*1』に完全一致する商品コードに相当する『クリーンフロー』が返されます。

エスケープを使って、『A~*1』と入力すると、『A*1』に完全一致する商品コードに相当する『クリーンフロー』が返されることを図示
どどん

個人的に、ワイルドカードを利用する場面が多いのは、「ヒットさせたい文字列はうろ覚えだけど分かっている」状況です。

例えば『ワタナベイチロウ』さんを検索したいのに、
『渡邉一郎』だっけ『渡邊一朗』だっけとなった場合に、
『渡?一?』と入力すればヒットさせることができます。

その他にも、「氏名の間にスペースが入ってたっけ」「半角スペースだっけ全角スペースだっけ」となったときも
『渡*一?』と入力すればヒットさせることができます。

検索モード(第6引数)

第6引数の検索モードは、主に、

  • 順方向(リストの上から下)に検索する:『1』
  • 逆方向(リストの下から上)に検索する:『-1』

かを指定する引数になります。

第6引数を指定しなければ、順方向(上から下)に検索します。

XLOOKUP関数は、ここまで説明した通り、検索して最初にヒットした値を返します。

通常はこの順方向検索で十分ですが、
例えば、リストが時系列順(古い順)に並んでいて、直近のデータを検索したいときは逆方向検索を使います。

VLOOKUP関数/HLOOKUP関数の基本的な使い方

■ VLOOKUP関数の構文

=VLOOKUP(検索値, 範囲, 列番号, 検索方法)

■ 使用例

=VLOOKUP(G2,A1:E13,2,FALSE)
  • A列の商品コードからG2に入力した「C201」を探し、2列目(B列)の商品名を返す
  • FALSEは「完全一致」
VLOOKUP関数の使用例を図解

■ VLOOKUP関数の弱点

  • 検索列は必ず一番左に置く必要がある
  • 列番号を手入力するため、列追加で壊れやすい
  • エラー処理はIFERROR関数と併用が必要

つまり、XLOOKUP関数はVLOOKUP関数とHLOOKUP関数の完全上位互換です。

■ HLOOKUP関数の構文

=HLOOKUP(検索値, 範囲, 行番号, 検索方法)

■ 使用例

=HLOOKUP(I2,B1:G4,4,FALSE)
  • 1行目(B1:G1)の日付からI2に入力した「9月2日」を探し、4行目(B4:G4)の販売数を返す
  • FALSEは「完全一致」
HLOOKUP関数の使用例を図解
どどん

VLOOKUPとHLOOKUPの違いは語源から考えると分かりやすかったりします。
VLOOKUPの V は Vertical(垂直) の頭文字で、 「縦方向に検索して値を返す」関数です。

HLOOKUPの H は Horizontal(水平) の頭文字で、 「横方向に検索して値を返す」関数です。

どちらも関数の本質は同じなのですが、検索方向が縦か横かで2つの関数が用意されているイメージです。

さいごに

  • XLOOKUP関数が基本、VLOOKUP関数とHLOOKUP関数は旧式。
  • XLOOKUP関数は縦・横どちらにも対応し、構造変更に強い。
  • XLOOKUP関数エラー処理・検索モード・柔軟性が圧倒的に優れている。

職場のOffice環境はセキュリティ対策の観点から、Office 365を利用しているところが多い傾向にあります。

そうであればまず、初心者の方は XLOOKUP 関数を使ってみてください。

もし過去から代々引き継いできた資料でVLOOKUP関数を使用している場合は、可能であればXLOOKUP関数に修正してあげましょう。

もし数式を勝手に編集するのは避けたいという状況であれば、VLOOKUP関数のエラーが出ないように行列の追加・削除などはしないようにしましょう。

みなさんのお仕事に少しでも役立てれば幸いです。ではまたノシ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次