データ検索を水平に!HLOOKUP関数の使い方と実践活用法

Sheet基本

HLOOKUP 完全ガイド
横方向の検索と INDEX+MATCH への移行

行方向のデータを横断して検索する HLOOKUP。VLOOKUPの横版だが制約も多い。INDEX+MATCH との使い分けと移行パターンを解説する。

GASとの関係:行を探してから列方向に参照する発想

GASで const colIdx = headers.indexOf("売上"); data.map(row => row[colIdx]) のように「ヘッダー行で列を探す」処理は HLOOKUPの考え方と同じです。

GASで自動化を学ぶ →
目次

HLOOKUPとは

HLOOKUP(Horizontal LOOKUP)は、1行目(または指定行)で値を検索し、同じ列の指定した行番号の値を返す関数です。VLOOKUPが縦(列)検索なのに対して、HLOOKUPは横(行)検索です。

基本構文

=HLOOKUP(検索値, 検索範囲, 返す行番号, [完全一致])
引数内容
検索値1行目から探す値
検索範囲ヘッダー行を含む横に並んだデータ範囲
返す行番号1=ヘッダー行, 2=その下の行, 3=さらに下の行…
完全一致FALSE(または0)を指定する(省略するとTRUEで近似一致)

基本的な使い方

// 1行目(月)で「4月」を探し、2行目の売上を返す
=HLOOKUP("4月", A1:M3, 2, FALSE)

// セル参照で使う(実務的な書き方)
=HLOOKUP(E1, A1:M3, 2, FALSE)

HLOOKUPの限界

制約内容
上側検索不可検索値は必ず1行目(または一番上の行)にある必要がある
行番号が固定列を追加すると行番号がずれる(VLOOKUPの列番号問題と同じ)
可読性が低い行番号が何行目を意味するか分かりにくい

INDEX+MATCH で代替する(推奨)

HLOOKUPの制約を全て解消できるのが INDEX+MATCH の横方向版です。

// HLOOKUP の代替
// → 1行目で「4月」を探し、同じ列の2行目を返す
=INDEX(A2:M2, MATCH("4月", A1:M1, 0))

// 行・列の両方を動的に指定
// → E1の月名の行、F1の項目名の列の交差する値を返す
=INDEX(A2:M10, MATCH(F1, A1:A10, 0), MATCH(E1, A1:M1, 0))

HLOOKUPが今でも使われるケース

  • 既存のシートのメンテナンス(書き換えコストを避けたい場合)
  • Excelとの互換が必要で、XLOOKUPが使えない場合
  • 検索範囲が常に1行目で固定されており、行数も変わらない場合

新規作成なら XLOOKUP か INDEX+MATCH を使うのが現代の標準です。

実務でのパターン例

月別予算テーブルの参照

// A1:M2(1行目:1月〜12月、2行目:予算額)から当月の予算を取得
=HLOOKUP(TEXT(TODAY(),"M月"), A1:M2, 2, FALSE)

この知識をGASで活かす

HLOOKUPの「ヘッダー行で列を探す」発想は、GASでシートのデータを読み込む際に「ヘッダー配列からindexOf()で列番号を特定する」パターンと完全に対応します。GASを書くときに役立つ基礎概念です。

Free Newsletter

AIを業務に活かしたいなら
SMR-Labメルマガ

毎週火曜10時、コピペで使えるChatGPTプロンプト・
GASテンプレートをお届け。登録は1分・完全無料。

▶ 無料で登録する

📧 無料メルマガ登録

DX・AI活用のヒントを週1回お届け。登録特典:すぐ使えるプロンプト集&GASテンプレート。

登録情報は第三者に提供しません。いつでも配信停止できます。

目次