XLOOKUP関数の使い方|VLOOKUP移行フローと数式書き換えチートシート

スポンサーリンク

「VLOOKUPは普通に使えるのに、XLOOKUPにはなかなか踏み出せない」。Microsoft 365に移行済みなのに、手元の社員名簿や商品マスタは相変わらずVLOOKUPのまま。そんな状態ではないでしょうか。

基本構文を眺めても、自分のシートをどう書き換えればいいのか、そもそも全部書き換えていいのかが見えてこない。それがVLOOKUP経験者がXLOOKUP関数に乗り換えられない一番の理由です。

この記事では、ExcelのXLOOKUP関数を「移行判断フロー」と「VLOOKUP→XLOOKUP 数式書き換えチートシート」を軸に解説します。読んだその日に既存シートを書き換えられる構成にしました。

この記事は次のような人におすすめ
– VLOOKUPは使えるがXLOOKUPにまだ移行できていない人
– 既存のVLOOKUP数式をどう書き換えればいいか知りたい人
– 複数条件や末尾検索など、応用の壁で止まっている人

XLOOKUP関数とは?(読み方・役割・対応バージョン)

ExcelのXLOOKUP関数は、VLOOKUPの弱点をまとめて解消した次世代の検索関数です。まずは読み方と役割、使える環境を押さえておきましょう。

読み方と基本的な役割

XLOOKUPは「エックスルックアップ」と読みます。名前の「X」には「次世代」「拡張」という意味が込められています。

やっていることはVLOOKUPと同じです。「この値を検索して、対応するデータを持ってきて」という指示を出す関数です。

ただし使い勝手が大きく進化しています。列番号の指定が不要になり、左方向の検索もできます。エラー処理も引数ひとつで完結します。

VLOOKUPで感じていた「列がズレて壊れる」「左の列が検索できない」といった不満が、ほぼ解消されると考えてください。

対応バージョン(Excel 2021 / Microsoft 365)

XLOOKUP関数が使えるのは、次の環境です。

  • Excel for Microsoft 365
  • Excel 2024
  • Excel 2021(Mac版を含む)
  • Excel for Web / iPad / iPhone / Android

一方でExcel 2016・2019では使えません。これらの古いバージョンで開くと、関数として認識されずエラーになります。

NOTE

会社のパソコンがExcel 2019以前なら、VLOOKUP関数INDEX関数 + MATCH関数で同じことができます。

なお、GoogleスプレッドシートでもXLOOKUPは使えます。2022年8月から対応し、引数の構成もExcelとほぼ同じです。Sheetsでの使い方はスプレッドシートのXLOOKUP関数の解説記事を参照してください。

XLOOKUP関数の書き方(基本構文と引数の使い分け)

ここではXLOOKUP関数の書き方を、必須の3引数から実務シーン別の使い分けまで解説します。引数は全部で6つありますが、最初に覚えるのは3つだけで十分です。

基本構文と必須3引数

XLOOKUPの構文はこちらです。

=XLOOKUP(検索値, 検索範囲, 戻り配列, [見つからない場合], [一致モード], [検索モード])

引数は6つありますが、必須は最初の3つだけです。残り3つは省略できます。

引数必須/省略可意味指定例
検索値必須探したい値。セル参照や直接入力A2
検索範囲必須検索値を探す範囲(1行または1列)A2:A100
戻り配列必須結果として返したい範囲B2:B100
見つからない場合省略可該当なし時に表示する値“該当なし”
一致モード省略可検索の一致方法(0/-1/1/2)0
検索モード省略可検索する方向(1/-1/2/-2)1

具体例で見てみましょう。次のような社員マスタがA〜C列にあるとします。

A列(社員番号)B列(氏名)C列(部署)
E001田中営業部
E002鈴木総務部
E003佐藤経理部

社員番号「E002」から氏名を取得するには、こう書きます。

=XLOOKUP("E002", A:A, B:B)

この数式の結果は「鈴木」です。「A列で探して、B列を返す」と直感的に読めます。

VLOOKUPの「列番号」がなくなったのが最大の変化です。検索範囲と戻り配列を別々に指定するため、列の挿入や削除で数式が壊れません。

第4引数:見つからない場合の指定

検索値が見つからなかったときに返す値を、第4引数で指定できます。

=XLOOKUP("E999", A:A, B:B, "不明")

「E999」は社員マスタに存在しないため、この数式の結果は「不明」になります。

VLOOKUPでは見つからない場合の処理をIFERROR関数で囲む必要がありました。XLOOKUPなら引数ひとつで済むので、数式がすっきりします。

なお第4引数を省略すると、見つからないときは#N/Aエラーが返ります。実務では「該当なし」や空文字 "" を指定しておくのがおすすめです。

