横方向に並んだ表からデータを引っ張ってくるHLOOKUP関数について、使い方と内部のしくみを解説します。草野球の成績管理表で、年度を横に並べた表から特定年度の成績を参照する場面を例に、初心者向けに丁寧に説明します。
HLOOKUP関数とは
表の一番上の行を横方向に検索し、見つかった列から指定した行数だけ下にずれた位置の値を返す関数です。成績管理表では「年度を横に並べた一覧表」から、特定の年度の成績だけを取り出したい場面で活躍します。
基本の書式はこうです。
=HLOOKUP(検索値, 範囲, 行番号, [完全一致/近似一致])
「検索値」は探したい年度など、「範囲」は検索対象の表全体、「行番号」は範囲の一番上の行を1として数えたときに何行目の値を返すか、を指定します。
成績管理表での実例:年度別成績から特定年度を参照する
大阪グーニーズの個人成績シートとは別に、「年度別成績」シートを用意し、年度を横方向に並べて記録しているとします。仮にB1からF1に2021〜2025の年度が横並びで入っており、A列に項目名、各行に打率・本塁打・打点の値が入っているとします。
| 項目 | 2021 | 2022 | 2023 | 2024 | 2025 |
|---|---|---|---|---|---|
| 打率 | .275 | .283 | .291 | .268 | .302 |
| 本塁打 | 3 | 5 | 4 | 2 | 6 |
| 打点 | 18 | 22 | 20 | 15 | 25 |
この表からB1:F1が年度、B1:F4が検索対象の表全体になります。2023年の打率(表の2行目)を取り出したいとき、式はこうなります。
=HLOOKUP(2023, B1:F4, 2, FALSE)
これで「範囲B1:F1の中から2023を探し、見つかった列の2行目(打率の行)の値を返す」という計算が実行され、2023年の打率が求まります。行番号を3にすれば本塁打、4にすれば打点が取得できます。
取得した値を表示したいセルを選択します。検索したい年度は式の中に直接入力してもよいですし、別セルに年度を入力してそのセルを参照する形にしてもかまいません。
検索値(年度)、範囲(B1:F4など年度の行を含む表全体)、行番号(欲しい項目が範囲の上から何行目か)の順にカンマ区切りで入力します。
年度のようにきっちり一致させたい検索では、必ず4つ目の引数にFALSEを指定します。「)」で閉じてEnterキーを押せば確定です。
しくみを理解する:HLOOKUPは何をしているのか
HLOOKUPの中身は、範囲の一番上の行だけを左から右へ順番に見ていき、検索値と一致するセルを探す、という動きです。一致するセルが見つかったら、そのセルと同じ列の中で、指定した行番号ぶんだけ下に移動した位置の値を返します。
- 検索が行われるのは範囲の一番上の行だけ(2行目以降は検索対象にならない)
- 行番号は範囲の一番上の行を1として数える(実際のシートの行番号とはズレることがある)
- これはVLOOKUPの縦横が入れ替わった動きにあたる。VLOOKUPが範囲の一番左の列を縦方向に検索して右へ値を返すのに対し、HLOOKUPは一番上の行を横方向に検索して下へ値を返す
よくあるミス:意図した値が返ってこない原因
「HLOOKUPを使ったのに、思っていた項目の値が返ってこない」というとき、原因の多くは次のどちらかです。
行番号は「シート全体の行番号」ではなく「指定した範囲の中で何行目か」を数えます。表に行を追加・削除したのに行番号を更新し忘れると、打率のつもりが本塁打の値を返してしまう、といったズレが起こります。
最後の引数を省略、またはTRUEにすると近似一致で検索されます。年度のように1つずつのピッタリの値を探したい場合にこれを忘れると、意図しない年度の値が返ってくることがあります。年度や選手名など「完全に一致させたい検索」では、必ずFALSEを指定してください。
- HLOOKUP関数は「一番上の行を横方向に検索し、指定した行数だけ下の値を返す」関数
- VLOOKUPの縦横を入れ替えた動きにあたり、年度を横に並べた表との相性がよい
- 行番号は範囲内での相対位置で数える点、完全一致にはFALSEの指定を忘れないことがポイント
次回予告
次回のテーマは「INDEX関数」です。行番号・列番号を指定して表内の特定位置の値を取得するしくみを、成績表の中の特定位置の成績を取得する例をもとに解説していきます。
▶︎ 次回:INDEX関数の使い方としくみ



コメント