HLOOKUPは、横方向に並んだ表から値を探す関数です。VLOOKUP の縦横が入れ替わったもの、と考えるのが一番わかりやすいです。
H は Horizontal(水平)の頭文字です。
書式
=HLOOKUP(検索キー, 範囲, 行番号, [検索の型])
| 引数 | 内容 |
|---|---|
| 検索キー | 探したい値 |
| 範囲 | 探しに行く表。一番上の行が検索対象になる |
| 行番号 | 範囲の上端を1として、取り出したい行が何番目か |
| 検索の型 | FALSE=完全一致 / TRUE=近似一致 |
VLOOKUPが「左端の列を検索して、右へ数える」のに対し、HLOOKUPは「上端の行を検索して、下へ数える」動きになります。
基本の使い方
月ごとの数字が横に並んだ、よくある集計表です。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 項目 | 4月 | 5月 | 6月 |
| 2 | 売上 | 1200 | 1450 | 1380 |
| 3 | 原価 | 700 | 820 | 790 |
| 4 | 利益 | 500 | 630 | 590 |
「5月の利益」を取り出します。
=HLOOKUP("5月", A1:D4, 4, FALSE)
結果:630
1行目から「5月」を探し、見つかった列(C列)の4行目を返しています。
実務での使いどころ
月次・年次の推移表は横に伸びる形が多いため、「月を指定して、その月の数字を引く」用途でよく使います。
=HLOOKUP($B$1, $A$1:$M$10, 3, FALSE)
B1セルに月を入れると、その月の数字が出てくるダッシュボードのような作りにできます。範囲は絶対参照にしておいてください。
行番号を MATCH で動的に求めると、項目名も指定できるようになります。
=HLOOKUP($B$1, $A$1:$M$10, MATCH($A$5, $A$1:$A$10, 0), FALSE)
使わないほうがいい場面
HLOOKUPには、VLOOKUPと同じ弱点がそのまま残っています。
- – 行番号が「上から何番目」という位置指定なので、行を挿入すると壊れる
- – 検索できるのは範囲の一番上の行だけ
- – 見つからないときの値を指定できない
これらは XLOOKUP で全部解決します。XLOOKUPは検索範囲を「行」で指定すれば横方向の検索になるため、HLOOKUPの上位互換として使えます。
=XLOOKUP("5月", B1:D1, B4:D4) → 630
行を挿入しても壊れず、読んでも意味が分かりやすい。新しく作るならこちらを推奨します。
そもそも表の形を見直す
横に長い表は、集計・並べ替え・QUERY による抽出のすべてで扱いにくくなります。データを蓄積する目的なら、縦持ち(1行1レコード)に直すほうが後が楽です。
| 月 | 項目 | 金額 |
|---|---|---|
| 4月 | 売上 | 1200 |
| 4月 | 原価 | 700 |
| 5月 | 売上 | 1450 |
この形にしておけば、SUMIFS や QUERY で自由に切り出せます。HLOOKUPが必要になった時点で、表の設計を疑ってみる価値はあります。
エラーの対処
#N/A が出る
一番上の行に検索キーが存在しません。「5月」と「5月 」(末尾スペース)、「5月」と「05月」のような表記ゆれが原因のことが多いです。
#REF! が出る
行番号が範囲の行数を超えています。範囲が4行なのに行番号5を指定した、というケースです。
まとめ
- – 書式は
=HLOOKUP(検索キー, 範囲, 行番号, FALSE) - – 一番上の行を検索し、下へ数えて返す
- – VLOOKUPの縦横が入れ替わったもの
- – 行の挿入で壊れる弱点があるので、可能なら XLOOKUP を使う
コメントを残す