スプレッドシートでマスタデータから商品名や単価などを検索し、自動的に別の表へ反映させる際、最も有名なのが「VLOOKUP(ブイルックアップ)関数」です。しかし、VLOOKUPは「検索キーより左側にある列のデータを取得できない」「列番号を数えるのが面倒」「データが見つからないと#N/Aエラーが出て画面が汚くなる」など、実務においては多くの不便な仕様を抱えていました。
Googleスプレッドシートに新しく追加された「XLOOKUP(エックスルックアップ)関数」は、VLOOKUPが抱えていたこれらの弱点をすべて完璧に克服した、次世代のデータ検索用関数です。XLOOKUPを使えば、左方向の検索はもちろん、列番号を指定する手間もなくなり、エラー処理も数式内に標準で組み込むことができます。今回は、XLOOKUP関数の基本的な書き方から、VLOOKUPとの違い、複数列のデータを一括抽出するスピル(SPILL)機能やエラー回避といった応用テクニックまで図解します。数式の入力ミスを減らし、レポート作成をスピードアップさせて定時退勤を実現しましょう!
- XLOOKUPは、検索値の「左側」にある列のデータもINDEX+MATCH関数なしで検索・抽出できること
- 検索範囲と対応範囲を「セル範囲」で個別に指定するため、列の追加や削除で数式がずれて壊れる心配がないこと
- デフォルトで「完全一致」検索を行うため、末尾の「FALSE」を記述し忘れることによる抽出ミスが発生しないこと
- 第4引数「見つからない場合」を設定することで、IFERROR関数を使わずにエラー時の表示をスマートに制御できること
ジャンプできる目次📖
XLOOKUP関数とは?VLOOKUPとの違い・メリット
XLOOKUPは、VLOOKUP関数とHLOOKUP関数を統合し、大幅に機能向上させた新しいデータ検索関数です。縦方向・横方向のどちらのデータリストに対しても、簡単な記述でデータを検索し抽出できます。実務で最も差が出るVLOOKUPとの機能差を理解しましょう。
XLOOKUPがVLOOKUPより圧倒的に優れている4つの理由
第一の理由は、「左方向への検索対応」です。VLOOKUPは「検索キーとなる列が、選択範囲の一番左端になければならない」という制限がありました。そのため、ID列の左側に名前列があるマスタからデータを引く場合、わざわざ列の順番を入れ替えるか、複雑なINDEX関数とMATCH関数を組み合わせる必要がありました。XLOOKUPなら、マスタの列の並び順に関係なく、任意の列から自由に検索できます。
第二の理由は、「列番号のカウントが不要」な点です。VLOOKUPでは「左から数えて3列目」のように列番号を数字で指定する必要がありました。このため、後からマスタの途中に新しい列を追加すると、「3列目」だった位置が「4列目」に変わり、数式がエラーになるか誤ったデータが表示される問題(数式の崩壊)が多発していました。XLOOKUPは範囲(例: C2:C10)で指定するため、列の挿入・削除にも自動追従し、数式が絶対に壊れません。
第三の理由は、「デフォルトの検索方式が完全一致」であることです。VLOOKUPでは、最後の引数に「FALSE」を書き忘れると、意図しない近似値が抽出されてしまうバグの温床となっていました。XLOOKUPは初期設定が完全一致に設計されているため、引数の指定漏れによる計算ミスが起こりません。
第四の理由は、「エラー処理が組み込み」されていることです。検索値が見つからなかったときに「#N/A」を表示させないために、これまでは =IFERROR(VLOOKUP(...), "データなし") のように二重の関数を使う必要がありました。XLOOKUPは、第4引数に指定した文字を書くだけで、自動でエラー時の代替テキストを表示してくれます。
以下に、VLOOKUP関数とXLOOKUP関数の仕様や使い勝手の違いを比較表に整理しました。
| 機能・比較項目 | VLOOKUP関数 | XLOOKUP関数(スプレッドシート版) |
|---|---|---|
| 検索値の左側にある列の取得 | 不可(INDEX+MATCHなどが必要) | 可能(範囲指定のみで自在に抽出) |
| 列の挿入・削除時の影響 | 数式が壊れる(列番号のずれが発生) | 影響なし(自動追従するため壊れない) |
| 完全一致検索の指定 | 必須(末尾に「FALSE」の記述が必要) | 不要(デフォルトで完全一致検索を実行) |
| エラー処理の書き方 | IFERROR関数で外側を囲む必要がある | 第4引数「見つからない場合」に記述するだけ |
| 複数列の一括取得(SPILL) | 不可(1セルずつ数式を入力してコピー) | 可能(1つの数式で横並びの複数列を一発抽出) |
このように、あらゆる面でXLOOKUPはVLOOKUPを凌駕しています。次の章からは、スプレッドシートでXLOOKUP関数を実際に使用する際の基本的な数式の書き方を解説します!
マスタの列が追加されるたびに「すべてのVLOOKUPの列番号を手動で修正して回る」という作業は、業務中の最大級の無駄です。最初からXLOOKUPを使用しておけば、データ構造が変わっても数式が自動対応してくれます。手戻りのメンテナンス作業をゼロにして、スマートに定時で退勤しましょう。
【基本編】XLOOKUP関数の基本的な書き方と抽出手順
スプレッドシートでXLOOKUP関数を使って、特定のキー(例: 商品コード)から対応するデータ(例: 商品価格)を検索し表示するための基本手順を解説します。VLOOKUPと比べて数式の構造が非常にシンプルになっているのが特徴です。

