XLOOKUPは縦横どちらにも柔軟に検索できる最新関数、VLOOKUPは縦方向専用、HLOOKUPは横方向専用です。互換性や使いやすさの違いから、最新のExcelやWeb版ExcelではXLOOKUPが推奨されます。
3つの関数の基本的な違い
| 関数 | 検索方向 | 特徴 | 弱点 |
|---|---|---|---|
| VLOOKUP | 垂直(縦方向) | 指定値を左端列から検索し、右側の列から値を返す | 左端列固定、列番号指定が壊れやすい |
| HLOOKUP | 水平(横方向) | 指定値を上端行から検索し、下側の行から値を返す | 上端行固定、行番号指定が壊れやすい |
| XLOOKUP | 縦横どちらも可能 | 検索範囲と返す範囲を自由に指定できる。エラー処理も組み込み済み | 古いExcel(2016以前)では使えない |
VLOOKUP(垂直検索)の詳しい説明
概要
VLOOKUPは表の左端列を起点に縦方向へ検索し、一致した行から指定列の値を返します。用途は「コード→名前」「ID→属性」「品番→価格」などが定番で、旧環境でも広く利用できます。
構文と引数
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
- lookup_value: 探したい値(例:商品コード)
- table_array: 検索対象の表範囲(左端列に検索値があることが必須)
- col_index_num: 返したい列番号(左端列を1として右へ数える)
- range_lookup: 一致方法(省略可)
基本例(完全一致)
=VLOOKUP(E2, $A$2:$C$6, 3, FALSE)
- ポイント
- 完全一致にするため range_lookup は FALSE
- 返す列はC列=3
- 範囲は絶対参照($A$2:$C$6)でドラッグ時のズレ防止

よくあるエラーと対処
- #N/A
- 原因: 完全一致で値が見つからない、前後にスペース、データ型の不一致(数字と文字列)
- 対処: TRIMで空白除去、値の型統一、補助列でCLEAN、数値はVALUEで変換
- #REF!
- 原因: 列挿入・削除で col_index_num が範囲外に
- 対処: 列番号を固定しない運用(後述のMATCH併用)や範囲再指定
- 誤結果(近似一致の落とし穴)
- 原因: 未ソートでTRUE利用
- 対処: 昇順区分表に限定し、通常はFALSEを使う
- メリット・デメリット
- メリット: 旧Excelでも利用可能、初心者に馴染みやすい
- デメリット: 左端固定、列追加で壊れやすい、エラー処理が弱い
HLOOKUP(水平検索)の詳しい解説
概要
HLOOKUPは上端行を起点に横方向へ検索し、一致した列から指定行の値を返します。年度・月などの横並びヘッダーに向いています。
構文と引数
=HLOOKUP(lookup_value, table_array, row_index_num, [range_lookup])
- lookup_value: 探したい値(例:年度やコード)
- table_array: 検索対象の表範囲(最上段に検索ヘッダーが並ぶ前提)
- row_index_num: 返したい行番号(上端行を1として下へ数える)
- range_lookup: 一致方法(省略可)
基本例(完全一致)
=HLOOKUP(2025, $B$1:$E$4, 2, FALSE)
- ポイント
- 完全一致で安全運用
- 返す行は「売上」がある2行目
- 範囲は絶対参照でドラッグ時のズレ防止

