「引き継いだExcelファイルにLOOKUP関数が入っていたけど、VLOOKUPとどう違うの?」と戸惑った経験はありませんか。LOOKUPはVLOOKUPよりも古くからある検索関数です。今でも社内ファイルのなかで現役で動いています。ただ、引数の書き方がVLOOKUPと異なるため、初めて見ると読み解きにくいですよね。
この記事では、ExcelのLOOKUP関数の基本構文から、VLOOKUPやXLOOKUPとの違いまで解説します。「今さら覚える必要があるのか」という疑問にも最初に答えますよ。読み終えるころには、LOOKUP関数の数式を自信を持って読めるようになるはずです。
この記事は次のような人におすすめ
– 引き継いだファイルのLOOKUP関数を読み解きたい人
– VLOOKUPとLOOKUPの違いを整理したい人
– LOOKUP・VLOOKUP・XLOOKUPの使い分けを知りたい人
ExcelのLOOKUP関数とは:まず3関数の立ち位置を整理する
LOOKUP・VLOOKUP・XLOOKUPの違いを一言で
LOOKUP(ルックアップ)は「指定した値を検索して、対応する値を返す」関数です。名前の由来はそのまま「Look Up=探す」ですね。
Excelの検索関数にはLOOKUP・VLOOKUP・XLOOKUPの3つがあります。それぞれの位置づけを一言でまとめると次のとおりです。
- LOOKUP: 最も古い検索関数。引数が少なくシンプルだが、近似一致しかできない
- VLOOKUP: LOOKUPの後継。完全一致・近似一致を切り替えられる。全バージョン対応
- XLOOKUP: 最新の検索関数。検索方向の制約がなく最も柔軟。Excel 2021/Microsoft 365以降
結論から言うと、新しい数式を書くならXLOOKUPかVLOOKUPがおすすめです。ただし古いファイルにLOOKUPが残っているケースは多いので、「読めるようにしておく」ことが大切ですよ。
LOOKUP関数はいつから存在するのか
LOOKUP関数はExcelの初期バージョンから搭載されている互換関数です。Excel 2016からMicrosoft 365まで、すべてのバージョンで使えます。
VLOOKUPやHLOOKUPが登場する前から存在しています。古い社内テンプレートや引き継ぎファイルでよく見かけますよ。「見たことない関数が入っている」と感じたら、このLOOKUPである可能性が高いです。
LOOKUP関数の書き方【ベクトル形式】
LOOKUP関数には「ベクトル形式」と「配列形式」の2種類があります。実務で使われるのはほとんどベクトル形式です。まずはこちらから解説しますね。
基本構文と3つの引数の意味
ベクトル形式の構文はこちらです。
=LOOKUP(検索値, 検索範囲, [結果範囲])
引数は最大3つです。VLOOKUPの4つに比べて少ないのが特徴です。
| 引数 | 必須/省略可 | 意味 | 指定例 |
|---|---|---|---|
| 検索値 | 必須 | 探したい値 | A2 |
| 検索範囲 | 必須 | 検索する1行または1列の範囲 | B2:B10 |
| 結果範囲 | 省略可 | 結果を返す1行または1列の範囲 | C2:C10 |
VLOOKUPでは「表全体」を範囲に指定します。一方LOOKUPでは「検索する列」と「結果を返す列」を別々に指定します。この仕組みのおかげで、検索列が左端にない表でも使えるのがLOOKUPの利点です。
昇順ルールとは:昇順でないと正しい値が返らない理由
LOOKUP関数を使うとき、最も重要なルールが1つあります。検索範囲のデータは必ず昇順に並んでいなければなりません。
VLOOKUPには「検索の型」という引数があります。完全一致(FALSE)と近似一致(TRUE)を選べます。しかしLOOKUP関数にはこの引数がありません。常に近似一致で動作します。
近似一致とは、検索値とぴったり一致する値がない場合に、検索値を超えない最大の値を返す仕組みです。この動作はデータが昇順に並んでいることが前提です。
昇順になっていないデータにLOOKUPを使うと、誤った値が返ることがあります。引き継いだファイルでLOOKUP関数を見かけたら、まず検索範囲が昇順かどうかを確認してみてください。
使用例:社員番号から氏名を取り出す
具体的な使い方を見てみましょう。次のような社員表があるとします。
| A列(社員番号) | B列(氏名) |
|---|---|
| 1001 | 田中太郎 |
| 1002 | 佐藤花子 |
| 1003 | 鈴木一郎 |
| 1004 | 高橋美咲 |
社員番号1003の氏名を取り出すには、次のように書きます。
=LOOKUP(1003, A2:A5, B2:B5)
結果は「鈴木一郎」です。A列(検索範囲)が昇順に並んでいるので、正しく動作します。
もし社員番号1005(存在しない値)を検索するとどうなるでしょうか。
=LOOKUP(1005, A2:A5, B2:B5)
結果は「高橋美咲」です。1005を超えない最大値は1004なので、1004に対応する値が返ります。完全一致ではなく近似一致で動作する点に注意してくださいね。
LOOKUP関数の書き方【配列形式】
配列形式の構文(引数2つ)
LOOKUP関数にはもう一つ「配列形式」があります。引数は2つだけです。
=LOOKUP(検索値, 配列)
| 引数 | 必須/省略可 | 意味 |
|---|---|---|
| 検索値 | 必須 | 探したい値 |
| 配列 | 必須 | 検索と結果を含むセル範囲 |
配列形式では、指定した範囲の形状によって動作が変わります。
- 縦長または正方形の範囲: 最初の列で検索し、最後の列の値を返す
- 横長の範囲: 最初の行で検索し、最後の行の値を返す
配列形式が使われる場面と現在の推奨度
配列形式はVLOOKUPやHLOOKUPで代替できます。Microsoftも互換性維持のための形式と位置づけています。新しくこの形式を使う必要はほとんどありません。
古いファイルで引数が2つだけのLOOKUP関数を見かけたら、「配列形式だな」と判断できます。検索範囲と結果範囲が1つの配列にまとまっているだけです。やっていること自体はベクトル形式と同じですよ。
VLOOKUP・XLOOKUPと何が違うのか:3関数比較
LOOKUPとVLOOKUP、XLOOKUPの違いを表で整理しましょう。
| 比較項目 | LOOKUP | VLOOKUP | XLOOKUP |
|---|---|---|---|
| 引数の数 | 2〜3個 | 4個(必須3) | 3〜6個 |
| 検索方向 | 縦・横を自動判定 | 縦方向のみ | 縦・横どちらも対応 |
| 一致モード | 近似一致のみ | 完全一致/近似一致を選択 | 完全一致/近似一致/ワイルドカード等 |
| 検索列の制約 | なし(検索と結果を独立指定) | 検索列は範囲の左端のみ | なし(自由に指定可) |
| 昇順必須 | 常に必須 | 近似一致(TRUE)のときだけ必須 | 不要 |
| 対応バージョン | 全バージョン | 全バージョン | Excel 2021/Microsoft 365 |
| 現在の推奨度 | 低(読み取り用途) | 中(互換性が必要な環境) | 高(新規作成の第一候補) |
LOOKUP近似一致 vs VLOOKUP近似一致(動作差分)
LOOKUPとVLOOKUP(第4引数TRUE)はどちらも近似一致で動作します。ただし使い勝手に違いがあります。
' LOOKUP — 検索の型を指定する引数がない(常に近似一致)
=LOOKUP(75, A2:A5, B2:B5)
' VLOOKUP — 第4引数TRUEで近似一致を明示
=VLOOKUP(75, A2:B5, 2, TRUE)
LOOKUPは「完全一致モードがない」のが最大の違いです。VLOOKUPなら第4引数をFALSEにすれば完全一致検索ができます。LOOKUPにはその切り替えがありません。
一方でLOOKUPには独自の利点もあります。検索範囲と結果範囲を別々に指定できるので、検索列が左端にない表でも対応できます。VLOOKUPの「検索列が左端になければ使えない」という制約に縛られません。
それぞれの関数について詳しく知りたい方は、以下の記事も参考にしてみてください。
- VLOOKUPの使い方: ExcelのVLOOKUP関数の使い方
- XLOOKUPの使い方: ExcelのXLOOKUP関数の使い方
- HLOOKUPの使い方: ExcelのHLOOKUP関数の使い方
- 検索関数の選び方: VLOOKUP・XLOOKUP・INDEX+MATCHの違いと使い分け
LOOKUP関数が今でも使われている場面
「わざわざLOOKUPを使う場面なんてあるの?」と思うかもしれません。実は、近似一致の特性を活かしたランク判定で今でも使われているケースがあります。
近似一致ランク判定の実例:評価区分を昇順マスタで自動判定
テストの点数に応じてA〜Dの評価をつけたい場面を考えてみましょう。次のような基準表を用意します。
| D列(点数の下限) | E列(評価) |
|---|---|
| 0 | D |
| 60 | C |
| 70 | B |
| 80 | A |
点数が75のとき、評価を自動で判定する数式がこちらです。
=LOOKUP(75, D2:D5, E2:E5)
結果は「B」です。75は70以上80未満なので、70に対応する「B」が返ります。
この数式が動く仕組みは、LOOKUP関数の近似一致です。検索値75を超えない最大値(70)を見つけて、対応する結果を返しています。
同じことはVLOOKUP(75, D2:E5, 2, TRUE)でも実現できます。ただしLOOKUPは検索列と結果列を独立して指定できるので、基準表のレイアウトを自由に組めますよ。古いファイルでこのパターンを見かけたら、「ランク判定をしているんだな」と読み解けるはずです。
よくあるエラーと対処法
#N/Aエラーの原因と対処
LOOKUP関数で最も多いエラーが#N/Aです。主な原因は次の2つです。
- 検索値が検索範囲の最小値より小さい: 検索範囲が{60, 70, 80}のとき、検索値30を指定すると#N/Aになります。近似一致では「検索値を超えない最大値」を探しますが、最小値60より小さい値には候補がないためです
- 検索範囲が空、または指定が間違っている: 範囲の指定ミスで空のセルを参照しているケースも原因になります
対処法としては、検索範囲の先頭に十分小さい値を追加しておくと安心です。
' 検索範囲の先頭に0を追加してエラーを防ぐ
=LOOKUP(30, {0,60,70,80}, {"対象外","C","B","A"})
想定外の近似値が返るケース:昇順ルール違反
「エラーは出ないけど、返ってくる値がおかしい」というケースもあります。ほとんどの場合、検索範囲が昇順に並んでいないことが原因です。
LOOKUP関数はバイナリサーチ(二分探索)という方法でデータを検索します。昇順を前提としたアルゴリズムです。データの順序が乱れると、検索の途中で間違った位置を見てしまいます。
対処法は次の2つです。
- 検索範囲のデータを昇順に並べ替える
- 完全一致が必要な場合はVLOOKUP(第4引数FALSE)やXLOOKUPに書き換える
引き継いだファイルで結果がおかしいと感じたら、まず検索範囲のソート順を確認してみてください。
まとめ:今から書くならXLOOKUP、古いファイルはLOOKUPで読む
この記事のポイントを整理しておきましょう。
- LOOKUP関数はExcelの初期から搭載されている検索関数。引数は2〜3個でシンプル
- ベクトル形式(検索範囲と結果範囲を別々に指定)が実務の主流
- 常に近似一致で動作するため、検索範囲は必ず昇順に並べておく
- VLOOKUPとの最大の違いは「完全一致モードがないこと」と「検索列の位置が自由なこと」
- 新しく数式を書くならXLOOKUPが最適。LOOKUPは「古いファイルを読み解くため」に知っておくと安心
LOOKUP関数を新規で使う場面は限られます。ただし引き継いだファイルに入っていることは珍しくありません。この記事で解説した構文と近似一致の動作を押さえておけば、いざというときに慌てずに対応できますよ。
