Excelにおけるデータ検索に利用可能なHLOOKUP、VLOOKUP、XLOOKUPの使い方を紹介します。
特に、HLOOKUP、VLOOKUPの代替機能であるXLOOKUPのメリットがたくさんあるため、詳しく記載します。
HLOOKUP 関数
概要
HLOOKUPは、指定した範囲の中から、横方向に検索して値を取得する関数です。主にデータが横に並んでいる表で使用されます。
構文
HLOOKUP(検索値, 範囲, 行番号, [検索の型])
- 検索値
検索する値 - 範囲
検索範囲(データが横に並んでいる必要があります) - 行番号
取得したい値が含まれる行の番号(範囲内の行番号) - 検索の型
省略可能。TRUEは近似一致、FALSEは完全一致
使用例
HLOOKUP("商品A", A1:D3, 2, FALSE)
上記の例では、範囲A1からD3の中で「商品A」を検索し、2行目の値を取得します。
検索は完全一致です。
VLOOKUP 関数
概要
VLOOKUPは、指定した範囲の中から、縦方向に検索して値を取得する関数です。
主にデータが縦に並んでいる表で使用されます。
構文
VLOOKUP(検索値, 範囲, 列番号, [検索の型])
- 検索値
検索する値 - 範囲
検索範囲(データが縦に並んでいる必要があります) - 列番号
取得したい値が含まれる列の番号(範囲内の列番号) - 検索の型
省略可能。TRUEは近似一致、FALSEは完全一致
使用例
VLOOKUP("商品A", A1:D10, 3, FALSE)
上記の例では、範囲A1からD10の中で「商品A」を検索し、3列目の値を取得します。
検索は完全一致です。
近似一致と完全一致の違い
Excelの検索関数(HLOOKUP、VLOOKUP、XLOOKUP)を使用する際、検索の型として「近似一致」と「完全一致」の2つのオプションがあります。
これらのオプションは、関数が検索値をどのように処理するかを決定します。
完全一致
完全一致は、検索値が検索範囲内で正確に一致する値を探す方法です。完全一致を使用すると、検索値と同じ値が見つかった場合にのみ、関数はその値を返します。
- HLOOKUP/VLOOKUP
検索の型をFALSE
に設定します。 - XLOOKUP
一致モードを0
に設定します。
使用例
次の例では、「商品A」を検索し、完全一致する値を探します。
=VLOOKUP("商品A", A1:B10, 2, FALSE)
この場合、「商品A」と正確に一致する値がA1の範囲にある場合のみ、対応するB列の値を返します。
近似一致
近似一致は、検索値に最も近い値を探す方法です。検索値と完全に一致する値が見つからない場合でも、最も近い値が返されます。ただし、データが昇順に並んでいる必要があります。
- HLOOKUP/VLOOKUP
検索の型をTRUE
に設定します(省略した場合も同様)。 - XLOOKUP
一致モードを1
(次に大きい値)または-1
(次に小さい値)に設定します。
使用例
次の例では、「商品A」を検索し、近似一致する値を探します。
=VLOOKUP("商品A", A1:B10, 2, TRUE)
この場合、A1の範囲に「商品A」と完全に一致する値が見つからない場合、関数は「商品A」に最も近い値(昇順に並んだデータの中で次に小さいか等しい値)を探し、対応するB列の値を返します。
XLOOKUP 関数
概要
XLOOKUPは、HLOOKUP、VLOOKUPの柔軟な代替機能として、Excelの最新バージョンで導入されました。
垂直、水平、または斜めの検索が可能で、より多機能です。
構文
XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])
- 検索値
検索する値 - 検索範囲
検索範囲 - 戻り範囲
取得したい値が含まれる範囲 - 見つからない場合
省略可能。見つからない場合に返す値 - 一致モード
省略可能。0は完全一致、1は次に大きい値、-1は次に小さい値、2はワイルドカード一致 - 検索モード
省略可能。1は最初から最後へ、-1は最後から最初へ、2はバイナリ検索(昇順)、-2はバイナリ検索(降順)
使用例
=XLOOKUP("商品A", A1:A10, B1:B10, "見つかりません", 0, 1)
上記の例では、範囲A1からA10の中で「商品A」を検索し、対応する範囲B1からB10の値を取得します。
検索値が見つからない場合は「見つかりません」と表示され、検索は最初から最後まで行われます。
XLOOKUPを使うメリット
XLOOKUPは、特にメリットが多いと感じます。
主なメリットを挙げます。
縦横両方の検索が可能
XLOOKUPは、縦方向(列)と横方向(行)の両方の検索に対応しています。
VLOOKUPは列を基準に検索し、HLOOKUPは行を基準に検索しますが、XLOOKUPは1つの関数で列・行のどちらにも対応するため、データの配置の制約が少なくなります。
キーの位置が固定されない
VLOOKUPやHLOOKUPは、参照先のキー(検索値)が必ず最初の列(VLOOKUPの場合)または最初の行(HLOOKUPの場合)に位置していなければならないという制約があります。これが使いにくい点の一つです。
一方で、XLOOKUPではこの制約がありません。検索する列や行がどこにあっても柔軟に指定できるため、キーが最初の列や行にある必要はなく、表のどこにあっても検索が可能です。
データの配置に制約が少なくなり、より柔軟に利用できます。
列・行番号の指定が不要
XLOOKUPでは、列や行の番号を明示的に指定する必要がないため、VLOOKUPやHLOOKUPと比べて操作が簡単です。
VLOOKUPやHLOOKUPでは、検索範囲内の何列目や何行目に返す値があるかを指定しなければなりませんが、この方法は範囲に変更があると間違いやすいという欠点があります。
一方で、XLOOKUPは返す値の範囲を直接指定するため、列や行番号の指定をする必要がなく、範囲の変更にも柔軟に対応できます。
指定ミス発生の低減も期待されます。
部分一致や逆方向検索が可能
部分一致検索
XLOOKUPでは、完全一致だけでなく、部分一致での検索も簡単に行えます。検索値が一致しない場合でも、指定した条件に合う最も近い値を見つけることができます。
たとえば、部分一致を使えば、商品名の一部しか入力されていなくても、その部分にマッチする商品を検索することが可能です。部分一致を有効にするには、XLOOKUPの第5引数(match_mode)を指定します。
以下の例では、「りんご」で始まる文字列を検索することができます。2
を指定することで、前方一致(部分一致検索)が有効になります。
=XLOOKUP("りんご*", A2:A10, B2:B10, "見つかりません", 2)
逆方向検索
XLOOKUPでは、通常の前から後ろに向かう検索だけでなく、逆方向、つまり後ろから前への検索も可能です。これにより、リストの最後にある値から順に検索することができます。これもXLOOKUPの第6引数(search_mode)で設定します。
たとえば、リストの最後に近い最新データを検索する場合、逆方向検索が便利です。
以下は逆方向に検索する例です。
=XLOOKUP(A2, B2:B10, C2:C10, "見つかりません", 0, -1)
この例では、-1
を指定することで後ろから前へ検索が行われます。これにより、最新のデータや最も直近の情報を素早く見つけることができます。
エラー処理が容易
検索結果が見つからない場合の代替値を簡単に指定できます。
以下、既出の例ですが、検索結果が見つからない場合、”見つかりません” と出力されます。
=XLOOKUP("りんご*", A2:A10, B2:B10, "見つかりません", 2)
VLOOKUPやHLOOKUPでは、検索結果が見つからなかった場合に#N/A
エラーが表示されますが、それを回避するためには別途IFERROR関数を使う必要があります。
一方、XLOOKUPではエラー発生時に表示する値を直接指定できるため、エラー処理がシンプルでわかりやすくなります。
おわりに
便利なので、最近はXLOOKUPを使っています。