XLOOKUP関数の基本構文
XLOOKUP関数の基本となる記述ルールは以下の通りです。引数は最大6つありますが、通常の実務では最初の3つ(または4つ)を指定するだけで完璧に動作します。
=XLOOKUP(検索値, 検索範囲, 対応範囲, [見つからない場合])
- 検索値:検索の基準となるデータが入力されているセルを指定します(例:
A2などのコードセル)。 - 検索範囲:マスタデータの中で、検索値を探しに行く「縦1列(または横1行)」のセル範囲を指定します(例:
Master!A2:A10)。 - 対応範囲:見つかったデータに対応する、最終的に取り出したいデータ(値)が並んでいる「縦1列(または横1行)」のセル範囲を指定します(例:
Master!C2:C10)。 - [見つからない場合]:(省略可)検索値が見つからずにエラーになった際、セルの代わりに表示させたいテキストを指定します(例:
"未登録"など)。
ステップで実践するXLOOKUPの入力例
例えば、A列に入力されている「社員ID」を元に、マスタデータ(別シート)からその社員の「部署名」を取得したい場合、以下のような数式を入力します。
- データを表示させたいセルを選択し、
=XLOOKUP(と入力します。 - 同じシート内の社員IDが入力されているセル(例:
A2)をクリックします。これが「検索値」になります。 - マスタデータのシートに画面を切り替え、社員IDがズラッと並んでいる列の範囲(例:
Master!A2:A100)をドラッグして選択します。これが「検索範囲」になります。数式をコピーする時のために$A$2:$A$100と絶対参照にしておくのがポイントです。 - 続けて、マスタデータの中で部署名が並んでいる列の範囲(例:
Master!B2:B100、絶対参照では$B$2:$B$100)を選択します。これが「対応範囲」になります。 - 必要に応じて、カンマで区切った後に
"部署なし"と入力して括弧を閉じ、Enterキーを押します。
=XLOOKUP(A2, Master!$A$2:$A$100, Master!$B$2:$B$100, "部署なし")
- 指定したIDに対応する部署名が一瞬で表示されること
- 社員IDがマスタに存在しない場合に、「#N/A」エラーではなく「部署なし」という親切なメッセージが自動で表示されること
XLOOKUP関数を使う上で絶対に破ってはいけないルールが、「検索範囲と対応範囲の行数(または列数)を同じにすること」です。例えば、検索範囲に Master!A2:A100(99行分)を指定したのに、対応範囲に Master!B2:B90(89行分)と指定して行数がズレてしまうと、関数は配列サイズの不一致と判断し、強制的に「#VALUE!」エラーを返してしまいます。必ず範囲の「開始行」と「終了行」の番号が上下で完全に一致しているか確認しましょう。
【応用編】左方向への検索と「複数列の一括取得(スピル)」の実践
XLOOKUP関数の真骨頂とも言えるのが、VLOOKUPでは不可能だった「検索キーより左側にある列のデータ抽出」と、一度の数式入力で横並びの複数データを一括で吐き出す「スピル(SPILL)」機能です。これら実務で最も役立つ応用テクニックを解説します。

① 制限突破:検索キーの「左側」にあるデータを取得する
VLOOKUPでは、キーとなる列より左側の列の値を取得できないため、複雑な INDEX + MATCH などの組み合わせが必要でした。XLOOKUPであれば、引数の「検索範囲」と「対応範囲」の並び順に制限がないため、単純に指定するだけで左側のデータを検索できます。
例えば、B列にある「商品名」を検索値として、その左側のA列にある「商品コード」を取得したい場合、以下のように記述します。
=XLOOKUP(D2, Master!$B$2:$B$100, Master!$A$2:$A$100)
ここでは、マスタのB列(右)で商品名を検索し、見つかった行のA列(左)の商品コードを返しています。検索キーの位置に関わらず、マスタデータを自由に設計できるため、データベース構築の自由度が飛躍的に高まります。
② 時短効果抜群:複数列のデータを1つの数式で一括取得する(スピル機能)
スプレッドシートで「商品コード」から「商品名」「カテゴリ」「単価」の3つの情報を引っ張りたいとき、VLOOKUPであれば3つのセルそれぞれに異なる数式(列番号を変えたもの)を入力し、下にコピーする必要がありました。
XLOOKUPの「対応範囲」には、「複数列にまたがるセル範囲」を指定することができます。これを行うと、1つのセルに数式を入力するだけで、右隣の空いているセルへ自動的に他のデータが流出(展開)します。この挙動を「スピル(SPILL)」と呼びます。
■ 具体的な入力例:
検索値「商品ID(A2)」を元に、マスタの「商品名(B列)」「カテゴリ(C列)」「単価(D列)」の3つのデータを一括で取得したい場合:
=XLOOKUP(A2, Master!$A$2:$A$100, Master!$B$2:$D$100)
この数式を左端のセル(例: 「商品名」のセル)に入力してEnterキーを押すだけで、右隣の「カテゴリ」「単価」のセルにも自動的にマスタのデータが瞬時に展開されます。数式を入力するのは最初の1セルだけでよいため、コピペの手間や入力ミスの確率を大幅に減らすことができます。
- スピルによってデータが展開される右側のセルには、あらかじめ手動で数値やテキストを入力しておかない(空欄にしておく)こと
- もし展開先にすでに値が入力されている場合、データが干渉してしまいセル全体に「#REF!(展開エリアが空ではありません)」というエラーが表示されてしまうこと
商品名、単価、在庫数などのデータを引っ張るために、何列も似たようなVLOOKUPを書いて調整していた時間は、XLOOKUPのスピル機能を使えばすべて一瞬で終わります。数式の修正が必要になった際も、元の1セルを直すだけで展開先も自動修正されるため、メンテナンスの手間が省け、スマートに定時で退社することができますよ!
スプレッドシートのXLOOKUP関数に関するFAQ
XLOOKUP関数を実際に使用する際に、実務メンバーから出やすい質問やトラブルの解決策をQ&A形式で解説します。
Q1:数式を入力したのに「#NAME?」エラーが表示される原因は?
このエラーは、関数の「スペルミス」が原因であることがほとんどです。
Googleスプレッドシートはクラウド上で常に最新バージョンにアップデートされているため、アカウント種別に関わらず全てのユーザーがXLOOKUP関数を利用できます。それにも関わらず「#NAME?(関数名が認識できない)」と出る場合は、=XLOKUP( のように「O」が1つ抜けていたり、余計なスペースが含まれていないか、数式バーの文字をよく確認してください。
Q2:検索データに同じID(キー)が複数ある場合、どちらの値が抽出されますか?
特に指定しない場合、XLOOKUPは範囲の「上から探して最初に見つかったデータ(最初の一致)」を抽出します。
ただし、XLOOKUPの非常に優れた点として、第6引数「検索モード」に「-1」を指定することで、「範囲の下から(末尾から)逆方向に検索する」ことが可能です。マスタに日々の取引ログが追記されている場合、この設定をするだけで「最新の日付のデータ」を自動的に取得することができるようになります。
=XLOOKUP(A2, Master!A:A, Master!B:B, "なし", 0, -1)
Q3:XLOOKUPを使うとスプレッドシートの動作が重くなることはありますか?
基本的にVLOOKUPと同等かそれ以上に高速ですが、範囲を「A:A」のように列全体で指定しすぎると重くなることがあります。
検索範囲に A:A や B:B といった列全体を指定すると、スプレッドシートは数十万行もの範囲を走査するため、データ量が極端に多い場合に再計算の負荷が高まります。動作の軽さを重視する場合は、$A$2:$A$1000 のように「具体的な行番号」を指定して範囲を必要最小限に制限しておくのがプロの設計です。
まとめ:XLOOKUP関数を使いこなしてデータ抽出業務を完全自動化!
今回は、GoogleスプレッドシートでXLOOKUP関数を使用するための基礎知識と、VLOOKUPとの違い、左方向の検索や複数列の一括取得(スピル)といった実務で即戦力となるテクニックについて解説しました。ポイントをおさらいしておきましょう。
- XLOOKUPは、検索キーの「左側」にあるデータも追加関数なしで自由に検索・取得できる
- 検索範囲と対応範囲を個別指定するため、マスタに列を追加しても数式が壊れない
- エラー処理用の引数(第4引数)が内蔵されており、IFERROR関数を使わずに「データなし」等を制御できる
- 対応範囲に複数列を指定することで、1回の入力で横並びのデータを出力する「スピル」が使える
- 第6引数に「-1」を指定すれば、データの下(末尾)から検索して最新データを抽出できる
データ抽出時にVLOOKUPで感じていた「列番号をカウントする」「エラーが出ないように関数を二重に書く」といった細かなストレスやロスタイムは、XLOOKUPに置き換えるだけで全て綺麗に解消されます。
新しい便利な機能をスマートに取り入れて日々の作業時間を極限まで削り、今日もサクッと定時で退勤しましょう!
スプレッドシートの「スプレッドシートでXLOOKUP関数を使う手順と基本」と合わせてマスターしておくと実務で非常に役立つ、「スプレッドシートでセルにリンクを貼る手順と活用法」の設定手順や、「スプレッドシートのVLOOKUP関数で複数条件を指定する手順」の活用方法について以下の関連記事で詳しく図解しています。作業効率をさらに高めて、サクッと定時で帰るためにぜひ参考にしてみてくださいね。