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

VLOOKUPの後継関数XLOOKUP、左方向検索もエラー処理もこれ1つでOKです!
- XLOOKUP関数の構文と6つの引数の意味
- VLOOKUPとの違い5つを比較表で理解
- 左方向検索・複数条件・横方向検索の実践テクニック
- XLOOKUPが使えない環境での代替方法
- VBAでXLOOKUP相当の処理を実装する方法
- よくあるエラーの原因と解決策
まずは関数の使い方を解説し、最後に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
| A | B | |
|---|---|---|
| 1 | 商品コード | 商品名 |
| 2 | A001 | ノートパソコン |
| 3 | A002 | マウス |
| 4 | A003 | キーボード |
| 5 | A004 | モニター |
| 6 | A005 | USBハブ |
| 8 | 検索コード (F2): |
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
| A | B | |
|---|---|---|
| 1 | 社員番号 | 氏名 |
| 2 | E001 | 山田太郎 |
| 3 | E002 | 佐藤花子 |
| 4 | E003 | 田中一郎 |
| 5 | E004 | 鈴木美咲 |
| 6 | E005 | 中村健太 |
| F | G(結果) | |
|---|---|---|
| 2 | =MyXLookup(F2, B:B, A:A, “未登録”) |
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
| A | B(数式) | |
|---|---|---|
| 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以外はスキップ |
| 変換前(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) |
⚠️ 複雑な数式は手動確認を推奨します
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)を使いましょう。
検索値を選択すると、両関数の結果の違いがわかります(JavaScript不使用・CSS-onlyデモ)。
| A | B | C | D | |
|---|---|---|---|---|
| 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 |
XLOOKUP
A:A, B:B)
VLOOKUP
A:D, 2, FALSE)
XLOOKUP
B:B, A:A)
VLOOKUP
B:D, ???)
XLOOKUP
A:A, B:B, “該当なし”)
VLOOKUP
A:D, 2, FALSE)
XLOOKUPとVLOOKUPの違い5つ【比較表つき】
XLOOKUP関数とVLOOKUP関数には、大きく5つの違いがあります。まずは比較表で全体像をつかんでください。
| 比較項目 | VLOOKUP | XLOOKUP |
|---|---|---|
| 検索方向 | 左端列→右方向のみ | 左右どちらでも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 | ノートPC | 89800 | 15 |
| P002 | マウス | 2980 | 120 |
| P003 | キーボード | 5480 | 85 |
| P004 | モニター | 34800 | 8 |
| P005 | USBハブ | 1980 | 200 |
商品コードから商品名を検索する
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 比較
| 比較項目 | XLOOKUP | INDEX+MATCH |
|---|---|---|
| 読みやすさ | 直感的で分かりやすい | 2関数の組み合わせで複雑 |
| 左方向検索 | 可能 | 可能 |
| エラー処理 | 引数で指定(IFERROR不要) | IFERROR関数が必要 |
| 対応バージョン | Excel 2021以降/365 | 全バージョン |
| 処理速度 | やや高速 | 同等(大量データでは差が出る) |
| 複数列取得 | スピルで一括 | 列ごとに数式が必要 |
新規で数式を作る場合はXLOOKUPがおすすめです。ただし、Excel 2019以前との互換性が必要な場合はINDEX+MATCHを選びましょう。
XLOOKUP vs FILTER関数 比較
| 比較項目 | XLOOKUP | FILTER |
|---|---|---|
| 用途 | 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(検索値, 検索範囲, 戻り範囲) の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予約投稿ツール完全ガイド|無料&買い切りツールを徹底比較
VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。
LINEでExcelを気軽に学べる
