Excel中級者

XLOOKUP関数の使い方完全ガイド|VLOOKUPとの違い・複数条件・VBA実装まで

Excel XLOOKUP関数とVLOOKUPの違いを完全比較するサムネイル画像
しんたろ。

VLOOKUPの後継関数XLOOKUP、左方向検索もエラー処理もこれ1つでOKです!

この記事でわかること
  • XLOOKUP関数の構文と6つの引数の意味
  • VLOOKUPとの違い5つを比較表で理解
  • 左方向検索・複数条件・横方向検索の実践テクニック
  • XLOOKUPが使えない環境での代替方法
  • VBAでXLOOKUP相当の処理を実装する方法
  • よくあるエラーの原因と解決策
この操作、VBAで一瞬で自動化できます

まずは関数の使い方を解説し、最後にVBA自動化コードも紹介します

‘ 商品コードから商品名を検索するマクロ
Sub XLookupBasicExample()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim searchValue As String
    Dim result As Variant
    searchValue = ws.Range(“F2”).Value
    On Error Resume Next
    result = Application.WorksheetFunction.XLookup( _
        searchValue, ws.Range(“A2:A6”), ws.Range(“B2:B6”), _
        “該当する商品がありません”)
    On Error GoTo 0
    MsgBox searchValue & ” の商品名: “ & result
End Sub
商品コードを選択して「マクロを実行する」を押してください
📊 商品マスタ.xlsx – Excel
AB
1 商品コード商品名
2 A001ノートパソコン
3 A002マウス
4 A003キーボード
5 A004モニター
6 A005USBハブ
8 検索コード (F2):
Sheet1準備完了

XLookup結果 (A001):
📦 ノートパソコン
XLookup結果 (A002):
🖰 マウス
XLookup結果 (A003):
⌨️ キーボード
XLookup結果 (A004):
🖼️ モニター
XLookup結果 (A005):
🔌 USBハブ
XLOOKUPで商品名を取得しました! VLOOKUPと違い、列番号指定が不要で直感的に書けます。

‘ 全バージョン対応:自作XLOOKUP関数(UDF)
Function MyXLookup( _
    searchValue As Variant, _
    searchRange As Range, _
    returnRange As Range, _
    Optional notFound As Variant = “” _
) As Variant
    Dim i As Long
    For i = 1 To searchRange.Rows.Count
        If searchRange.Cells(i, 1).Value = searchValue Then
            MyXLookup = returnRange.Cells(i, 1).Value
            Exit Function
        End If
    Next i
    MyXLookup = notFound ‘ 見つからない場合
End Function
社員名を選択すると =MyXLookup() の結果が変わります
📊 社員マスタ.xlsx – Excel
AB
1社員番号氏名
2E001山田太郎
3E002佐藤花子
4E003田中一郎
5E004鈴木美咲
6E005中村健太
FG(結果)
2 =MyXLookup(F2, B:B, A:A, “未登録”)
Sheet1ユーザー定義関数で検索
💡 MyXLookup関数が結果を返しました 「未登録」は notFound 引数による戻り値です。Excel 2019以前でも動作します。

‘ VLOOKUP → XLOOKUP 一括変換マクロ
Sub ConvertVlookupToXlookup()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim cell As Range
    Dim convertCount As Long
    For Each cell In ws.UsedRange
        If cell.HasFormula Then
            If InStr(UCase(cell.Formula), “VLOOKUP”) > 0 Then
                cell.Interior.Color = RGB(255, 255, 200)
                convertCount = convertCount + 1
            End If
        End If
    Next cell
    MsgBox convertCount & ” 個のVLOOKUP数式を検出しました”
End Sub
マクロがVLOOKUP数式を検出してハイライトします
📊 変換対象.xlsx – Excel
AB(数式)
2商品名 =VLOOKUP(A2,マスタ!A:C,2,FALSE)
3単価 =VLOOKUP(A3,マスタ!A:C,3,FALSE)
4在庫数 =VLOOKUP(A4,マスタ!A:C,4,FALSE)
5担当者 =VLOOKUP(A5,担当者表!A:B,2,FALSE)
6カテゴリ =VLOOKUP(A6,カテゴリ表!A:B,2,FALSE)
7合計 =SUM(B2:B6) ← VLOOKUP以外はスキップ
Sheet15個のVLOOKUPを検出
💡 VLOOKUP → XLOOKUP 変換ガイド(5件検出)
変換前(VLOOKUP) 変換後(XLOOKUP)
=VLOOKUP(A2,マスタ!A:C,2,FALSE) =XLOOKUP(A2,マスタ!A:A,マスタ!B:B)
=VLOOKUP(A3,マスタ!A:C,3,FALSE) =XLOOKUP(A3,マスタ!A:A,マスタ!C:C)

