HLOOKUP関数の使い方|横方向の表から値を検索する

執筆者:

カテゴリ:

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

この形にしておけば、SUMIFSQUERY で自由に切り出せます。HLOOKUPが必要になった時点で、表の設計を疑ってみる価値はあります。

エラーの対処

#N/A が出る

一番上の行に検索キーが存在しません。「5月」と「5月 」(末尾スペース)、「5月」と「05月」のような表記ゆれが原因のことが多いです。

#REF! が出る

行番号が範囲の行数を超えています。範囲が4行なのに行番号5を指定した、というケースです。

まとめ

  • – 書式は =HLOOKUP(検索キー, 範囲, 行番号, FALSE)
  • 一番上の行を検索し、下へ数えて返す
  • – VLOOKUPの縦横が入れ替わったもの
  • – 行の挿入で壊れる弱点があるので、可能なら XLOOKUP を使う

関連する関数

コメント

コメントを残す

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