よくあるエラーと対処
- #N/A
- 原因: 完全一致でヘッダーに該当がない/余計なスペース/型不一致(文字列の数字など)
- 対処: TRIM/CLEAN/VALUEなどで前処理、ヘッダー統一、必要ならIFERRORでユーザー向けメッセージに置換
- #REF!
- 原因: 行の挿入・削除で row_index_num が範囲外に
- 対処: テーブル化(Ctrl+T)やヘッダー名から動的に行を決める設計(後述のMATCH連携)
- 近似一致の誤結果
- 原因: 上端行が未ソートでTRUE使用、想定外の境界解釈
- 対処: 近似一致は「数値ヘッダー×昇順」の区分表に限定し、通常はFALSEを標準運用
- メリット・デメリット
- メリット: 横長表で便利
- デメリット: 上端固定、行追加で壊れやすい
XLOOKUP(柔軟検索)の詳しい解説
概要
XLOOKUPは検索範囲と返す範囲を分けて指定でき、縦横どちらにも対応。左端縛りがなく、見つからない場合の返り値や検索方向などのオプションが充実しており、壊れにくい式を簡潔に書けます。
構文と引数
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
- lookup_value: 探す値(例:品番、ID)
- lookup_array: 検索対象の1列/1行
- return_array: 返却範囲(複数列/行も可)
- if_not_found: 見つからない場合の返り値(例:"未登録")
- match_mode: 0完全一致(推奨)、-1次小、1次大、2ワイルドカード
- search_mode: 1先頭から、-1末尾から、2昇順バイナリ、-2降順バイナリ
基本例
完全一致の縦参照(品番→価格)
=XLOOKUP(E2, $A$2:$A$1000, $C$2:$C$1000, "該当なし", 0)
- ポイント:
- 完全一致を指定して誤参照を防止
- if_not_foundで#N/Aをユーザー向け文言に置換
- 範囲は絶対参照でドラッグ運用に強くする
横参照(年度→売上)
=XLOOKUP(G1, $B$1:$M$1, $B$2:$M$2, "該当なし", 0)
- ポイント: HLOOKUPの置き換え。ヘッダー横並びでも同じ書き方
オプション活用
見つからない場合の表示(IFERROR不要)
=XLOOKUP(A2, 製品表[品番], 製品表[単価], "未登録")
- 効果: エラー時の見た目を整える。監査やユーザー通知に有効
ワイルドカードで部分一致検索
=XLOOKUP("*M12*", 製品表[型式], 製品表[製品名], "該当なし", 2)
- 効果: 部分一致で柔軟に拾う。記号検索は ~ を付けてエスケープ
最後に一致した値(後方検索)
=XLOOKUP(A2, 履歴[ID], 履歴[ステータス], "なし", 0, -1)
- 効果: 履歴型データで「最新レコード」を簡単取得
よくあるエラーと対処
- #N/A
- 原因: 値が存在しない、空白/型不一致、微妙な表記差
- 対処: 前処理で正規化、if_not_foundでユーザーフレンドリー化、必要ならワイルドカード
- #VALUE! / #REF!
- 原因: return_arrayの形状不一致、範囲外参照
- 対処: lookup_arrayは1列/1行に限定、return_arrayのサイズ整合を確認
- 予期せぬ一致(近似の誤解)
- 原因: -1/1指定時に並び順が不適切
- 対処: 昇順/降順の前提を満たすか、完全一致に戻す
- メリット・デメリット
- メリット: 縦横両対応、左端縛りなし、エラー時返り値、最後の一致など強力な検索モード
- デメリット: 旧Excelでは非対応(最新Excel・Web版で推奨)
使い分けと設計のコツ
- 環境で選ぶ
- 最新Excel・Web版Excel: XLOOKUP推奨
- 旧Excel(2016以前):VLOOKUP/HLOOKUP または INDEX+MATCH で代替
- 壊れにくい式設計
- 完全一致を標準化→ 誤参照を防止
- テーブル化(Ctrl+T)+構造化参照 → 保守性・可読性を向上
if_not_foundの活用 → エラーを整理し、ユーザー向けメッセージを返す- MATCH関数の併用 → 見出し名から列/行を動的に取得し、式の柔軟性を高める
まとめ
- VLOOKUP=縦専用
- HLOOKUP=横専用
- XLOOKUP=縦横両対応の最新関数
👉 最新のExcelやWeb版Excelでは XLOOKUPが推奨
👉 安全運用の基本は 完全一致+テーブル化+if_not_found
👉 旧環境では VLOOKUP/HLOOKUP または INDEX+MATCH を使い、可能なら XLOOKUPへ移行
Excelの検索関数は「正しく選ぶ」「壊れにくく設計する」ことで、日々の業務効率が大きく変わります。完全一致やテーブル化を習慣にすれば、将来の修正コストも減らせます。今日から一歩ずつ、実務に応用してみましょう。