⚠️ 複雑な数式は手動確認を推奨します

5個のVLOOKUP数式を検出しハイライトしました! 黄色セルを確認してXLOOKUPへの変換ポイントを把握できます。
この記事の目次
  1. XLOOKUPとは?VLOOKUPの後継関数を30秒で理解
  2. XLOOKUPとVLOOKUPの違い5つ【比較表つき】
  3. XLOOKUP関数の基本的な使い方【ステップ図解】
  4. XLOOKUP関数の実践テクニック【業務で使える応用例】
  5. XLOOKUPが使えないときの代替策
  6. VBAでXLOOKUP相当の処理を実装する方法
  7. よくあるエラーと解決法【トラブルシューティング】
  8. Googleスプレッドシートでの使い方
  9. INDEX+MATCH・FILTER関数との使い分け
  10. よくある質問(FAQ)
  11. まとめ
  12. LINEでExcelを気軽に学べる

XLOOKUPとは?VLOOKUPの後継関数を30秒で理解

XLOOKUP関数は、Excel 2021・Microsoft 365で追加されたVLOOKUPの後継となる検索関数です。VLOOKUPで不便だった「左方向に検索できない」「エラー処理にIFERRORが必要」といった制約がすべて解消されています。

従来のVLOOKUP関数は「検索値が左端列にある」という制約があり、データの配置を変えなければならないケースがありました。XLOOKUP関数なら、検索範囲と戻り範囲を自由に指定できるため、どの方向でも検索が可能です。

XLOOKUP関数の構文(6つの引数を図解)

XLOOKUP関数の構文は以下の通りです。

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

各引数の意味を確認しましょう。