第5引数:一致モードの実務シーン別使い分け

第5引数の一致モードでは、検索の一致方法を4種類から選べます。

動作実務シーン例
0(既定)完全一致。なければ#N/A社員番号・商品コード検索(実務の9割)
-1完全一致。なければ次に小さい値料金表の下限マッチ・在庫照合
1完全一致。なければ次に大きい値しきい値の上限マッチ
2ワイルドカード一致(* / ? / ~「東京を含む」などの部分一致検索

省略時は完全一致(0)になります。ここはVLOOKUPと正反対なので要注意です。

VLOOKUPの第4引数の既定値はTRUE(近似一致=だいたい近い値を拾う動作)でした。XLOOKUPは既定で完全一致なので、「指定を忘れて変な値が返る」トラブルが減ります。

-1(次に小さい値)が活きるのは、価格帯テーブルの照合です。たとえば「3000円以上は送料無料」のような区切りを、しきい値の表から拾うときに使います。

第6引数:検索モードの実務シーン別使い分け

第6引数の検索モードでは、検索する方向を指定できます。

動作実務シーン例
1(既定)先頭から末尾へ検索通常の検索
-1末尾から先頭へ逆方向検索更新履歴から最新データを取得
2バイナリ検索(昇順前提)大量データの高速検索
-2バイナリ検索(降順前提)大量データの高速検索

VLOOKUPは常に上から下への一方向検索でした。XLOOKUPなら -1 を指定すると末尾から検索できます。

これが効くのは、同じキーが何度も登場するデータです。受注履歴や更新ログから「いちばん新しい1件」を取りたいとき、-1 だけで最新行を拾えます。

2 / -2 のバイナリ検索は、データが並べ替え済みであることが前提です。数万行を超えるような大量データの検索を高速化したいときに検討します。並べ替えていないデータに使うと誤った値が返るので注意してください。

NOTE

実務の9割は第4引数(見つからない場合)までで足ります。第5・第6引数は「近似で拾いたい」「最新を取りたい」「大量データを速くしたい」という明確な目的があるときだけ使えば十分です。

VLOOKUPからの移行ガイド|判断フローと数式書き換えチートシート

XLOOKUPが優れていると分かっても、「いま使っているVLOOKUPを全部書き換えていいのか」は別の問題です。ここでは移行してよいかどうかを判断するフローを示します。

移行判断フロー(3問で決まる)

次の3問に順番に答えると、移行してよいかが決まります。

質問1:使っているExcelはどのバージョンですか?

  • Microsoft 365 / Excel 2024 / Excel 2021 → 質問2へ
  • Excel 2019以前 → XLOOKUPは使えません。VLOOKUPまたはINDEX+MATCHを維持してください

質問2:このファイルを古いExcelの人と共有しますか?

  • 共有しない(自分専用・全員365) → 質問3へ。基本的に移行OK
  • 共有する → 後述の「古いExcelユーザーとの共有がある場合」を参照

質問3:いまの用途はどれですか?

  • 左方向の検索が必要 → XLOOKUPに移行する価値が大きい
  • 複数条件や複数列の一括取得が必要 → XLOOKUPに移行する価値が大きい
  • 右方向の単純な検索だけ → どちらでも可。新規作成分から徐々に移行でOK

この3問で「完全移行してよいか」「部分的にとどめるか」が見えてきます。

完全移行してよいケース・見送るケース

判断の目安を整理します。

完全移行してよいケース

  • 関係者全員がMicrosoft 365 / Excel 2021以降
  • 左方向検索や複数列取得を頻繁に使う
  • 列の挿入・削除が多く、VLOOKUPの列番号ズレに悩まされている

移行を見送る・部分的にとどめるケース

  • 古いExcelの人とファイルを共有する
  • 既存シートにVLOOKUPが大量にあり、書き換えコストが見合わない
  • 右方向の単純検索だけで完結していて困っていない

困っていないなら、無理に全部書き換える必要はありません。新規に作る数式からXLOOKUPに切り替えるだけでも十分です。

古いExcelユーザーとの共有がある場合の対処

ファイルの共有相手にExcel 2019以前の人がいる場合、XLOOKUPで作った数式は相手の環境で#NAME?エラーになります。

対処の選択肢は次の3つです。

  • そのシートだけVLOOKUPまたはINDEX+MATCHで作る(互換性を最優先)
  • 共有相手に365へのアップグレードを依頼する(中長期の解決)
  • 計算結果を「値貼り付け」で固定してから共有する(数式を渡さない)

どこまで割り切るかは運用次第です。なお、VLOOKUP・XLOOKUP・INDEX+MATCHの使い分けに迷ったら、使い分け完全ガイドで選び方フローを確認してください。

VLOOKUP→XLOOKUP 数式書き換えチートシート(6パターン)

ここがこの記事の核心です。よくあるVLOOKUP数式を、XLOOKUPにどう書き換えるかをパターン別に並べました。手元のシートと照らし合わせて、そのまま書き換えてください。

前提となるデータは次のとおりです。A列=社員番号、B列=氏名、C列=部署、D列=内線とします。検索値はF2セルに入れる想定です。

パターン1:単純置換(基本の書き換え)

最も多い「社員番号から氏名を引く」パターンです。

Before(VLOOKUP)

=VLOOKUP(F2, A:C, 2, FALSE)

After(XLOOKUP)

=XLOOKUP(F2, A:A, B:B)

列番号「2」が、戻り配列「B:B」に置き換わります。完全一致を表す FALSE も不要です。XLOOKUPは既定が完全一致だからです。

パターン2:左方向検索への書き換え

VLOOKUPでは不可能だった「氏名から社員番号を引く」検索です。検索キーが戻したい列より右にあるケースです。

Before(INDEX+MATCH)

=INDEX(A:A, MATCH(F2, B:B, 0))

VLOOKUP単体ではできず、INDEX+MATCHを使うしかありませんでした。

After(XLOOKUP)

=XLOOKUP(F2, B:B, A:A)

検索範囲と戻り配列を入れ替えるだけです。左でも右でも同じ書き方で検索できます。

パターン3:IFERROR統合(第4引数に移行)

「見つからないときは空欄にする」処理です。VLOOKUPではIFERRORで囲んでいました。

Before(VLOOKUP)

=IFERROR(VLOOKUP(F2, A:C, 2, FALSE), "")

After(XLOOKUP)

=XLOOKUP(F2, A:A, B:B, "")

IFERRORで囲む構造が消え、第4引数 "" に統合されます。数式が短く読みやすくなります。

パターン4:スピルで複数列を一括取得

「氏名・部署・内線を3つ並べて取得する」処理です。VLOOKUPでは列ごとに3本の数式が必要でした。

Before(VLOOKUP・3本必要)

=VLOOKUP(F2, A:D, 2, FALSE)
=VLOOKUP(F2, A:D, 3, FALSE)
=VLOOKUP(F2, A:D, 4, FALSE)

After(XLOOKUP・1本)

=XLOOKUP(F2, A:A, B:D)

戻り配列に複数列(B:D)を指定すると、結果が隣のセルへ自動的にあふれ出ます。これがスピル(1つの数式の結果が複数セルに展開される動作)です。1本の数式で3列ぶんを取得できます。

パターン5:複数条件検索(&連結)

「社員番号と部署の両方が一致する行」を探す処理です。VLOOKUPでは補助列が必須でした。

Before(VLOOKUP・補助列が必要)

補助列 G2 =A2&","&C2 を全行に用意し、隣のH列に氏名を並べ、I2に部署の検索条件を入力したうえで
=VLOOKUP(F2&","&I2, G:H, 2, FALSE)

After(XLOOKUP・補助列不要)

=XLOOKUP(F2&","&I2, A:A&","&C:C, B:B)

検索値と検索範囲をそれぞれ & で連結します。間に区切り文字(ここでは ,)を挟むのがポイントです。

区切り文字を入れないと「AA」+「B」と「A」+「AB」が同じ文字列になります。別の行を誤ってヒットさせる恐れがあるので、区切り文字を挟んで衝突を防ぎます。

パターン6:末尾検索で最新データを取得

「更新履歴の中から最新の1件を取得する」処理です。同じキーが複数回出てくるデータで使います。

Before(VLOOKUP・最新が取れない)

=VLOOKUP(F2, A:B, 2, FALSE)

VLOOKUPは先頭から検索するため、最初に登場した(=最も古い)行しか返せませんでした。

After(XLOOKUP・末尾から検索)

=XLOOKUP(F2, A:A, B:B, "データなし", 0, -1)

第6引数に -1 を指定すると末尾から検索します。これで最新行を取得できます。第5引数の 0 は完全一致の指定です。

実務活用パターン集

チートシートの応用として、実務で頻出する活用パターンを掘り下げます。手元のシートに当てはめながら読んでください。

スピルで複数列を一括取得する

戻り配列に複数列を指定すると、結果がスピルで展開されます。先ほどの社員マスタで氏名と部署を同時に取得してみます。

=XLOOKUP("E002", A:A, B:C)

この数式の結果は「鈴木」「総務部」の2セルにスピルします。VLOOKUPでは列ごとに数式を分けていた作業が、1本で済みます。

TIP

スピル先のセルにすでにデータがあると#SPILL!エラーになります。出力先のセルは空けておいてください。複数結果をすべて抽出したい場合はFILTER関数も検討すると良いでしょう。

末尾から検索して最新データを取得する

同じ検索値が複数回登場するデータで、最新のレコードを取得したい場面です。受注履歴や更新ログで役立ちます。

=XLOOKUP(F2, A2:A1000, B2:B1000, "データなし", 0, -1)

第6引数の -1 で末尾から検索します。データを新しい順に追記している表なら、これで最新の1件を拾えます。

ネストして2段階検索する

部署コードから部署名を引き、さらに担当者を引く。こうした2段階の検索もネスト(関数の入れ子)で対応できます。

=XLOOKUP(XLOOKUP(A2, 部署!A:A, 部署!B:B), 担当者!A:A, 担当者!B:B)

内側のXLOOKUPの結果を、外側のXLOOKUPの検索値として渡しています。中継のマスタをまたいで検索したいときに便利です。

ワイルドカードで部分一致検索する

第5引数に 2 を指定すると、ワイルドカードが使えます。「東京を含む住所」のような部分一致検索が可能です。

=XLOOKUP("*東京*", A2:A100, B2:B100, "該当なし", 2)

* は任意の文字列、? は任意の1文字にマッチします。セルの値で検索する場合は & で連結します。

=XLOOKUP("*"&E2&"*", A2:A100, B2:B100, "該当なし", 2)

複数条件で検索する

複数条件の検索は、チートシートのパターン5で扱った & 連結が基本です。区切り文字を挟む形を再掲します。

=XLOOKUP(E2&","&F2, A2:A100&","&B2:B100, C2:C100, "該当なし")

Microsoft 365ならそのままEnterで動作します。VLOOKUPのように補助列を作る必要はありません。XLOOKUPの内部動作をさらに理解したい場合は、位置を返すXMATCH関数もあわせて確認すると理解が深まります。

よくあるエラーと対処法

最後に、XLOOKUPでつまずきやすいエラーと対処法をまとめます。原因の切り分けができれば、ほとんどはすぐ解決します。

#N/Aエラー(原因別対処表)

「検索値が見つからない」という意味のエラーです。原因はいくつかあります。

原因対処法
検索値がデータに存在しない第4引数で「該当なし」等を指定する
データ型の不一致(数値と文字列)VALUE関数で型を統一する
余分なスペースが含まれているTRIM関数でスペースを除去する
全角と半角が混在しているASC関数で半角に統一する

TIP

第4引数を設定しておけば#N/Aエラーそのものを回避できます。VLOOKUPでIFERRORを使っていた方にはうれしいポイントです。

#VALUE!エラー(範囲サイズの不一致)

検索範囲と戻り配列のサイズが揃っていないと発生します。

=XLOOKUP(A2, B2:B100, C2:C50)

この例は検索範囲が99行なのに、戻り配列が49行です。両方の行数を揃えれば解消します。

#SPILL!エラー(出力先にデータが存在)

スピルの出力先にすでにデータがあると発生します。結果が展開されるセルをすべて空けてください。

なお、テーブル(ListObject)の中でスピルする数式を使った場合にも#SPILL!が出ることがあります。その場合はテーブルの外で使うか、戻り配列を単一列に絞ってください。

#NAME?エラー(バージョン非対応)

対応していないバージョンで使うと表示されます。Excel 2019以前ではXLOOKUPが未定義の関数として扱われるためです。

対処法は次の2つです。

間違った値が返るケース

エラーにはならないのに、期待と違う値が返ることがあります。

原因対処法
検索範囲に絶対参照をつけ忘れているF4キーで$記号を付ける
戻り配列の指定が間違っている返したい列をもう一度確認する
一致モードの指定ミス通常は0(完全一致)を使う
検索モード2/-2を未ソートで使った並べ替えるか、既定の1に戻す

まとめ

ExcelのXLOOKUP関数のポイントを振り返ります。

  • 基本は =XLOOKUP(検索値, 検索範囲, 戻り配列) の3引数
  • 列番号が不要なので、列の追加・削除で壊れない
  • 検索範囲と戻り配列を入れ替えれば左方向検索もできる
  • 第4引数でエラー時の表示を指定でき、IFERRORが不要
  • スピル対応で複数列を1本の数式で一括取得できる
  • 対応バージョンはExcel 2021 / 2024 / Microsoft 365

移行に迷ったら、まず3問の移行判断フローでバージョン・共有相手・用途を確認してください。そのうえでチートシートを見ながら、手元のVLOOKUPを1つずつ書き換えていけば大丈夫です。

全部を一度に書き換える必要はありません。新規に作る数式からXLOOKUPに切り替えるだけでも、シートは着実に壊れにくくなっていきます。

関連記事

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