Googleスプレッドシートの公式ロゴマークとスプレッドシート画面

広告 オフィス・ドキュメント

【初心者向け】スプレッドシートでXLOOKUP関数を使う手順と基本

スプレッドシートでマスタデータから商品名や単価などを検索し、自動的に別の表へ反映させる際、最も有名なのが「VLOOKUP(ブイルックアップ)関数」です。

しかし、VLOOKUPは検索キーより左側にある列のデータを取得できないことや、列番号を数えるのが面倒であること、データが見つからないと#N/Aエラーが出て画面が汚くなるなど、実務においては多くの不便な仕様を抱えていました。

Googleスプレッドシートに追加された「XLOOKUP(エックスルックアップ)関数」は、VLOOKUPの制限を解消するデータ検索用の関数です。

XLOOKUPを使えば、左方向の検索はもちろん、列番号を指定する手間もなくなり、エラー処理も数式内に組み込むことができます。

今回は、XLOOKUP関数の基本的な書き方から、VLOOKUPとの違い、複数列のデータを一括抽出するスピル機能やエラー回避といった応用テクニックまで図解します。

数式の入力ミスを減らし、レポート作成などの実務を効率化させていきましょう。

記事のポイント

  • XLOOKUPは検索値の「左側」にある列のデータもINDEX+MATCH関数なしで検索できる
  • 検索範囲と対応範囲をセル範囲で個別に指定するため列の追加や削除で数式が壊れない
  • デフォルトで完全一致検索を行うため末尾のFALSEを記述し忘れることによる抽出ミスが発生しない

XLOOKUP関数は、VLOOKUP関数が抱えていた弱点を補う新しい機能です。ここでは、実務でどのように役立つのか、そのメリットを詳しく解説します。

XLOOKUP関数とは?VLOOKUPとの違い・メリット

【初心者向け】スプレッドシートでXLOOKUP関数を使う手順と基本 - 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関数の基本的な書き方と抽出手順

XLOOKUP関数の基本的な引数(検索値、検索範囲、対応範囲)を指定してデータを抽出する手順

スプレッドシートでXLOOKUP関数を使って、特定のキー(例: 商品コード)から対応するデータ(例: 商品価格)を検索し表示するための基本手順を解説します。

VLOOKUPと比べて数式の構造が非常にシンプルになっているのが特徴です。

XLOOKUP関数の基本構文

XLOOKUP関数の基本となる記述ルールは以下の通りです。引数は最大6つありますが、通常の実務では最初の3つ(または4つ)を指定するだけで完璧に動作します。

=XLOOKUP(検索値, 検索範囲, 対応範囲, [見つからない場合])
  • 検索値:検索の基準となるデータが入力されているセルを指定します(例: A2 などのコードセル)。
  • 検索範囲:マスタデータの中で、検索値を探しに行く「縦1列(または横1行)」のセル範囲を指定します(例: Master!A2:A10)。
  • 対応範囲:見つかったデータに対応する、最終的に取り出したいデータ(値)が並んでいる「縦1列(または横1行)」のセル範囲を指定します(例: Master!C2:C10)。
  • [見つからない場合]:(省略可)検索値が見つからずにエラーになった際、セルの代わりに表示させたいテキストを指定します(例: "未登録" など)。

ステップで実践するXLOOKUPの入力例

例えば、A列に入力されている「社員ID」を元に、マスタデータ(別シート)からその社員の「部署名」を取得したい場合、以下のような数式を入力します。

  1. データを表示させたいセルを選択し、=XLOOKUP( と入力します。
  2. 同じシート内の社員IDが入力されているセル(例: A2)をクリックします。これが「検索値」になります。
  3. マスタデータのシートに画面を切り替え、社員IDがズラッと並んでいる列の範囲(例: Master!A2:A100)をドラッグして選択します。これが「検索範囲」になります。数式をコピーする時のために $A$2:$A$100 と絶対参照にしておくのがポイントです。
  4. 続けて、マスタデータの中で部署名が並んでいる列の範囲(例: Master!B2:B100、絶対参照では $B$2:$B$100)を選択します。これが「対応範囲」になります。
  5. 必要に応じて、カンマで区切った後に "部署なし" と入力して括弧を閉じ、Enterキーを押します。
=XLOOKUP(A2, Master!$A$2:$A$100, Master!$B$2:$B$100, "部署なし")

ポイント

数式設定後の動作チェック
・指定したIDに対応する部署名が一瞬で表示されること
・社員IDがマスタに存在しない場合に、「#N/A」エラーではなく「部署なし」という親切なメッセージが自動で表示されること

KYO
KYO

昔、社員IDマスタの更新中に、検索範囲(A列)と対応範囲(B列)のドラッグ範囲を行単位で1行ずらして設定してしまったことがあります。エラーにならなかったため気付かず、全社員の所属部署が1つずつズレた社員リストを出力してしまい、大問題になりました…。

検索範囲と対応範囲のサイズを必ず一致させること!
XLOOKUP関数を使う上で絶対に破ってはいけないルールが、「検索範囲と対応範囲の行数(または列数)を同じにすること」です。例えば、検索範囲に Master!A2:A100(99行分)を指定したのに、対応範囲に Master!B2:B90(89行分)と指定して行数がズレてしまうと、関数は配列サイズの不一致と判断し、強制的に「#VALUE!」エラーを返してしまいます。必ず範囲の「開始行」と「終了行」の番号が上下で完全に一致しているか確認しましょう。

次は、さらに便利なXLOOKUPの応用テクニックについて見ていきましょう。

【応用編】左方向への検索と「複数列の一括取得(スピル)」の実践

XLOOKUP関数で左側のデータを検索したり、複数の戻り値列を一発で抽出する応用手順

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!(展開エリアが空ではありません)」というエラーが表示されてしまうこと

次は、ツールのアップデートに伴うトラブル回避方法について解説します。

【要注意】アップデートによる最新仕様への対応

ツールの最新仕様変更への対応

近年、チャットツールや表計算ソフトなど多くのSaaSツールにおいて、高頻度でUI(ユーザーインターフェース)や内部仕様のアップデートが実施されています。

これにより、「機能の設定メニューの位置が変わった」「ショートカットキーの挙動が変わった」といったトラブルが報告されることがあります。正確な最新の仕様については公式サイトも併せてご確認ください。

特にWebブラウザ版やスマホアプリ版では、キャッシュデータの蓄積が原因で「ボタンが押せない」「設定が反映されない」といった不具合を引き起こすことがあります。

このような動作不良に遭遇した場合は、アプリの再起動だけでなく、ブラウザのシークレットウィンドウでの動作確認や、キャッシュ(一時データ)の削除を行うことで解決する場合があります。

最後に、よくある質問にお答えします。

スプレッドシートの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:AB:B といった列全体を指定すると、スプレッドシートは数十万行もの範囲を走査するため、データ量が極端に多い場合に再計算の負荷が高まります。

動作の軽さを重視する場合は、$A$2:$A$1000 のように「具体的な行番号」を指定して範囲を必要最小限に制限しておくのがプロの設計です。

  • この記事を書いた人

KYO

現役のシステムエンジニア。普段は企業向けの開発やツールの自動化を専門にしています。データの仕組みを知り尽くしたプロの視点から、スプレッドシートやExcel、Notion、AIツールの「本当に役立つ時短テクニック」を初心者向けに分かりやすく解説中!

-オフィス・ドキュメント