引数必須/任意説明
検索値必須探したい値(セル参照または直接入力)
検索範囲必須検索値を探す範囲(1列または1行)
戻り範囲必須結果として返す範囲(複数列/行も可)
見つからない場合任意一致しない場合に返す値(省略すると#N/A)
一致モード任意0=完全一致(既定)、-1=次に小さい値、1=次に大きい値、2=ワイルドカード
検索モード任意1=先頭から(既定)、-1=末尾から、2=昇順バイナリ、-2=降順バイナリ

実際の業務では、最初の3つの引数(検索値・検索範囲・戻り範囲)だけで使えるケースがほとんどです。第4引数の「見つからない場合」を指定しておくと、IFERROR関数が不要になるため非常に便利です。

使えるバージョンと確認方法(365/2021/2024)

XLOOKUP関数が使えるExcelのバージョンは以下の通りです。

バージョンXLOOKUP対応
Microsoft 365対応
Excel 2024対応
Excel 2021対応
Excel 2019非対応
Excel 2016非対応
Excel for Mac (365)対応
Excel Online対応

自分のExcelバージョンを確認するには、「ファイル」→「アカウント」を開きます。「製品情報」の欄にバージョン番号が表示されます。Excel 2019以前の場合は、後述する代替策(INDEX+MATCH)を使いましょう。

📊 XLOOKUPとVLOOKUPの違いを体験してみよう!

検索値を選択すると、両関数の結果の違いがわかります(JavaScript不使用・CSS-onlyデモ)。

📊 商品マスタ.xlsx – Excel
ABCD
1 商品コード 商品名 単価 在庫
2 A001 ノートPC 89,800 15
3 A002 マウス 2,980 120
4 A003 キーボード 7,500 45
5 A004 モニター 34,800 8
6 A005 USBメモリ 1,200 200
準備完了 Sheet1
🔍 検索値を選択してください:

XLOOKUP

=XLOOKUP(“A001”,
A:A, B:B)
ノートPC

VLOOKUP

=VLOOKUP(“A001”,
A:D, 2, FALSE)
ノートPC
POINT 基本の正引きはどちらも同じ結果。XLOOKUPは「検索列」と「戻り列」を個別指定できるのがポイント。

XLOOKUP

=XLOOKUP(“ノートPC”,
B:B, A:A)
A001

VLOOKUP

=VLOOKUP(“ノートPC”,
B:D, ???)
#N/A
XLOOKUP の強み VLOOKUPは検索列より左の列を返せません。XLOOKUPなら検索列と戻り列を自由に指定できるため、左方向検索も簡単です。

XLOOKUP

=XLOOKUP(“A999”,
A:A, B:B, “該当なし”)
該当なし

VLOOKUP

=VLOOKUP(“A999”,
A:D, 2, FALSE)
#N/A
XLOOKUP の強み XLOOKUPは第4引数で「見つからない場合」の値を直接指定可能。VLOOKUPではIFERROR関数で囲む必要があります。

XLOOKUPとVLOOKUPの違い5つ【比較表つき】

XLOOKUP関数とVLOOKUP関数には、大きく5つの違いがあります。まずは比較表で全体像をつかんでください。

比較項目VLOOKUPXLOOKUP
検索方向左端列→右方向のみ左右どちらでもOK
エラー処理IFERRORが必要第4引数で指定可能
複数列取得1列ずつ指定スピルで一括取得
一致モードTRUE/FALSEの2択完全一致/近似/ワイルドカード
範囲指定テーブル全体を指定検索列と戻り列を個別指定
対応バージョン全バージョンExcel 2021以降/365

検索方向の違い(左方向検索が可能に)

VLOOKUPの最大の弱点は「検索値が範囲の左端列にないと検索できない」ことでした。例えば、商品名(B列)から商品コード(A列)を逆引きしたい場合、VLOOKUPでは対応できません。

XLOOKUPなら、検索範囲と戻り範囲を自由に指定できるため、左方向でも右方向でも問題なく検索できます。

' VLOOKUPでは不可能(左方向検索)
' → エラーになる

' XLOOKUPなら簡単
=XLOOKUP(D2, B:B, A:A)
' B列(商品名)で検索 → A列(商品コード)を返す

エラー処理の違い(IFERRORが不要に)

VLOOKUP関数で検索値が見つからないと「#N/A」エラーが表示されます。これを防ぐにはIFERROR関数で数式を囲む必要がありました。

' VLOOKUP: IFERROR関数が必要
=IFERROR(VLOOKUP(D2, A:C, 2, FALSE), "該当なし")

' XLOOKUP: 第4引数で直接指定できる
=XLOOKUP(D2, A:A, B:B, "該当なし")

XLOOKUP関数の第4引数に「見つからない場合の値」を設定するだけなので、数式がシンプルになります。IFERROR関数についてはIFERROR関数の使い方で詳しく解説しています。

スピル機能(複数列を一括取得)

VLOOKUPでは「列番号」で1列ずつ指定する必要がありました。商品名と価格の両方を取得するには、VLOOKUPを2つ書く必要があります。

XLOOKUPでは、戻り範囲に複数列を指定すると、スピル(自動展開)で隣のセルにも結果が表示されます。

' VLOOKUP: 2回書く必要がある
=VLOOKUP(D2, A:C, 2, FALSE)  ' 商品名
=VLOOKUP(D2, A:C, 3, FALSE)  ' 価格

' XLOOKUP: 1回で複数列を取得
=XLOOKUP(D2, A:A, B:C)
' → B列(商品名)とC列(価格)が同時に返る

一致モードの違い(ワイルドカード/近似一致)

VLOOKUPの第4引数はTRUE(近似一致)またはFALSE(完全一致)の2択でした。XLOOKUPでは、第5引数で4つのモードから選択できます。

モード用途
0完全一致(既定)通常の業務で最も使う
-1次に小さい値料金表・送料表の区間検索
1次に大きい値在庫引当・上限チェック
2ワイルドカード一致部分一致検索(*や?を使用)

特にワイルドカード一致(値:2)を使うと、「東京*」のような部分一致検索が可能になります。

どっちを使うべき?判断フローチャート

VLOOKUPとXLOOKUPのどちらを使うべきか迷ったら、以下の判断基準で選んでください。

  • Excel 2019以前を使っている → VLOOKUPを使う(XLOOKUPは使えない)
  • 他の人とファイルを共有する → 相手のバージョンを確認。2019以前の人がいればVLOOKUP
  • 365/2021以降で自分だけが使う → XLOOKUPがおすすめ
  • 左方向検索やエラー処理が必要 → XLOOKUP一択

VLOOKUPの基本的な使い方はVLOOKUP関数の使い方完全ガイドで解説しています。

XLOOKUP関数の基本的な使い方【ステップ図解】

ここからは、実際のデータを使ってXLOOKUP関数の基本操作を解説します。以下の商品マスタを例に進めます。

A列:商品コードB列:商品名C列:価格D列:在庫数
P001ノートPC8980015
P002マウス2980120
P003キーボード548085
P004モニター348008
P005USBハブ1980200

F2セルに商品コード「P003」が入力されている場合、G2セルに以下の数式を入力します。

=XLOOKUP(F2, A2:A6, B2:B6)

この数式は「F2セルの値(P003)をA2:A6から探し、同じ行のB2:B6の値を返す」という意味です。結果として「キーボード」が返されます。

VLOOKUPとの大きな違いは、検索範囲と戻り範囲を別々に指定する点です。VLOOKUPのように「テーブル全体+列番号」ではなく、「どこを検索して」「どこを返すか」を直感的に指定できます。

逆引き(名前からコードを検索)– VLOOKUPでは不可能な操作

商品名「モニター」から商品コードを逆引きする場合、以下の数式を使います。

=XLOOKUP(F2, B2:B6, A2:A6)

検索範囲がB列(商品名)、戻り範囲がA列(商品コード)です。B列→A列の左方向検索なので、VLOOKUPでは絶対にできない操作です。結果として「P004」が返されます。

この左方向検索は、XLOOKUPに切り替える最大のメリットの一つです。

見つからない場合のメッセージ表示(第4引数)

検索値が見つからないとき、VLOOKUPでは#N/Aエラーが表示されます。XLOOKUPなら第4引数で「見つからない場合の値」を指定できます。

=XLOOKUP(F2, A2:A6, B2:B6, "該当する商品がありません")

F2セルに存在しないコード(例: P999)を入力すると、#N/Aエラーの代わりに「該当する商品がありません」というメッセージが表示されます。

この機能のおかげで、IFERROR関数を使わずにエラー処理が完結します。数式がシンプルになり、メンテナンスも楽になります。

XLOOKUP関数の実践テクニック【業務で使える応用例】

基本を押さえたところで、実際の業務で役立つ応用テクニックを紹介します。

別シート・別ファイルからのデータ参照

商品マスタが別シート(「マスタ」シート)にある場合は、シート名を付けて範囲を指定します。

=XLOOKUP(A2, マスタ!B:B, マスタ!C:C, "未登録")

別ファイル(ブック)のデータを参照する場合は、ファイル名も含めます。

=XLOOKUP(A2, [商品マスタ.xlsx]Sheet1!$B:$B, [商品マスタ.xlsx]Sheet1!$C:$C, "未登録")

別ファイルを参照する場合、そのファイルが開いている状態で数式を入力すると、自動でファイルパスが補完されます。

複数条件での検索(XLOOKUP + &結合)

「部署」と「役職」の2つの条件でデータを検索したい場合、&演算子で検索値と検索範囲を結合します。

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

この数式のポイントは以下の通りです。

  • E2&F2: 検索値として「部署名+役職名」を結合
  • A2:A100&B2:B100: 検索範囲もA列とB列を結合して照合
  • この数式はスピル配列数式として動作するため、Ctrl+Shift+Enterは不要です

複数条件でのVLOOKUPについては複数条件でのVLOOKUPでも詳しく解説しています。

0を表示しない設定

XLOOKUP関数で空白セルを参照すると、結果に「0」が表示されることがあります。これを防ぐには、IF関数と組み合わせます。

=IF(XLOOKUP(F2, A:A, C:C)=0, "", XLOOKUP(F2, A:A, C:C))

あるいは、LET関数を使うとXLOOKUPを1回の評価で済ませられます。

=LET(result, XLOOKUP(F2, A:A, C:C, ""), IF(result=0, "", result))

横方向検索(HLOOKUP代替)

XLOOKUPは横方向の検索にも対応しています。月別の売上データなど、行方向にデータが並んでいる場合に使います。

=XLOOKUP(H1, B1:G1, B2:G2)

この数式は「H1セルの値(例: “3月”)をB1:G1(月の見出し行)から探し、同じ列のB2:G2(売上データ行)の値を返す」という意味です。HLOOKUP関数の代わりとして使えます。

XLOOKUPが使えないときの代替策

Excel 2019以前やExcel for Mac(買い切り版)ではXLOOKUP関数が使えません。ここでは、同等の処理を実現する代替方法を紹介します。

INDEX + MATCH関数で同等の処理を行う方法

INDEX+MATCH関数の組み合わせは、XLOOKUPと同じく左方向検索が可能で、全バージョンのExcelで使えます。

' XLOOKUP版
=XLOOKUP(F2, A2:A6, B2:B6, "該当なし")

' INDEX+MATCH版(同じ結果)
=IFERROR(INDEX(B2:B6, MATCH(F2, A2:A6, 0)), "該当なし")

INDEX+MATCHの構文は以下の通りです。

  • MATCH(F2, A2:A6, 0): F2の値がA2:A6の何行目にあるかを返す
  • INDEX(B2:B6, 行番号): B2:B6のn行目の値を返す
  • エラー処理にはIFERROR関数が必要

XLOOKUPと比べると数式がやや長くなりますが、機能面ではほぼ同等です。左方向検索もできるため、VLOOKUPの制約を回避できます。

VLOOKUP + IFERRORで代替する方法

左方向検索が不要な場合は、従来のVLOOKUP+IFERRORの組み合わせで十分対応できます。

' XLOOKUP版
=XLOOKUP(F2, A2:A6, C2:C6, "該当なし")

' VLOOKUP+IFERROR版(同じ結果)
=IFERROR(VLOOKUP(F2, A2:D6, 3, FALSE), "該当なし")

ファイルを共有する相手がExcel 2019以前を使っている場合は、互換性を考慮してVLOOKUP版を使いましょう。IF関数との組み合わせについてはIF関数の使い方で解説しています。

Excelのバージョンを確認・アップグレードする方法

XLOOKUPを使いたい場合、Microsoft 365へのアップグレードが最も手軽です。

  • Microsoft 365 Personal: 月額1,490円で常に最新版のExcelが利用可能
  • Microsoft 365 Business: 法人向け。1ユーザーあたり月額750円~
  • Excel 2024(買い切り): 一度の購入でXLOOKUPが使える

法人環境では情報システム部門に相談し、ライセンスのアップグレードを検討してください。

VBAでXLOOKUP相当の処理を実装する方法

VBAマクロからXLOOKUP関数を利用する方法と、独自の検索関数を作成する方法を紹介します。VBAの基本についてはVBAプロシージャの基本を参照してください。

💡 VBAの実行結果は記事冒頭のインタラクティブデモで確認できます。

WorksheetFunction.XLookupの使い方

Excel 2021以降/365であれば、VBAからWorksheetFunction.XLookupを直接呼び出せます。

Sub XLookupBasicExample()
    '======================================
    ' 商品コードから商品名を検索するマクロ
    ' 対応: Excel 2021以降 / Microsoft 365
    '======================================
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim searchValue As String
    Dim result As Variant

    ' 検索値を取得(F2セル)
    searchValue = ws.Range("F2").Value

    ' XLOOKUPを実行
    On Error Resume Next
    result = Application.WorksheetFunction.XLookup( _
        searchValue, _
        ws.Range("A2:A6"), _
        ws.Range("B2:B6"), _
        "該当する商品がありません")
    On Error GoTo 0

    ' 結果を表示
    If IsError(result) Then
        MsgBox "検索中にエラーが発生しました", vbExclamation
    Else
        MsgBox searchValue & " の商品名: " & result, vbInformation
    End If
End Sub

On Error Resume Nextを使っている理由は、WorksheetFunction.XLookupがExcel 2019以前で実行時エラーになるためです。エラーハンドリングを入れておくことで、バージョンに関係なく安全に動作します。

VBAで独自XLOOKUP関数を作成する

Excel 2019以前でも使える、XLOOKUPと同等の機能を持つユーザー定義関数(UDF)を作成します。

Function MyXLookup( _
    searchValue As Variant, _
    searchRange As Range, _
    returnRange As Range, _
    Optional notFound As Variant = "" _
) As Variant
    '======================================
    ' 自作XLOOKUP関数(全バージョン対応)
    ' 検索範囲と戻り範囲を自由に指定可能
    ' 使用例: =MyXLookup(F2, B:B, A:A, "未登録")
    '======================================
    Dim i As Long
    Dim cell As Range

    ' 検索範囲と戻り範囲の行数チェック
    If searchRange.Rows.Count <> returnRange.Rows.Count Then
        MyXLookup = CVErr(xlErrValue)
        Exit Function
    End If

    ' 検索実行
    For i = 1 To searchRange.Rows.Count
        If searchRange.Cells(i, 1).Value = searchValue Then
            MyXLookup = returnRange.Cells(i, 1).Value
            Exit Function
        End If
    Next i

    ' 見つからない場合
    If IsMissing(notFound) Then
        MyXLookup = CVErr(xlErrNA)
    Else
        MyXLookup = notFound
    End If
End Function

この関数をVBAモジュールに追加すると、ワークシート上で以下のように使えます。

=MyXLookup(F2, B2:B6, A2:A6, "未登録")

左方向検索も可能で、第4引数で見つからない場合の値も指定できます。Excel 2016や2019でも動作するため、互換性を保ちながらXLOOKUP相当の機能が使えます。

VLOOKUP→XLOOKUP一括変換マクロ

既存のシートに入っているVLOOKUP数式を、XLOOKUPに一括変換するマクロです。

Sub ConvertVlookupToXlookup()
    '======================================
    ' VLOOKUP → XLOOKUP 一括変換マクロ
    ' アクティブシートの全VLOOKUPを変換
    ' 対応: Excel 2021以降 / Microsoft 365
    '======================================
    Dim ws As Worksheet
    Set ws = ActiveSheet

    Dim cell As Range
    Dim formula As String
    Dim convertCount As Long
    convertCount = 0

    ' 使用範囲内の全セルをチェック
    For Each cell In ws.UsedRange
        If cell.HasFormula Then
            formula = cell.formula

            ' VLOOKUPを含む数式を検出
            If InStr(UCase(formula), "VLOOKUP") > 0 Then
                ' 変換対象として記録(黄色でハイライト)
                cell.Interior.Color = RGB(255, 255, 200)
                convertCount = convertCount + 1
            End If
        End If
    Next cell

    If convertCount = 0 Then
        MsgBox "VLOOKUP数式は見つかりませんでした。", vbInformation
        Exit Sub
    End If

    ' 確認メッセージ
    Dim answer As VbMsgBoxResult
    answer = MsgBox( _
        convertCount & " 個のVLOOKUP数式が見つかりました。" & vbCrLf & _
        "黄色でハイライトされたセルを確認してください。" & vbCrLf & vbCrLf & _
        "※ 自動変換は数式構造が複雑な場合に正しく動作しない" & vbCrLf & _
        "  可能性があります。変換後は必ず結果を確認してください。" & vbCrLf & vbCrLf & _
        "ハイライトを解除しますか?", _
        vbYesNo + vbQuestion, "VLOOKUP検出結果")

    If answer = vbYes Then
        For Each cell In ws.UsedRange
            If cell.Interior.Color = RGB(255, 255, 200) Then
                cell.Interior.ColorIndex = xlNone
            End If
        Next cell
    End If

    MsgBox "検出完了: " & convertCount & " 個のVLOOKUP数式" & vbCrLf & _
        "手動でXLOOKUPに置き換えてください。" & vbCrLf & vbCrLf & _
        "変換例:" & vbCrLf & _
        "  VLOOKUP(A1, B:D, 2, FALSE)" & vbCrLf & _
        "  → XLOOKUP(A1, B:B, C:C)", _
        vbInformation, "変換ガイド"
End Sub

このマクロはVLOOKUP数式を検出してハイライト表示し、変換ガイドを表示します。数式構造の自動変換はリスクが高いため、検出+ガイド方式を採用しています。VBAの次のステップとして、GAS(Google Apps Script)での自動化にも挑戦してみましょう。詳しくはGAS入門ガイドをご覧ください。

よくあるエラーと解決法【トラブルシューティング】

XLOOKUP関数で表示されるエラーと、その原因・対処法をまとめます。

#N/Aエラーの原因と対処

#N/Aエラーは「検索値が見つからない」ときに表示されます。主な原因は以下の通りです。

  • 検索値のスペルミス: 全角・半角の違い、余分なスペースが原因になることが多い
  • データ型の不一致: 数値と文字列が混在(例: 数値の1と文字列の”1″)
  • 検索範囲の指定ミス: 検索値が含まれていない範囲を指定している

対処法: 第4引数にエラー時の表示を設定するか、TRIM関数で余分なスペースを除去します。

' スペースを除去して検索
=XLOOKUP(TRIM(F2), A2:A6, B2:B6, "該当なし")

VLOOKUPのエラー対処法はVLOOKUPのエラー対処法でも詳しく解説しています。

#VALUE!エラーの原因と対処

#VALUE!エラーは、引数の指定に問題がある場合に表示されます。

  • 検索範囲と戻り範囲のサイズが不一致: 行数が違うと#VALUE!エラー
  • 検索範囲が複数列になっている: 検索範囲は1列(または1行)のみ指定可能

対処法: 検索範囲と戻り範囲の行数を揃え、検索範囲は必ず1列のみ指定してください。

' NG: 検索範囲と戻り範囲のサイズが違う
=XLOOKUP(F2, A2:A6, B2:B10)

' OK: サイズを揃える
=XLOOKUP(F2, A2:A6, B2:B6)

#SPILL!エラーの原因と対処

#SPILL!エラーは、スピル(自動展開)先のセルにデータが入っている場合に表示されます。

例えば、戻り範囲に複数列(B:C)を指定した場合、隣のセルが空いていないとスピルできません。

対処法: スピル先のセルを空にするか、戻り範囲を1列に変更します。

「この関数は使えません」と表示される場合

セルに「#NAME?」エラーが表示される場合、ExcelがXLOOKUP関数を認識できていません。

  • Excel 2019以前を使用中: 代替策(INDEX+MATCH)を使いましょう
  • 関数名のタイプミス: 「XLOOKUP」が正しいスペルか確認
  • Office更新が必要: 365ユーザーは「ファイル」→「アカウント」→「更新オプション」から最新版に更新

Googleスプレッドシートでの使い方

GoogleスプレッドシートでもXLOOKUP関数は利用可能です。構文はExcel版と同じですが、一部の制限事項があります。

スプシ版XLOOKUPの制限事項

  • 検索モード(第6引数): バイナリ検索(2, -2)は使用不可
  • パフォーマンス: 大量データでの処理速度はExcelの方が高速
  • スピル動作: Excelのスピルとは動作が若干異なる場合がある

基本的な使い方はExcelと同じなので、通常の検索用途では問題なく使えます。

=XLOOKUP(D2, A2:A6, B2:B6, "該当なし")

スプシならQUERY関数がおすすめ

Googleスプレッドシートでは、QUERY関数を使うとSQLライクな構文でデータを柔軟に検索・抽出できます。複雑な条件付き検索や複数行の結果取得にはQUERY関数の方が向いています。

=QUERY(A1:D6, "SELECT B, C WHERE A = '"&F2&"'", 0)

この数式は「A列がF2セルの値と一致する行のB列・C列を返す」という意味です。複数列の取得や条件の組み合わせが得意なので、スプレッドシートではXLOOKUPと使い分けると効率的です。QUERY関数の詳しい使い方はQUERY関数の使い方完全ガイドを参照してください。

INDEX+MATCH・FILTER関数との使い分け

XLOOKUPと同じく高機能な検索関数であるINDEX+MATCHとFILTER関数を、用途別に比較します。

XLOOKUP vs INDEX+MATCH 比較

比較項目XLOOKUPINDEX+MATCH
読みやすさ直感的で分かりやすい2関数の組み合わせで複雑
左方向検索可能可能
エラー処理引数で指定(IFERROR不要)IFERROR関数が必要
対応バージョンExcel 2021以降/365全バージョン
処理速度やや高速同等(大量データでは差が出る)
複数列取得スピルで一括列ごとに数式が必要

新規で数式を作る場合はXLOOKUPがおすすめです。ただし、Excel 2019以前との互換性が必要な場合はINDEX+MATCHを選びましょう。

XLOOKUP vs FILTER関数 比較

比較項目XLOOKUPFILTER
用途1件の結果を取得条件に合う全行を抽出
戻り値1つの値(またはスピルで1行)複数行を一括返却
複数条件&結合で対応*演算子で自然に記述
適したケース一意のIDで1件検索条件に合う全データを一覧表示

使い分けの目安は以下の通りです。

  • 1件だけ取得したい(商品コードで価格を検索など)→ XLOOKUP
  • 条件に合う全件を抽出したい(部署ごとの社員一覧など)→ FILTER関数
  • 集計が目的(条件に合うデータの個数を数える)→ COUNTIFS関数

よくある質問(FAQ)

Q. XLOOKUPはExcel 2019で使えますか?

いいえ、Excel 2019ではXLOOKUP関数は使えません。XLOOKUP関数はExcel 2021以降、またはMicrosoft 365サブスクリプション版で利用可能です。Excel 2019をお使いの場合は、INDEX+MATCH関数の組み合わせで同等の処理を実現できます。Microsoft 365にアップグレードする方法もあります。

Q. VLOOKUPとXLOOKUPのどちらを使うべきですか?

Excel 2021以降や365を使っていて、ファイルの共有先も同じバージョンであればXLOOKUPがおすすめです。左方向検索やエラー処理が簡単になり、数式もシンプルになります。ただし、Excel 2019以前のユーザーとファイルを共有する場合はVLOOKUPを使いましょう。XLOOKUPの数式は古いバージョンで開くとエラーになります。

Q. XLOOKUPでIF関数は不要になりますか?

完全に不要にはなりませんが、使う場面は大幅に減ります。XLOOKUP関数の第4引数(見つからない場合の値)でエラー処理が完結するため、IFERROR関数は不要になります。ただし、「検索結果に応じて表示を切り替える」といった分岐処理には、引き続きIF関数が必要です。

Q. XLOOKUPの動作が重い場合の対処法は?

以下の方法で処理速度を改善できます。まず、検索範囲を列全体(A:A)ではなく必要な行だけ(A2:A1000)に限定します。次に、データが並べ替え済みであれば、第6引数に「2」(昇順バイナリ検索)を指定すると大幅に高速化されます。また、数式が大量にある場合は、手動計算モード(数式タブ→計算方法→手動)に切り替えるのも効果的です。

Q. XLOOKUPを使ったファイルをExcel 2016で開くとどうなりますか?

XLOOKUP関数が含まれるセルには「#NAME?」エラーが表示されます。関数自体が認識されないため、計算結果が見られなくなります。共有先のExcelバージョンが古い場合は、事前にVLOOKUPやINDEX+MATCHに書き換えるか、数式の結果を「値として貼り付け」で固定してから渡しましょう。

まとめ

この記事では、XLOOKUP関数の使い方を基本から応用、VBA実装まで解説しました。

XLOOKUP関数のポイントまとめ
  • 基本構文: =XLOOKUP(検索値, 検索範囲, 戻り範囲) の3引数で使える
  • 左方向検索: VLOOKUPでは不可能だった逆引きが簡単にできる
  • エラー処理: 第4引数で「見つからない場合」を指定(IFERROR不要)
  • スピル対応: 戻り範囲に複数列を指定して一括取得が可能
  • 互換性: Excel 2021以降/365のみ対応。旧バージョンはINDEX+MATCHで代替
  • VBA対応: WorksheetFunction.XLookupで直接呼び出し可能

XLOOKUP関数はVLOOKUPの弱点をすべて解消した強力な関数です。Excel 2021以降をお使いなら、積極的にXLOOKUPに切り替えていきましょう。


Excelスキルを活かしてSNS運用も自動化しませんか?

Excelの関数をマスターしたあなたなら、Googleスプレッドシート×GAS(Google Apps Script)を使ったSNS自動化ツールもすぐに使いこなせます。X(Twitter)やThreadsの予約投稿を、月額0円で自動化する方法をまとめています。

SNS予約投稿ツール完全ガイド|無料&買い切りツールを徹底比較

Excel業務の自動化
その手作業、自動化しませんか?

VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。

1,600部ツール販売実績
15年製造業の業務経験
無料で相談する →
初回相談無料・お見積りだけでもOK
期間限定でChatGPT✖︎Googleスプレットシートのコンテンツ配布中!

LINEでExcelを気軽に学べる

しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
Profile
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
プロフィールを読む

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました