「月ごとに横に並んだ表から、特定の月の値を取り出したい」。スプレッドシートを使っていると、こんな場面に出会いますよね。
VLOOKUP関数は縦方向の検索には強いですが、横方向のデータには対応していません。
そんなときに活躍するのがHLOOKUP関数です。この記事では基本の書き方からVLOOKUPとの違い、エラー対処まで紹介します。
スプレッドシートのHLOOKUP関数とは?
HLOOKUP関数(読み方: エイチルックアップ関数)は、範囲の上端行を横方向に検索する関数です。一致した列から、指定した行の値を返してくれます。
名前はHorizontal(水平)+ Lookup(検索)が由来です。「月名から売上を引っ張る」「支店名から経費を取得する」。こうした横方向の表引きを数式1つで片付けてくれます。
ポイントは検索する行が範囲の上端(1行目)にあることです。上端以外の行で検索したい場合は、XLOOKUP関数を検討してください。
HLOOKUP関数にできることをまとめると、次のとおりです。
- 横方向に並んだ表から値を自動取得する
- 月別・支店別など横向きのデータを検索する
- 近似一致で料金ランク・成績判定を行う
- ワイルドカードで部分一致検索をする
NOTE
HLOOKUP関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。
HLOOKUP関数の書き方(構文と引数)
基本構文
HLOOKUP関数の構文はこちらです。
=HLOOKUP(検索キー, 範囲, 番号, [並べ替え済み])
引数は4つあります。最後の「並べ替え済み」だけ省略できます。
引数の説明
| 引数 | 必須/省略可 | 意味 | 指定例 |
|---|---|---|---|
| 検索キー | 必須 | 上端行から探したい値。セル参照が一般的 | “4月” |
| 範囲 | 必須 | 検索対象の表。上端行に検索キーを含むこと | B1:M3 |
| 番号 | 必須 | 上端行から数えて何行目を返すか(1以上) | 2 |
| 並べ替え済み | 省略可 | FALSE = 完全一致 / TRUE = 近似一致 | FALSE |
NOTE
Excelでは「検索値・行番号・検索の型」と呼びますが、スプレッドシートでは「検索キー・番号・並べ替え済み」です。動作は同じなので、Excel経験者はそのまま読み替えてください。
「並べ替え済み」(FALSE / TRUE)の使い分け
ここがHLOOKUPでつまずきやすい部分です。
FALSE(完全一致) は、検索キーとぴったり一致するデータだけを探します。実務の9割はこちらです。一致しなければ#N/Aエラーになります。
=HLOOKUP("4月", B1:M3, 2, FALSE)
TRUE(近似一致) は、検索キー以下の最大値を返します。スコア帯やランク判定に使います。ただし上端行が昇順ソートされていることが前提です。
=HLOOKUP(A2, B1:F3, 2, TRUE)
NOTE
「並べ替え済み」を省略するとデフォルトはTRUEです。「なぜか変な値が返る」の原因は、たいていこの省略です。迷ったらFALSEを明示してください。
HLOOKUP関数の基本的な使い方
支店別の売上データから、特定の支店の値を取り出す例で見てみましょう。
次のような横方向の表があるとします。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | 東京 | 大阪 | 名古屋 | 福岡 | |
| 2 | 売上 | 500 | 350 | 280 | 200 |
| 3 | 経費 | 120 | 80 | 65 | 50 |
| 4 | 利益 | 380 | 270 | 215 | 150 |
東京の利益(380)を取得するにはこう書きます。
=HLOOKUP("東京", B1:E4, 4, FALSE)
各引数の意味は次のとおりです。
- “東京”: 検索キー(上端行から「東京」を探す)
- B1:E4: 範囲(支店データ全体)
- 4: 上端行から4行目(利益の行)を返す
- FALSE: 完全一致で検索
行番号を「2」に変えれば売上(500)が返ります。「3」にすれば経費(120)を取得できますよ。
セル参照を使うこともできます。G1セルに支店名が入力されている場合は、こう書けます。
=HLOOKUP(G1, B1:E4, 4, FALSE)
G1の値を変更するだけで、取得する支店を切り替えられます。
HLOOKUP関数の実践的な使い方・応用例
月別データから特定月の値を取得する
実務では、月別に横方向に並んだ集計表をよく見かけますよね。こういったデータからHLOOKUP関数で特定の月の値を取り出せます。
次のような月別売上表があるとします。
| A | B | C | D | … | M | |
|---|---|---|---|---|---|---|
| 1 | 1月 | 2月 | 3月 | … | 12月 | |
| 2 | 売上 | 100 | 120 | 150 | … | 200 |
| 3 | 目標 | 110 | 110 | 140 | … | 190 |
3月の売上を取得するには、次のように入力します。
=HLOOKUP("3月", B1:M3, 2, FALSE)
結果は「150」です。番号を3にすれば、目標値(140)を取得できます。
IFERROR関数と組み合わせてエラーを回避する
HLOOKUP関数で検索キーが見つからないと、#N/Aエラーが表示されます。報告資料で見栄えが悪いですし、後続の計算にも影響します。
IFERROR関数(エラー時に別の値を返す関数)で囲めば解決です。
=IFERROR(HLOOKUP("札幌", B1:E4, 4, FALSE), "該当なし")
検索キーが見つからない場合に「該当なし」と表示されます。空文字「””」を指定するケースも多いです。
別シートのデータを横方向に検索する
検索先が別シートにある場合は、シート名のあとに「!」をつけて範囲を指定します。
=HLOOKUP("東京", マスタ!B1:E4, 2, FALSE)
シート名に空白を含む場合はシングルクォーテーションで囲みます。
=HLOOKUP("東京", '売上 マスタ'!B1:E4, 2, FALSE)
NOTE
別シートの範囲をマウスで選択すると、シート名と「!」が自動入力されます。手入力よりミスが減るのでおすすめです。
よくあるエラーと対処法
HLOOKUP関数を使っていると、思わぬエラーに遭遇することがあります。エラーの種類別に原因と対処法を整理しました。
#N/Aエラー
「検索キーが見つからない」という意味のエラーです。主な原因と対処法を表にまとめます。
| 原因 | 確認ポイント | 対処法 |
|---|---|---|
| 値が存在しない | 上端行に該当データがあるか | データを追加するかIFERRORで対処 |
| データ型の不一致 | 数値と文字列が混在していないか | VALUE関数で型を統一 |
| 余分なスペース | 見えない空白が入っていないか | TRIM関数で除去 |
#REF!エラー
行番号が範囲の行数を超えているときに出ます。
たとえば範囲がB1:E3の3行なのに、番号に4を指定した場合です。範囲の行数を確認して、番号が範囲内に収まるよう修正してください。
#VALUE!エラー
番号に1未満の数値や文字列を指定したときに出ます。番号には必ず1以上の整数を指定しましょう。
間違った値が返る
エラーにはならないのに期待と違う値が返る。これが一番やっかいなケースです。
最も多い原因は「並べ替え済みを省略してTRUEになっている」パターンです。FALSEを明示すれば解決します。
もう1つは範囲の上端行が検索対象と一致していないケースです。範囲の開始行を見直してみてください。
VLOOKUPとの違い・使い分け
HLOOKUP関数とよく比較される検索関数との違いを表にまとめました。
| 特徴 | HLOOKUP | VLOOKUP | XLOOKUP |
|---|---|---|---|
| 検索方向 | 横方向(行) | 縦方向(列) | 縦横両方向 |
| 検索位置 | 上端行のみ | 左端列のみ | 任意の範囲 |
| デフォルトの一致方式 | 近似一致(TRUE) | 近似一致(TRUE) | 完全一致 |
| エラー時の既定値 | IFERROR必要 | IFERROR必要 | 引数で指定可 |
どちらを使うべき?
判断基準はシンプルです。
実務ではデータが縦方向に並ぶケースのほうが多いです。そのためVLOOKUPのほうが使用頻度は高くなります。
ただし、月別集計表やシフト表など横方向の表も少なくありません。そうした場面ではHLOOKUP関数が頼りになります。
NOTE
XLOOKUP関数は縦横両方に対応していますが、Googleスプレッドシートでも使えます。新しい関数に抵抗がなければ、XLOOKUPへの移行も選択肢です。
まとめ
HLOOKUP関数のポイントを振り返ります。
- 名前はHorizontal(水平)+ Lookupが由来。横方向に検索する関数
- 構文は
=HLOOKUP(検索キー, 範囲, 番号, 並べ替え済み)の4引数 - 「並べ替え済み」は省略せずFALSEを明示するのが安全
- #N/Aエラーはデータ型の不一致やスペース混入を疑う
- 縦方向の検索にはVLOOKUP関数を使う
まずは基本の完全一致検索からはじめてみてください。IFERRORと組み合わせれば、実務のほとんどの場面に対応できます。
