まず押さえる:LOOKUP関数/VLOOKUP関数の“できること”早見表
「Excelで検索」と聞いて真っ先に出てくるのがVLOOKUP関数。一方でLOOKUP関数は名前は知っていても、実務ではあまり使われない印象があるかもしれません。結論から言うと、実務での主役はVLOOKUPで、LOOKUPは条件がハマると軽いけどハマらないと事故りやすいタイプです。まずは「何ができて、何が苦手か」を表で押さえると迷いが減ります。
| 観点 | LOOKUP関数 | VLOOKUP関数 |
|---|---|---|
| 主な用途 | 1行/1列の範囲から値を探して返す(シンプル) | 表(縦)からキー検索して、指定列の値を返す(実務向き) |
| 検索方法 | 近似一致が基本(小さい順など並びが重要) | 完全一致/近似一致を選べる(第4引数) |
| 並び替え要否 | 必要(未整列だと誤結果になりやすい) | 完全一致なら不要(近似一致は要注意) |
| 返せる範囲 | 基本は「検索範囲」と「結果範囲」を別に指定(ベクトル形式) | テーブルの左端列で検索し、右側の列を返す |
| 弱点 | 仕様理解が浅いとミスりやすい(近似一致・並び・空白) | 列番号指定が壊れやすい(列追加・移動に弱い) |
式の形も、先に見ておくとイメージがつきます。
-
LOOKUP(ベクトル形式の代表例)
=LOOKUP(検索値, 検索ベクトル, 結果ベクトル) -
VLOOKUP
=VLOOKUP(検索値, 範囲, 列番号, [検索方法])
たとえば「社員コード → 氏名」を引くなら、VLOOKUPは“社員マスタ表”をそのまま読みに行けるので自然です。対してLOOKUPは、「検索する列(社員コード列)」と「返す列(氏名列)」をそれぞれ指定できるので一見スマート。でも、LOOKUPは基本が近似一致なので、社員コードが昇順に並んでいない、あるいは途中に空白や文字列混在があるだけで、気づかないうちに別人の名前を返すリスクがあります。
このブログのゴールは「関数の暗記」ではなく、実務で安全に使い分ける判断軸を持つこと。次章からは、いちばん多い現場シーン(コード→名称)で、どっちを使うと手戻りが少ないかを具体例で比べていきます。
実務シーンで比べる①:単純な検索(コード→名称)での使い分け
いちばんよくあるのが「商品コードから商品名を出す」「社員コードから氏名を出す」みたいなコード→名称の変換です。現場では、この用途なら基本はVLOOKUP(完全一致)に寄せるのが安全。LOOKUPも書けますが、前章で触れたとおり近似一致が前提なので、マスタの状態次第で“静かに間違う”リスクがつきまといます。
ケース:売上明細に商品名を付けたい
例として、売上明細(A列:商品コード)に、商品マスタ(E列:商品コード/F列:商品名)から商品名を引っ張る場面を想定します。
- 売上明細:A2 に商品コード(例:P102)
- 商品マスタ:E2:E100 が商品コード、F2:F100 が商品名
結論:まずはVLOOKUPの「完全一致」
VLOOKUPなら、表をそのまま指定して「一致した行の○列目」を返せます。実務の基本形はこれです。
=VLOOKUP(A2, $E$2:$F$100, 2, FALSE)
ポイントは第4引数をFALSE(完全一致)にすること。これで「P102と完全に同じコード」の行だけを拾います。並び順がバラバラでも関係ありません。
さらに実務では、未登録コードが混ざることもあるので、エラー表示を抑えるならIFERRORとセットが鉄板です。
=IFERROR(VLOOKUP(A2, $E$2:$F$100, 2, FALSE), "未登録")
LOOKUPで書くとどうなる?(見た目はスッキリ、でも条件付き)
LOOKUP(ベクトル形式)だと、検索列と結果列を別で指定できるので式は短く見えます。
=LOOKUP(A2, $E$2:$E$100, $F$2:$F$100)
ただしこの式が安全に成立する条件はシビアです。
- 商品コード列(E2:E100)が昇順に並んでいる
- コードが数字/文字列で混在していない
- 途中に空白や崩れがなく、検索範囲がきれいな1列
この条件が崩れると、LOOKUPは「完全一致で見つからないとき、直前の値を返す」という挙動になりやすく、それっぽい値を返してしまうのが怖いところです。たとえばマスタが未整列なのに気づかず運用すると、エラーにならずに別商品の名前が入り、検算するまで発見できません。
単純検索の使い分けルール(迷わない基準)
- 原則:VLOOKUP + FALSE(完全一致)で「間違えようがない」形にする
- 例外:マスタが常に昇順で整備され、仕様理解がチームで揃っているならLOOKUPも可
- 運用目線:「ミスったときに間違いだと気づけるか?」まで含めると、単純検索はVLOOKUPが強い
次章では、さらに現場で効いてくる論点として、表の列追加やマスタ拡張が起きたときに壊れやすいのはどっちか(運用・保守性)を掘り下げます。
実務シーンで比べる②:表の増減・列追加に強いのはどっち?(運用・保守性)
実務で本当に困るのは「最初は動いてたのに、運用してたら壊れた」パターンです。特に多いのが、マスタの列が増える/順番が変わる/範囲が広がるケース。ここでは保守性(壊れにくさ・直しやすさ)の観点で、LOOKUPとVLOOKUPを比べます。
よくある事故①:列追加でVLOOKUPの「列番号」がズレる
VLOOKUPは「範囲の左端で検索して、右から何列目を返す」という仕様なので、列番号が固定だと変更に弱いです。
たとえば商品マスタが E列:商品コード / F列:商品名 のとき、明細側はこう書けました(2章の形):
=VLOOKUP(A2, $E$2:$F$100, 2, FALSE)
ところが運用中に「カテゴリ列を商品名の手前に追加」して、マスタが E:商品コード / F:カテゴリ / G:商品名 に変わると…。
- 式が参照する「2列目」はカテゴリになり、商品名のつもりでカテゴリが出る
- しかもエラーにならないので、気づきにくい
この場合は列番号を3に直す必要があります。
=VLOOKUP(A2, $E$2:$G$100, 3, FALSE)
つまりVLOOKUPは、表の構造が変わる職場ほどメンテが発生します。列追加が頻繁なマスタ(商品・部門・プロジェクトなど)は特に要注意です。
よくある事故②:範囲の増減で「一部だけ抜ける」
もう一つは、マスタが伸びたのに範囲固定のまま運用してしまうケース。たとえば $E$2:$F$100 のままなのに、商品が追加されて101行目以降に新コードが入ると、新商品だけ未登録扱いになります。
対策としては、範囲を広めに取る(例:$E:$F)か、テーブル化(Ctrl+T)して参照が自動拡張される形に寄せるのが実務的です。
じゃあLOOKUPは保守性が高い?:列追加には強いが、運用条件がシビア
LOOKUP(ベクトル形式)の良いところは「検索列」と「結果列」を別指定できる点です。さっきの例なら、商品名列がGに移動しても、式側で返す範囲をG列に変えるだけで済みます。
=LOOKUP(A2, $E$2:$E$100, $G$2:$G$100)
さらに「商品名列の場所が変わっても、検索列(商品コード)がE列のままなら成り立つ」ため、列番号ズレ事故は起きにくいです。
ただし、LOOKUPは保守性の前提として
- 検索列が昇順に整列され続ける
- 空白や型混在など、データの崩れが起きない
が必要でした。運用でマスタが「誰でも追記するシート」になっていると、この前提があっさり崩れます。列追加には強くても、データ品質に弱いのがLOOKUPの現実です。
実務ルール:変更が起きる場所を見て使い分ける
- 列が増えたり並びが変わりやすい:VLOOKUPはズレやすい(列番号が地雷)。ただし完全一致で安全
- データが崩れやすい(未整列・空白混入):LOOKUPは静かに誤結果を返しやすい
- 保守の基本:「マスタはテーブル化」「参照範囲は固定しすぎない」「変更が入る前提で式を選ぶ」
次章では、こうした運用の中で実際に起きるミスのパターン(近似一致、データ並び、空白)を、どこでどうハマるのか具体的に比較していきます。
実務シーンで比べる③:ミスが起きるポイント比較(近似一致・データ並び・空白)
LOOKUPとVLOOKUPの差がいちばん“事故”として出るのが、ミスってもエラーにならないパターンです。特に注意したいのは、①近似一致、②並び順(ソート)、③空白や型のブレ。ここを押さえると「なぜVLOOKUP(完全一致)が現場で強いのか」が腹落ちします。
ミス①:近似一致が混ざると「それっぽい値」が返る
LOOKUPは基本が近似一致なので、完全一致が見つからないと“直前の値”を返す挙動になりがちです。例えば本当は「P105」を探したいのに、マスタに未登録で「P104」までしかない場合、LOOKUPはP104の情報を返してしまうことがあります。つまり未登録なのに普通に表示されるのが怖い。
VLOOKUPでも第4引数を省略したりTRUEにすると近似一致になり、同じ事故が起きます。
=VLOOKUP(A2,$E$2:$F$100,2)← 省略は近似一致扱いになりやすく危険=VLOOKUP(A2,$E$2:$F$100,2,TRUE)← 近似一致(ソート必須)
実務ルールとしてはシンプルで、コード→名称は必ずFALSE。
=VLOOKUP(A2,$E$2:$F$100,2,FALSE)
ミス②:並び順(ソート)に依存すると、更新運用で破綻する
LOOKUP(近似一致前提)は、検索列が昇順で整列していることが大前提です。でも現場のマスタは「追加した人の順に下へ追記」「フィルタして戻し忘れ」などで、並びが簡単に崩れます。
このとき厄介なのが、崩れてもLOOKUPはエラーを出さずに間違う点。検算しない限り発見しづらく、月次の締めで爆発します。
一方、VLOOKUPは完全一致(FALSE)なら並び順に依存しないので、マスタが“追記運用”でも比較的安全です。裏を返すと、VLOOKUP運用で並び順を気にする必要が出るのは、近似一致(TRUE)を使うケース(単価表のレンジ判定など)に限ります。
ミス③:空白・余計なスペース・文字列/数値の混在で「一致しない」
もう一つの定番がデータの汚れ問題です。たとえば「P102 」のように末尾にスペースが混ざる、数字コードが「00123(文字列)」と「123(数値)」で混在する、といったケース。ここでは挙動が分かれます。
- VLOOKUP(FALSE):一致しなければ#N/Aで止まる → まだ気づける(IFERRORで握りつぶしすぎると逆に危険)
- LOOKUP:データ状態によっては近似一致で別の値を返す → 気づきにくい
対策は「関数を頑張る」より、まずはデータを整えるのが早いです。
- 余計な空白:
TRIMで除去(取り込みデータに多い) - 文字列/数値混在:コード列の表示形式・入力規則を揃える
- 未登録検知:
IFERRORで隠すなら、「未登録」など目立つ文言にする
まとめると、ミスの出方はこうです。
- LOOKUP:条件が崩れると「静かに間違う」リスクが高い(近似一致×未整列×汚れに弱い)
- VLOOKUP(FALSE):一致しないとエラーになりやすく、異常検知ができる
次章では、ここまでの比較を踏まえて「職場で迷わない選び方」と、現場でさらに事故を減らせる代替案(XLOOKUP/INDEX+MATCH)まで一気に整理します。
結論:職場で迷わない選び方+おすすめ代替(XLOOKUP/INDEX+MATCH)
ここまでの比較を踏まえると、実務の結論はシンプルです。「まず安全に回す」ならVLOOKUP(完全一致)、そして「運用で壊れない形」まで狙うならXLOOKUPかINDEX+MATCHが最終的に手戻りを減らします。LOOKUPは「整列が担保され、仕様を理解した人だけが触る」条件でのみ選択肢に入る、という立ち位置です。
迷ったらこのルール:まずはVLOOKUP(FALSE)で型を作る
- コード→名称/ID→部署名など、キーが一意の検索は VLOOKUP + FALSE
- マスタ未登録が混ざる前提なら、エラーを消すのではなく「未登録」と明示
=IFERROR(VLOOKUP(A2,$E$2:$F$100,2,FALSE),"未登録")
ポイントは「エラーを静かに消して空欄にしない」こと。空欄は見落とされやすく、後工程(集計・請求)で爆発します。
ただしVLOOKUPの弱点(列番号ズレ)を感じたら、代替へ移行
3章で触れた通り、列追加・列移動が起きるマスタでは、VLOOKUPの「列番号」が地雷になります。ここでおすすめの代替がXLOOKUP、次点でINDEX+MATCHです。
おすすめ代替①:XLOOKUP(いま一番ラクで事故りにくい)
XLOOKUPは「検索列」と「返す列」を分けて指定でき、なおかつ完全一致がデフォルト寄りの設計で、VLOOKUPの弱点をまとめて潰せます。
=XLOOKUP(A2,$E$2:$E$100,$F$2:$F$100,"未登録")
- 列番号が不要 → 列追加・列移動に強い
- 見つからないときの表示も引数で指定 → IFERRORが不要になりがち
- 参照範囲が「列」で明確 → レビューもしやすい
職場で使える環境(Microsoft 365等)なら、検索系は基本XLOOKUPに寄せるのが最短ルートです。
おすすめ代替②:INDEX+MATCH(古い環境でも通る“定番の強い書き方”)
XLOOKUPが使えない場合でも、INDEX+MATCHなら同じ発想で組めます。
=IFERROR(INDEX($F$2:$F$100, MATCH(A2,$E$2:$E$100,0)),"未登録")
- MATCHの「0」が完全一致(ここが超重要)
- 列位置が変わっても、返す列(INDEX側)を差し替えるだけでOK
結局どれを選ぶ?(実務の判断フロー)
- 会社のExcelがXLOOKUP対応 → XLOOKUP(最優先)
- XLOOKUPなし/互換性優先 → INDEX+MATCH
- とにかく早く・誰でも読める形で統一 → VLOOKUP(FALSE)
- LOOKUPは「昇順が保証される特殊ケース」以外では、基本は封印でOK
検索関数で一番大事なのは、式のうまさより運用で壊れない設計です。あなたの職場の「マスタは誰が触る?列は増える?未登録は混ざる?」に合わせて、安全側(完全一致/列番号依存なし)へ寄せるのが正解です。


コメント