XLOOKUP関数は、表から値を探して、対応する値を取り出す関数です。VLOOKUP と違い、探す列と返す列を別々に指定するので、左の列も返せ、列を挿入しても結果がずれません。見つからないときの表示、近い値の検索、下からの検索もこれ1つでできます。
XLOOKUP の式 早見表(目的別)
| やりたいこと | 式の例 | くわしい記事 |
|---|---|---|
| 基本(コードから商品名) | =XLOOKUP(G1,A2:A9,B2:B9) | この記事の下 |
| 見つからないときの表示 | =XLOOKUP(G5,A2:A9,B2:B9,"未登録") | 見つからないときの直し方 |
| 左の列を返す(商品名からコード) | =XLOOKUP("トマト",B2:B9,A2:A9) | 逆引き検索 |
| 複数の列をまとめて返す | =XLOOKUP(106,A2:A9,B2:D9) | 複数列をまとめて取得 |
| 「〇〇で始まる」で探す | =XLOOKUP("ぶ*",B2:B9,D2:D9,,2) | 部分一致・ワイルドカード |
| 下から探す(最後の値) | =XLOOKUP(G1,A2:A9,B2:B9,,0,-1) | 一致モード・検索モード |
| 2つ以上の条件で探す | =XLOOKUP(1,(C2:C9="野菜")*(D2:D9>=150),B2:B9) | 2つの条件で検索 |
| 別のシートから探す | =XLOOKUP(G1,商品!A2:A9,商品!B2:B9) | 別シートから検索 |
| 当てはまる行を全部出す | XLOOKUP ではできない → FILTER | 複数該当をすべて抽出 |
この記事では、XLOOKUP 関数の使い方を、基本の書き方から、左の列・複数の列を返す、一致モード(以下の最大・ワイルドカード)、下から検索、横方向、複数条件、VLOOKUP との違い、よくあるエラーの直し方まで、実際の Excel の画面で説明します。最後に、目的別の詳しい記事もまとめています。
XLOOKUP関数の書き方(構文)
=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
| 引数 | 意味 |
|---|---|
| 検索値 | 探したい値(コード・名前など) |
| 検索範囲 | 探す列(または行) |
| 戻り範囲 | 返したい値の列(または行)。検索範囲と同じ大きさにする |
| 見つからない場合(省略可) | 見つからないときに表示する値。省略すると #N/A |
| 一致モード(省略可) | 0=完全一致(省略時)/-1=完全一致か、次に小さい値/1=完全一致か、次に大きい値/2=ワイルドカード(* ?)を使う |
| 検索モード(省略可) | 1=上(先頭)から(省略時)/-1=下(末尾)から/2・-2=並べ替え済みの範囲を高速に探す |
XLOOKUP は Microsoft 365・Excel 2021 以降(Web 版の Excel を含む)で使えます。Excel 2019 以前では使えないので、古いバージョンの人とファイルを共有するときは VLOOKUP や INDEX+MATCH を使います。
基本の使い方:コードから商品名を取り出す
商品の表(A2:D9)から、コード 103 の商品名を取り出します。G2 に次の式を入れると「ぶどう」になります。探す列(コード)と返す列(商品名)を別々に指定するのがポイントです。
=XLOOKUP(G1,A2:A9,B2:B9)
式の入れ方(1手ずつ)
セル番地を手で打たなくても、クリックとドラッグで式ができます。






返す列を D2:D9 にすると単価の 450 になります。表に無いコード(999)を探すときは、4つ目に表示を決めておくと、#N/A の代わりに「未登録」と表示されました(見つからない場合の表示)。
=XLOOKUP(G5,A2:A9,B2:B9,"未登録")
まず動かしてみよう|この記事のサンプルをその場で試せます
ブラウザの上で XLOOKUP 関数を試せます。3つのタブは、IDから価格(基本)、点数から評価(一致モード -1)、金額から送料(一致モード 1)です。練習用ファイルの「ツール①〜③」シートと同じ表です。
左の列・複数の列をまとめて返す
検索範囲より左の列も返せます。商品名「トマト」からコードを探すと 105 になりました(XLOOKUPで逆引き検索)。
=XLOOKUP(G1,B2:B9,A2:A9)
戻り範囲を複数の列(B2:D9)にすると、商品名・分類・単価が横に広がって返ります(スピル)。コード 106 は「メロン・果物・800」でした(XLOOKUPで複数列をまとめて取得)。
=XLOOKUP(G4,A2:A9,B2:D9)

一致モード:以下の最大・ワイルドカード
一致モードを -1 にすると、ぴったりの値が無いとき「次に小さい値」を使います。点数の区切り(0・60・70・80・90)から、78 点の評価は B になりました。表を並べ替えておく必要はありません(XLOOKUPで「以上・未満」を検索)。
=XLOOKUP(G1,A12:A16,B12:B16,,-1)
一致モードを 2 にすると、* (何文字でも)や ? (1文字)が使えます。”ぶ*” で「ぶ」で始まる最初の商品(ぶどう)の単価 450 が返りました。試したところ、一致モードを省略すると * はただの文字として扱われ、見つかりませんでした(XLOOKUPの部分一致)。
=XLOOKUP(G4,B2:B9,D2:D9,,2)

