「1行だけの表からデータを引きたい」「VLOOKUPほど大げさな関数を使うまでもない」。スプレッドシートで検索をするとき、こんな場面はありませんか。
VLOOKUP関数やHLOOKUP関数は便利ですが、引数が多くて構文もやや長めです。もっとシンプルに書きたいときがありますよね。
そんなときに使えるのがLOOKUP関数です。1行または1列の範囲をサッと検索して、対応する値を返してくれます。この記事ではスプレッドシートのLOOKUP関数の基本から、VLOOKUPとの違い・使い分け・よくある質問までわかりやすく紹介します。
スプレッドシートのLOOKUP関数とは?
LOOKUP関数(読み方:ルックアップ関数)は、1行または1列の範囲を検索して対応する値を返す関数です。関数名は英語の「Lookup(検索・照合する)」がそのまま由来になっています。
VLOOKUP関数が「縦方向(Vertical)の表検索」、HLOOKUP関数が「横方向(Horizontal)の表検索」に特化しています。一方、LOOKUP関数は1行/1列のシンプルな範囲を検索するのが特徴です。
LOOKUP関数にできることをまとめると、次のとおりです。
- 1列のデータから対応する値を取得する
- 1行のデータから対応する値を取得する
- 近似一致でランク判定や料金区分を行う
- 検索方向(縦・横)を意識せずに書ける
検索範囲が小さい場面では、VLOOKUPより短い数式で済むのがメリットですよ。
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
検索範囲が昇順でないと、正しい結果が返りません。データを事前に並べ替えておくか、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関数のほうが引数が少なくて直感的ですね。
送料区分の自動判定
ECサイトの管理シートなどで、注文金額に応じた送料を自動判定する場面にも使えます。
| H列(金額の境界値) | I列(送料) |
|---|---|
| 0 | 800 |
| 3000 | 500 |
| 5000 | 300 |
| 10000 | 0 |
注文金額がC2セルに入っているとき、送料を求めるにはこう書きます。
=LOOKUP(C2, H2:H5, I2:I5)
C2が「4500」なら、H列から4500以下の最大値「3000」を見つけます。対応するI列の「500」(送料500円)が返ります。IF関数をネストして書くより、はるかにシンプルですよ。
IFERROR関数と組み合わせてエラーを防ぐ
LOOKUP関数は検索キーが検索範囲の最小値より小さいと#N/Aエラーを返します。IFERROR関数で囲めば、エラー時に代わりの値を表示できます。
=IFERROR(LOOKUP(D2, A2:A10, B2:B10), "該当なし")
実務では「該当なし」や空文字「””」を指定するケースが多いです。検索系の数式には、IFERRORをセットで使う習慣をつけておくと安心ですよ。
別シートのデータを検索する
検索先が別シートにある場合は、シート名のあとに「!」をつけます。
=LOOKUP(A2, マスタ!B:B, マスタ!C:C)
シート名に空白を含む場合はシングルクォーテーションで囲みます。
=LOOKUP(A2, '商品 マスタ'!B:B, '商品 マスタ'!C:C)
別シートの範囲をマウスで選択すると、シート名と「!」が自動で入力されます。手入力よりもミスが減るのでおすすめです。
NOTE
別シートを参照する検索は、VLOOKUP関数でも同じ書き方です。マスタテーブルを別シートに置いて管理するのは、スプレッドシートの定番パターンですよ。
最後に一致した値を取得する
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関数ならではのテクニックです。特定の条件に合う最新データを取り出したいときに重宝しますよ。
担当者ごとの最新ステータスを取り出す
「最後に一致した値を取得する」テクニックは、進捗管理シートでも便利です。A列に担当者、B列にステータス(着手前/対応中/完了)が時系列で並んでいるとします。
担当者「鈴木」の最新ステータスを取り出すにはこう書きます。
=LOOKUP(2, 1/(A2:A100="鈴木"), B2:B100)
新しい行が下に追加されていく前提の表なら、ピボットテーブルを作らなくても1行の数式で最新値が拾えます。日々のデータ更新が多い管理シートで重宝するテクニックですよ。
よくあるエラーと対処法
LOOKUP関数で発生しやすいエラーをまとめます。
| エラー | 原因 | 対処法 |
|---|---|---|
| #N/A | 検索キーが検索範囲の最小値より小さい | データを確認するか、IFERRORで囲む |
| #N/A | 検索範囲が昇順でない | 検索範囲を昇順に並べ替える |
| #REF! | 検索範囲と結果範囲のサイズが異なる | 両方の範囲を同じ行数(または列数)に揃える |
| #VALUE! | 検索キーが空白 | 検索キーのセルにデータを入力する |
| 間違った値が返る | 検索範囲が昇順でない | 昇順に並べ替えるか、VLOOKUPの完全一致を使う |
一番多いミス: 検索範囲が昇順でない
LOOKUP関数でもっとも多いトラブルが「検索範囲が昇順になっていない」ケースです。近似一致専用の関数なので、昇順でないと間違った値を返すことがあります。
厄介なのは、エラーにならず誤った結果が返る場合があること。見た目上は正常に動いているように見えるため、気づきにくい点に注意してください。
対処法は2つあります。
- 検索範囲を昇順に並べ替える: データ入力時にルール化しておくのがおすすめです
- 完全一致の関数に切り替える: 以下の関数を使いましょう
LOOKUP関数とVLOOKUP関数の違いを徹底比較
「LOOKUPとVLOOKUPはどう違うの?」という疑問は、検索関数を学び始めた方からよく聞かれます。両者の違いを4つの観点で整理します。
違い1: 検索方向の柔軟性
VLOOKUP関数は縦方向(列方向)の検索専用です。一方、LOOKUP関数は1行でも1列でも検索できます。
配列形式を使えば、検索範囲の形に応じて方向が自動で切り替わるのが特徴です。横方向のデータを検索したい場合、VLOOKUPでは対応できません。LOOKUP関数なら範囲指定を変えるだけでOKです。
違い2: 完全一致と近似一致
VLOOKUPは第4引数で完全一致(FALSE)と近似一致(TRUE)を選べます。商品コードや社員番号のような「ピッタリ一致するものだけを探したい」場面に向いています。
LOOKUP関数は近似一致のみです。検索キーと完全に一致しなくても、検索キー以下の最大値を返します。「○○以上△△未満」の区間判定が得意な反面、完全一致が必要な場面では使えません。
違い3: 結果の指定方法
=LOOKUP(D2, A2:A10, C2:C10)
=VLOOKUP(D2, A2:C10, 3, FALSE)
LOOKUPは結果範囲(C2:C10)を直接指定します。VLOOKUPは検索範囲全体(A2:C10)を指定して、3列目を番号で指定します。
列の挿入・削除があったとき、VLOOKUPは列番号がずれるリスクがあります。LOOKUPは結果範囲を直接指定するので、列の増減に強いのがメリットです。
違い4: 並べ替えの必要性
LOOKUPは近似一致専用のため、検索範囲を昇順に並べ替えておく必要があります。データの順序がそのまま結果に影響します。
VLOOKUPは完全一致(FALSE)を指定すれば、検索範囲が並べ替えられていなくても正しい結果を返します。実務では完全一致が基本なので、この点はVLOOKUPの大きなメリットです。
検索関数の比較表(HLOOKUP・XLOOKUPも含む)
スプレッドシートには検索関数が複数あります。「どれを使えばいいの?」と迷う方も多いですよね。それぞれの特徴を比較表で整理します。
| 特徴 | LOOKUP | VLOOKUP | HLOOKUP | XLOOKUP |
|---|---|---|---|---|
| 検索方向 | 1行/1列(自動判定) | 縦方向のみ | 横方向のみ | 縦・横どちらも可 |
| 一致方式 | 近似一致のみ | 完全一致/近似一致 | 完全一致/近似一致 | 完全一致/近似一致 |
| 結果の指定方法 | 結果範囲を直接指定 | 列番号で指定 | 行番号で指定 | 戻り範囲を直接指定 |
| 左方向・上方向の検索 | 可能(範囲指定次第) | 不可 | 不可 | 可能 |
| エラー時の既定値 | IFERROR必要 | IFERROR必要 | IFERROR必要 | 引数で指定可 |
| 複数列を一括で返す | 不可 | 不可 | 不可 | 可能 |
| 数式の長さ | 短い | 普通 | 普通 | やや長い |
| 並べ替えの前提 | 必要(昇順) | FALSEなら不要 | FALSEなら不要 | 不要 |
どの関数を選べばいい? 判断フロー
検索関数を選ぶときは、次の順番で考えるとスムーズです。
ステップ1: 完全一致か近似一致か?
まず「探している値とピッタリ一致するものを見つけたいか」を考えます。商品コードや社員番号など、一致するものだけを探したい場合は完全一致です。実務の9割はこちらに該当します。
完全一致なら → VLOOKUP関数(第4引数にFALSE)が最も一般的です。
ステップ2: 近似一致ならLOOKUP関数
ランク判定や料金区分など「○○以上△△未満」の区間で判定したい場合は近似一致です。LOOKUP関数の出番ですよ。
ステップ3: 特殊な要件があるか?
LOOKUP関数のよくある質問(FAQ)
Q1. LOOKUP関数とVLOOKUP関数のどちらを覚えればいいですか?
実務でまず覚えるべきはVLOOKUP関数です。完全一致で検索できるので、商品コードや社員番号といったID検索の場面で使えます。
LOOKUP関数は「近似一致でランクや区分を判定する」という特定の場面に強い関数です。VLOOKUPに慣れてから、必要に応じて使い分けていけば十分ですよ。
Q2. LOOKUP関数は廃止予定の関数ですか?
廃止予定ではありません。LOOKUP関数はGoogleスプレッドシート・Excel双方で標準サポートされており、引き続き利用できます。
ただし、より柔軟なXLOOKUP関数が登場した現在、新規にデータ参照を組むなら XLOOKUP を選ぶ方がメリットが多いケースもあります。既存シートの保守ではLOOKUPをそのまま使い、新規ならXLOOKUPを検討する、という使い分けがおすすめです。
Q3. LOOKUP関数で完全一致の検索はできますか?
LOOKUP関数だけでは完全一致は実現できません。LOOKUPは構造上、近似一致専用の関数です。
完全一致で検索したい場合は、VLOOKUP関数・HLOOKUP関数・XLOOKUP関数のいずれかを使ってください。これらは引数で完全一致を指定できます。
Q4. LOOKUP関数で大文字・小文字を区別できますか?
LOOKUP関数は大文字・小文字を区別しません。「APPLE」と「apple」は同じ値として扱われます。
大文字・小文字を区別して検索したい場合は、別途EXACT関数などを組み合わせる方法があります。区別が必要な場面はあまり多くありませんが、システムIDなど大文字小文字に意味があるデータでは注意しましょう。
Q5. 検索範囲が並べ替えできない場合はどうすればいいですか?
並べ替えができない(元データを並び替えたくない)場合は、LOOKUP関数の使用は避けましょう。代わりにVLOOKUP関数(完全一致FALSE)やXLOOKUP関数を使うのがおすすめです。
これらは並べ替え不要で正しく動作します。元の表の並びを保ったまま検索したいときに重宝しますよ。
Q6. ExcelのLOOKUP関数と同じように使えますか?
はい、ExcelとGoogleスプレッドシートのLOOKUP関数は構文・動作ともにほぼ同じです。ExcelファイルとGoogleスプレッドシートでデータをやり取りしても、LOOKUP関数の数式はそのまま動作します。
互換性の高さは、検索関数の中でもLOOKUPの強みのひとつです。
まとめ
スプレッドシートのLOOKUP関数のポイントを振り返ります。
- 構文は
=LOOKUP(検索キー, 検索範囲, 結果範囲)の3引数が基本 - 近似一致専用のため、検索範囲は昇順に並べ替え済みが前提
- ランク判定や料金区分など、近似一致が必要な場面で活躍する
- 完全一致で検索したい場合はVLOOKUP関数やXLOOKUP関数を使う
- 「最後に一致した値を取得する」テクニックはLOOKUP関数ならではの活用法
- IFERROR関数とセットで使うとエラー対策も安心
まずはランク判定のような近似一致の場面で使ってみてください。VLOOKUPとの使い分けがわかると、検索関数の選択肢がグッと広がりますよ。
