タグ: HLOOKUP

  • 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 を使う

    関連する関数