「1行だけの表からデータを引きたい」「VLOOKUPほど大げさな関数を使うまでもない」。スプレッドシートで検索をするとき、こんな場面はありませんか。
VLOOKUP・HLOOKUPは便利ですが、引数が多くて構文もやや長めです。もっとシンプルに書きたいときがありますよね。
そんなときに使えるのがLOOKUP関数です。1行または1列の範囲をサッと検索して、対応する値を返してくれます。この記事ではLOOKUP関数の基本からVLOOKUP・HLOOKUP・XLOOKUPとの使い分けまで紹介します。
スプレッドシートのLOOKUP関数とは?
LOOKUP関数(読み方: ルックアップ関数)は、1行または1列の範囲を検索して対応する値を返す関数です。名前はLookup(検索・照合)がそのまま由来です。
VLOOKUPが「縦方向の表検索」、HLOOKUPが「横方向の表検索」に特化しているのに対し、LOOKUP関数は1行/1列のシンプルな範囲を検索します。検索範囲が小さい場面では、VLOOKUPより短い数式で済むのがメリットです。
LOOKUP関数にできることをまとめると、次のとおりです。
- 1列のデータから対応する値を取得する
- 1行のデータから対応する値を取得する
- 近似一致でランク判定や料金区分を行う
- 検索方向(縦・横)を意識せずに書ける
NOTE
LOOKUP関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。
LOOKUP関数の書き方(構文と引数)
LOOKUP関数には2つの書き方があります。実務でよく使うのは「ベクトル形式」です。
ベクトル形式(基本)
=LOOKUP(検索キー, 検索範囲, 結果範囲)
検索範囲から検索キーを探し、結果範囲の同じ位置にある値を返します。VLOOKUPの「列番号」の代わりに、結果範囲を直接指定するイメージです。
| 引数 | 必須/省略可 | 意味 | 指定例 |
|---|---|---|---|
| 検索キー | 必須 | 探したい値 | A2 |
| 検索範囲 | 必須 | 検索する1行または1列の範囲 | B2:B100 |
| 結果範囲 | 必須 | 結果を返す1行または1列の範囲 | C2:C100 |
配列形式
=LOOKUP(検索キー, 配列)
配列(複数行×複数列の範囲)の最初の行または列を検索し、最後の行または列の対応する値を返します。
| 引数 | 必須/省略可 | 意味 | 指定例 |
|---|---|---|---|
| 検索キー | 必須 | 探したい値 | A2 |
| 配列 | 必須 | 複数行×複数列の範囲 | B2:D10 |
配列の形によって検索方向が自動で切り替わります。
- 列数 > 行数: 最初の行を横方向に検索 → 最後の行の値を返す
- 行数 >= 列数: 最初の列を縦方向に検索 → 最後の列の値を返す
WARNING
LOOKUP関数は近似一致で検索します。検索範囲は昇順に並べ替え済みであることが前提です。完全一致で検索したい場合はVLOOKUP関数(第4引数にFALSE)を使ってください。
LOOKUP関数の基本的な使い方
商品コードから商品名を取得する例で見てみましょう。
A列に商品コード(昇順)、B列に商品名が並んでいるとします。D2に入力したコードから商品名を取得するにはこう書きます。
=LOOKUP(D2, A2:A10, B2:B10)
各引数の意味は次のとおりです。
- D2: 検索キー(入力した商品コード)
- A2:A10: 検索範囲(商品コードの列)
- B2:B10: 結果範囲(商品名の列)
D2に「P-003」と入力すると、A列から「P-003」以下の最大値を探し、同じ行のB列の値を返します。
配列形式で書くと、さらに短くなります。
=LOOKUP(D2, A2:B10)
A2:B10の最初の列(A列)を検索し、最後の列(B列)の値を返します。結果は同じですが、引数が1つ減ってスッキリします。
NOTE
検索範囲が昇順でないと、正しい結果が返りません。データを事前にSORT関数やフィルタで並べ替えておくか、VLOOKUP関数(完全一致)を使いましょう。
LOOKUP関数の実践的な使い方・応用例
成績ランク判定(近似一致の活用)
LOOKUP関数の近似一致は、スコアに応じたランク判定で力を発揮します。
F列に境界値(昇順)、G列にランクを用意します。
| F列(境界値) | G列(ランク) |
|---|---|
| 0 | D |
| 60 | C |
| 70 | B |
| 80 | A |
| 90 | S |
点数が入ったB2セルからランクを判定するにはこう書きます。
=LOOKUP(B2, F2:F6, G2:G6)
B2が「75」なら、F列から75以下の最大値「70」を見つけ、対応するG列の「B」を返します。VLOOKUPで同じことをするには =VLOOKUP(B2, F2:G6, 2, TRUE) と書きます。LOOKUP関数のほうが直感的ですね。
IFERROR関数と組み合わせてエラーを防ぐ
LOOKUP関数は検索キーが検索範囲の最小値より小さいと#N/Aエラーを返します。IFERROR関数で囲めば、エラーを防げます。
=IFERROR(LOOKUP(D2, A2:A10, B2:B10), "該当なし")
実務では「該当なし」や空文字「””」を指定するケースが多いです。
別シートのデータを検索する
検索先が別シートにある場合は、シート名のあとに「!」をつけます。
=LOOKUP(A2, マスタ!B:B, マスタ!C:C)
シート名に空白を含む場合はシングルクォーテーションで囲みます。
=LOOKUP(A2, '商品 マスタ'!B:B, '商品 マスタ'!C:C)
NOTE
別シートの範囲をマウスで選択すると、シート名と「!」が自動で入力されます。手入力よりもミスが減るのでおすすめです。
最後に一致した値を取得する
LOOKUP関数には「検索キー以下の最大値を返す」という特性があります。これを利用すると、重複データの中から最後に一致した値を取得できます。
たとえばA列に担当者名、B列に対応日付が並んでいるとします。担当者「田中」の最新の対応日付を取得するにはこう書きます。
=LOOKUP(2, 1/(A2:A100="田中"), B2:B100)
仕組みを簡単に説明します。
A2:A100="田中"→ 条件に一致するセルはTRUE(1)、それ以外はFALSE(0)1/TRUE→ 1、1/FALSE→ エラー- LOOKUP関数はエラーをスキップして、最後の「1」の位置に対応するB列の値を返す
この使い方はVLOOKUPでは実現できません。LOOKUP関数ならではのテクニックです。
よくあるエラーと対処法
LOOKUP関数で発生しやすいエラーをまとめます。
| エラー | 原因 | 対処法 |
|---|---|---|
| #N/A | 検索キーが検索範囲の最小値より小さい | データを確認するか、IFERRORで囲む |
| #N/A | 検索範囲が昇順でない | 検索範囲を昇順に並べ替える |
| #REF! | 検索範囲と結果範囲のサイズが異なる | 両方の範囲を同じ行数(または列数)に揃える |
| #VALUE! | 検索キーが空白 | 検索キーのセルにデータを入力する |
| 間違った値が返る | 検索範囲が昇順でない | 昇順に並べ替えるか、VLOOKUPの完全一致を使う |
検索範囲が昇順でないときの対処
LOOKUP関数は近似一致専用のため、検索範囲が昇順でないと間違った値を返すことがあります。エラーにならず誤った結果が返るため、気づきにくい点に注意してください。
完全一致で検索したい場合は、以下の関数を使いましょう。
VLOOKUP・HLOOKUP・XLOOKUPとの違い・使い分け
スプレッドシートには検索関数が複数あります。それぞれの特徴を比較表で整理します。
4つの検索関数 比較表
| 特徴 | LOOKUP | VLOOKUP | HLOOKUP | XLOOKUP |
|---|---|---|---|---|
| 検索方向 | 1行/1列(自動判定) | 縦方向のみ | 横方向のみ | 縦・横どちらも可 |
| 一致方式 | 近似一致のみ | 完全一致/近似一致 | 完全一致/近似一致 | 完全一致/近似一致 |
| 結果の指定方法 | 結果範囲を直接指定 | 列番号で指定 | 行番号で指定 | 戻り範囲を直接指定 |
| 左方向・上方向の検索 | 可能(範囲指定次第) | 不可 | 不可 | 可能 |
| エラー時の既定値 | IFERROR必要 | IFERROR必要 | IFERROR必要 | 引数で指定可 |
| 複数列を一括で返す | 不可 | 不可 | 不可 | 可能 |
| 数式の長さ | 短い | 普通 | 普通 | やや長い |
| 並べ替えの前提 | 必要(昇順) | FALSEなら不要 | FALSEなら不要 | 不要 |
どの関数を選べばいい?
判断基準はシンプルです。
- 完全一致で検索したい(実務の9割) → VLOOKUP関数が最も一般的
- 近似一致でランク判定・料金区分をしたい → LOOKUP関数がシンプル
- 横方向のデータを検索したい → HLOOKUP関数
- 左方向の検索や複数列の取得が必要 → XLOOKUP関数がベスト
- 検索位置を柔軟に指定したい → INDEX関数 + MATCH関数の組み合わせ
LOOKUP関数は構文がシンプルで覚えやすいのが強みです。ただし近似一致しかできないため、完全一致が必要な場面ではVLOOKUPやXLOOKUPを選びましょう。
まとめ
LOOKUP関数のポイントを振り返ります。
- 構文は
=LOOKUP(検索キー, 検索範囲, 結果範囲)の3引数(ベクトル形式) - 近似一致専用のため、検索範囲は昇順に並べ替え済みが前提
- ランク判定や料金区分など、近似一致が必要な場面で活躍する
- 完全一致で検索したい場合はVLOOKUP関数やXLOOKUP関数を使う
- 「最後に一致した値を取得する」テクニックはLOOKUP関数ならではの活用法
まずはランク判定のような近似一致の場面で使ってみてください。VLOOKUPとの使い分けがわかると、検索関数の選択肢が広がります。