検索モード:下から探して最後の値を取り出す
検索モードを -1 にすると、下から探します。同じ担当が何回も出てくる売上の表で、上から探すと最初の日付(10/1)、下から探すと最後の日付(10/5)になりました(XLOOKUPで最後に一致する値を取得)。
=XLOOKUP(F1,B2:B7,A2:A7,,0,-1)

横方向に探す(HLOOKUP の代わり)
検索範囲と戻り範囲を行にすると、横方向に探せます。見出しの行(B1:E1)から「6月」を探し、本店の売上 1500 を取り出しました。戻り範囲を2行(B2:E3)にすると、2店分(1500・1010)が縦に返りました(XLOOKUPで横方向に検索)。
=XLOOKUP(B5,B1:E1,B2:E2)
複数の条件で探す
条件を掛け算でつなげると、すべての条件に合う最初の行を探せます。「野菜」で「単価150円以上」の最初の商品はキャベツでした。条件を & でつなげて「野菜|150」のように1つの値にして探す方法もあります(XLOOKUPの複数条件)。
=XLOOKUP(1,(C2:C9=G1)*(D2:D9>=G2),B2:B9,"なし")

VLOOKUP との違い

表に「産地」の列を挿入して試しました。VLOOKUP は列番号 4 のままなので、単価ではなく分類の「野菜」を返しました。XLOOKUP は返す列を範囲で指定しているので、単価の 180 のままでした。
| 比べるところ | XLOOKUP | VLOOKUP |
|---|---|---|
| 返す列の指定 | 範囲で指定(列を挿入してもずれない) | 列番号で指定(挿入するとずれる) |
| 左の列を返す | できる | できない |
| 省略したときの探し方 | 完全一致 | 近似一致(FALSE が必要) |
| 見つからないとき | 4つ目の引数で表示を決められる | IFERROR で囲む |
| 下から探す・横方向 | 検索モード・行の指定でできる | できない(横は HLOOKUP) |
| 使えるバージョン | Microsoft 365・Excel 2021 以降 | すべて |
古いバージョンでも使うファイルは VLOOKUP、そうでなければ XLOOKUP がおすすめです(VLOOKUPの使い方)。
よくある間違い

実際に試した、よくある間違いの例です。数値の 103 が入った表を、文字の「103」で探すと #N/A になり、– を付けて数値にすると「ぶどう」が返りました。検索範囲(8行)と戻り範囲(7行)の大きさが違うと #VALUE! になりました。
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| #N/A になる | 表に無い/数値と文字の数字が混ざっている/カタカナとひらがなの違い | 4つ目で表示を決める。文字の数字は — や VALUE で数値に。試したところ「リンゴ」で「りんご」は見つからなかった。 |
| #VALUE! になる | 検索範囲と戻り範囲の大きさが違う | 2つの範囲を同じ行数(列数)にする。 |
| 空白のはずが 0 になる | 返すセルが空白 | &”” を付けて文字にする(空白が0になるときの対処法)。 |
| #スピル! になる | 複数の列を返すとき、広がる先に値がある | 右(下)のセルを空ける(#スピル!の直し方)。 |
| * で探しても見つからない | 一致モードが 0(省略) | 一致モードを 2 にする。 |
英字の大文字と小文字は区別されません。試したところ、”APPLE” で “apple” が見つかりました。
目的別:XLOOKUPの詳しい使い方
| やりたいこと | 記事 |
|---|---|
| 「〜を含む」「〜で始まる」で探す | XLOOKUPの部分一致・前方一致・後方一致 |
| 一致モード・検索モードをくわしく | 一致モード・検索モード |
| 2つ・3つ以上の条件で探す | XLOOKUPの複数条件 |
| 別シート・複数シートから探す | 別シートから検索・複数シートから検索 |
| 行と列の見出しが交わる値 | XLOOKUPの入れ子(交点の検索) |
| IF と組み合わせて表示を変える | XLOOKUPとIFの組み合わせ |
| データが増えても範囲を直さない | XLOOKUPの範囲を自動拡張 |
| 該当するものを全部取り出す | XLOOKUPで複数該当をすべて抽出 |
| 空白が0になる・見つからないとき | 空白が0になる・見つからない場合 |
よくある質問
XLOOKUP が使えない(#NAME? になる)ときは?
XLOOKUP は Microsoft 365・Excel 2021 以降の関数です。それより前の Excel では使えないので、INDEX+MATCH で同じことができます(MATCH関数の使い方・INDEX関数の使い方)。
IFERROR で囲む必要はありますか?
見つからないときの表示は、4つ目の引数で決められるので、IFERROR は要りません。4つ目は「見つからないとき」だけに効き、範囲の大きさが違うといった式の誤りのエラーはそのまま出ます(IFERROR関数)。
練習問題で確かめたいときは?
XLOOKUP関数の練習問題10問で、基本から複数条件・縦横の検索まで練習できます。
XLOOKUP で部分一致の検索をするには?
一致モードを 2 にして、*(何文字でも)や ?(1文字)を使います。=XLOOKUP("ぶ*",B2:B9,D2:D9,,2) で、「ぶ」で始まる最初の商品(ぶどう)の単価 450 が返りました。一致モードを省略すると、* はただの文字として扱われます。
XLOOKUP で近似一致の検索をするには?
一致モードを -1 にすると、ぴったりの値が無いとき「次に小さい値」を使います。=XLOOKUP(G1,A12:A16,B12:B16,,-1) で、78 点の評価は B になりました。表を並べ替えておく必要はありません。
