Sheet基本
HLOOKUP 完全ガイド
HLOOKUP 完全ガイド
横方向の検索と INDEX+MATCH への移行
行方向のデータを横断して検索する HLOOKUP。VLOOKUPの横版だが制約も多い。INDEX+MATCH との使い分けと移行パターンを解説する。
GASとの関係:行を探してから列方向に参照する発想
GASで const colIdx = headers.indexOf("売上"); data.map(row => row[colIdx]) のように「ヘッダー行で列を探す」処理は HLOOKUPの考え方と同じです。
目次
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分・完全無料。
