VLOOKUP関数の使い方・読み方|基本から#N/Aエラーの直し方まで

執筆者:

カテゴリ:

VLOOKUP関数の使い方・読み方のイメージ

検索・参照

VLOOKUP関数の使い方・読み方

Excel関数辞典

読み方:VLOOKUP は「ブイルックアップ」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)

VLOOKUPは、表の中から目的の値を探して、同じ行の別の列を取り出す関数です。「商品コードから商品名を引く」「社員番号から部署名を引く」といった、表と表を突き合わせる作業で使います。

使える環境Excel○Googleスプレッドシート○
このページの中身(31項目)
  1. 書式
  2. 基本の使い方
  3. 実務での書き方
  4. 4つ目の引数を省略してはいけない理由
  5. エラーの原因と対処
  6. 列を挿入すると壊れる問題
  7. Excelとの違い
  8. 実例:商品リストから単価を引く
  9. つまずきやすいところ
  10. エラー別の見分け方
  11. 似た関数との使い分け
  12. 大量データで重くなったとき
  13. そのまま使える型を5つ
  14. 引数の意味を表で押さえる
  15. 壊れ方を4つに分類する
  16. 重くなったときに効く順番
  17. 引き継ぐときに書いておくこと
  18. 検索値の掃除を先にする
  19. 近似一致を正しく使う場面
  20. 他の関数に置き換える判断
  21. 実務でつまずいた場面と、その直し方
  22. 表そのものを直したほうが早い場合
  23. 確認のための小さな数式
  24. チェックリスト
  25. 「検索・参照」の関数を全体から見る
  26. このサイトの収録状況
  27. 数式を書く前の手順
  28. どの関数でも共通する確認
  29. 引き継ぐときに残すこと
  30. まとめ
  31. 関連する関数

この記事の書式と対応環境の出どころ(2026-08-26 確認)

関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。

スプレッドシートで最もよく使われる関数のひとつですが、同時にエラーで詰まりやすい関数でもあります。この記事では基本の使い方に加えて、#N/A が出たときの原因の切り分け方まで扱います。

VLOOKUP関数の使い方の記事構成図
VLOOKUP関数の使い方:この記事で扱う内容

書式

=VLOOKUP(検索キー, 範囲, 列番号, [検索の型])
引数内容
検索キー探したい値。セル参照でも直接入力でも可
範囲探しに行く表の範囲。左端の列が検索対象になる
列番号範囲の左端を1として、取り出したい列が何番目か
検索の型FALSE=完全一致 / TRUE=近似一致(省略時はTRUE)

4つ目の引数は、基本は FALSE を書いてください

省略すると近似一致になり、意図しない値が返ります。送料や評価の段階表を引くときだけ TRUE を使います。その使い方は後半で説明します。理由は後述します。

基本の使い方

こんな商品マスタがあるとします。

ABC
1商品コード商品名価格
2A-101ボールペン150
3A-102ノート320
4B-201ハサミ480
5B-202ホチキス890

ここから「B-201」の商品名を取り出します。

=VLOOKUP("B-201", A2:C5, 2, FALSE)

結果:ハサミ

引数を順番に読むとこうなります。

  1. "B-201" を探す
  2. A2:C5 の左端の列(A列)から探す
  3. 見つかった行の2列目(B列)を返す
  4. FALSE なので完全に一致するものだけ

価格が欲しいなら、列番号を 3 に変えます。

=VLOOKUP("B-201", A2:C5, 3, FALSE)   → 480
VLOOKUP関数の使い方の要点図
VLOOKUP関数の使い方

実務での書き方

実際には検索キーをセルで指定し、数式を下方向にコピーします。このとき範囲は絶対参照($付き)にするのが必須です。

=VLOOKUP(E2, $A$2:$C$5, 2, FALSE)

$ を付けないと、下にコピーしたときに範囲がずれて A3:C6、A4:C7…と下がっていき、表の下のほうがヒットしなくなります。これが「途中から急に#N/Aになる」典型的な原因です。

範囲の指定は $A$2:$C$5 のように行を固定してもいいですが、行が増える可能性があるなら A:C と列全体で指定するほうが安全です。

=VLOOKUP(E2, A:C, 2, FALSE)

4つ目の引数を省略してはいけない理由

FALSE を省略すると TRUE(近似一致)として扱われます。近似一致は範囲の左端列が昇順に並んでいる前提で動き、検索キー以下の最大値を拾います。

先ほどの表で =VLOOKUP("B-999", A2:C5, 2) とすると、完全一致する「B-999」は無いのに、エラーにならず ホチキス(B-202の行)が返ります。間違いに気づけないのが最大の問題です。

近似一致には「点数から評価を出す」といった正当な用途もありますが、段階表を引く意図がないなら FALSE を書いてください。

エラーの原因と対処

#N/A が出る

「見つからなかった」という意味です。原因は次のどれかがほとんどです。

1. 検索キーが範囲の左端列にない

VLOOKUPは範囲の左端列しか検索しません。商品名から商品コードを引く(=右から左)ことはできません。→ XLOOKUP か INDEX+MATCH を使ってください。

2. 余分なスペースが入っている

"B-201 " のように末尾に半角スペースがあると一致しません。見た目では気づけないので、疑わしいときは検索キーを TRIM() で囲みます。

=VLOOKUP(TRIM(E2), A:C, 2, FALSE)

3. 数値と文字列が食い違っている

101(数値)と "101"(文字列)は別物として扱われます。片方がセルの左寄せ、もう片方が右寄せになっていたらこれです。

4. 範囲がずれている

前述の絶対参照の問題です。

#N/A を空欄にしたい場合は IFERROR で包みます。

=IFERROR(VLOOKUP(E2, A:C, 2, FALSE), "")

ただし原因を確かめる前にIFERRORで隠すのは危険です。本当は取得できるはずのデータが黙って消えます。まず原因を特定してから包んでください。

#REF! が出る

列番号が範囲の列数を超えています。範囲が A:C(3列)なのに列番号に 4 を指定した、というケース。

結果が全部同じ値になる

検索キーを絶対参照にしてしまっている可能性があります。$E$2 ではなく E2 です。範囲とは逆なので混同しやすいところです。

列を挿入すると壊れる問題

VLOOKUPの列番号は「範囲の左から何番目」という位置で指定します。そのため、表の途中に列を挿入すると、数式の指す列がずれて壊れます。

対策は2つあります。

  • XLOOKUP を使う(列番号ではなく範囲で指定するのでずれない)
  • MATCH で列番号を動的に求める
=VLOOKUP(E2, A:C, MATCH("価格", A1:C1, 0), FALSE)

Excelとの違い

書式と挙動はExcelと同じです。ただしExcelでは VLOOKUP の後継として XLOOKUP が推奨されており、スプレッドシートでも同様に XLOOKUP が使えます。新しく作るならXLOOKUPのほうが素直です。

両者の使い分けは VLOOKUPとXLOOKUPの違い にまとめています。


実例:商品リストから単価を引く

実際のシートを想定して、最初から最後まで通してみます。次のような2つの表があるとします。

A列〜C列:商品マスタ

A(商品コード)B(商品名)C(単価)
1コード商品名単価
2A-101ボールペン120
3A-102ノート250
4B-201クリアファイル80
5B-202付箋180

E列〜G列:入力する伝票

E列に商品コードを入力したら、F列に商品名、G列に単価が自動で出るようにします。

F2に入れる数式は次のとおりです。

=VLOOKUP($E2, $A$2:$C$5, 2, FALSE)

G2は列番号だけ変えます。

=VLOOKUP($E2, $A$2:$C$5, 3, FALSE)

ここで重要なのは3か所です。

$E2 のドル記号の位置

列だけを固定して行は固定しません。こうすると、右にコピーしても左にコピーしても、参照する列がE列のままになります。下にコピーすれば行だけがずれます。

$A$2:$C$5 は完全に固定する

ここを固定しないと、下にコピーしたときに検索範囲がずれていき、下のほうの行だけ「見つからない」という状態になります。VLOOKUPで最も多い事故がこれです。

FALSE を必ず書く

省略すると近似一致になり、意図しない行の値が返ります。詳しくは後述します。


つまずきやすいところ

検索値と検索範囲の型が違う

見た目が同じでも、片方が文字列、もう片方が数値だと一致しません。よくあるのは次の場合です。

  • 検索値が「1001」(文字列)で、マスタが 1001(数値)
  • 検索値の末尾に見えない空白が入っている
  • 検索値に改行が混ざっている(他のシステムからコピーした場合)

確認方法は単純です

空いたセルに =E2=A2 と入れてください。TRUE なら一致、FALSE なら型か中身が違います。

空白が疑わしい場合は =VLOOKUP(TRIM($E2), ...) で前後の空白を落とせます。改行は =SUBSTITUTE($E2, CHAR(10), "") で取れます。

検索列が左端にない

VLOOKUPは、検索する列が範囲の一番左でなければ動きません。商品名から商品コードを引きたい、というような「左方向の検索」はできません。

この場合の選択肢は3つあります。

  1. XLOOKUPを使う(対応していれば最も簡単)
  2. INDEX + MATCHを使う(どの環境でも動く)
  3. マスタの列の順番を入れ替える(根本的だが、他の数式に影響が出る)

実務では2番が無難です。→ INDEX関数の使い方 / MATCH関数の使い方

範囲の外を指定している

列番号が範囲の列数を超えると #REF! になります。$A$2:$C$5 は3列なので、指定できるのは1〜3です。4以上を書くとエラーになります。

範囲を後から広げたときに、列番号を直し忘れるのもよくある失敗です。


エラー別の見分け方

表示意味最初に見るところ
#N/A検索値が見つからない型の違い、空白、範囲のずれ
#REF!列番号が範囲外第3引数の数字
#VALUE!列番号が数値でない第3引数に文字列が入っていないか
#NAME?関数名の綴り違いVLOOKUP のスペル
意図しない値が返る近似一致になっている第4引数に FALSE を書いたか
空白が 0 になる参照先が空セル&"" を付けるか IF で分岐

#N/A は「壊れている」のではなく「見つからなかった」という正常な返答です。 消すのではなく、なぜ見つからないのかを先に確かめてください。


似た関数との使い分け

やりたいこと使う関数
左端の列から検索して右の値を返すVLOOKUP
どの方向にも検索したいXLOOKUP
古い環境でも左方向に検索したいINDEX + MATCH
横並びの表から検索したいHLOOKUP
条件に合うものをすべて取り出したいFILTER
見つからないときの表示を変えたいIFERROR で包む

1件だけ取り出すのがVLOOKUP、該当する行をすべて取り出すのがFILTERです。ここを混同すると、そもそも関数の選択を間違えます。


大量データで重くなったとき

行数が数千を超えると、VLOOKUPが原因で再計算が遅くなることがあります。

検索範囲を列全体(A:C)で指定しない

100万行を毎回走査することになります。実データの範囲に絞ってください。

同じ検索を何度も書かない

F列とG列で2回VLOOKUPを書くより、XLOOKUPで一度に複数列を返すか、作業列に一度だけ検索結果を持たせるほうが速くなります。

近似一致(第4引数を TRUE)は完全一致より高速です

ただし、マスタが昇順に並んでいることが前提です。正確さを優先するなら完全一致を選んでください。

揮発性関数と組み合わせない

OFFSETやINDIRECTと併用すると、シート全体が再計算のたびに走ります。→ OFFSET関数の注意点


そのまま使える型を5つ

実務で書くVLOOKUPは、ほとんどが次の5つのどれかです。書き写して範囲だけ直せば動きます。

別シートの表から引く

=VLOOKUP($A2,'商品マスタ'!$A$2:$D$500,3,FALSE)

シート名に空白や記号が入るときは '商品マスタ' のように引用符で囲みます。囲まなくても動く名前と、囲まないと壊れる名前があるため、常に囲んでおくほうが安全です。

見つからないときに空欄にする

=IFERROR(VLOOKUP($A2,$F$2:$H$100,3,FALSE),"")

#N/A が並ぶ表は、印刷しても共有しても見づらくなります。ただし、空欄にすると「データが無い」のか「引けていない」のかが分からなくなります。原因を追いたい段階では、IFERROR を外して確認してください。

見つからないときに文言を出す

=IFERROR(VLOOKUP($A2,$F$2:$H$100,3,FALSE),"マスタ未登録")

空欄より、こちらのほうが実務では役に立ちます。未登録の行を後からフィルタで抽出できるためです。

複数の列をまとめて引く

=VLOOKUP($A2,$F$2:$J$100,COLUMN()-2,FALSE)

右方向にコピーすると、列番号が自動で1ずつ増えます。COLUMN()-2 の 2 は、数式を置いた最初の列に合わせて調整してください。ただし、この書き方は列を挿入した瞬間に狂います。列の増減がある表では XLOOKUP か INDEX+MATCH を使ってください。

数値と文字列の型を揃えてから引く

=VLOOKUP(TEXT($A2,"0"),$F$2:$H$100,3,FALSE)

見た目は同じでも、数値の 1001 と文字列の "1001" は一致しません。片方をもう片方に合わせると引けるようになります。恒久的には、元データ側の型を揃えるほうが健全です。


引数の意味を表で押さえる

引数名前何を指定するかよくある間違い
1検索値探したい値の入ったセル行方向に固定していない
2範囲検索列を左端にした表全体絶対参照にしていない
3列番号範囲の左端から数えた番号シート全体の列番号を書く
4検索方法FALSE で完全一致省略して近似一致になる

列番号は「範囲の中の番号」

3つ目の引数でつまずく人の大半が、シートの列番号を書いています。範囲が F:H なら、F が 1、G が 2、H が 3 です。シート上の 6、7、8 ではありません。

範囲は必ず絶対参照にする

$F$2:$H$100 のようにドル記号で固定します。固定しないまま下方向にコピーすると、範囲が一行ずつ下にずれ、表の下のほうが引けなくなります。この事故は、上の数行が正しく動くために気づくのが遅れます。


壊れ方を4つに分類する

VLOOKUPの不具合は、症状ごとに原因が決まっています。当てずっぽうで直すより、分類したほうが早く終わります。

一部だけ #N/A になる

検索値の側に問題があります。前後の空白、全角と半角、数値と文字列の違い。=LEN(A2) で文字数を比べると、見えない空白が見つかります。

全部 #N/A になる

範囲の指定が違っています。検索列が範囲の左端になっているかを確認してください。左端でない場合、VLOOKUPでは引けません。

#REF! になる

列番号が範囲の列数を超えています。範囲が3列なのに4を指定している、あるいは範囲の列を削除したあとです。

値は返るが内容が違う

4つ目の引数を省略しているか TRUE にしています。近似一致では、並べ替えられていない表から見当違いの行が返ります。完全一致が必要なら FALSE を書いてください。


重くなったときに効く順番

数式が数千行に増えると、再計算が目に見えて遅くなります。効果の大きい順に挙げます。

範囲を列全体で指定しない

A:C ではなく $A$2:$C$5000 のように行を区切ります。列全体の指定は、空行まで検索対象に含めるため、無駄が大きくなります。

同じ検索を何度も書かない

同じ検索値で3列引くなら、VLOOKUPを3回書くより XLOOKUP や INDEX+MATCH で1回に減らすほうが軽くなります。

作業列に一度だけ引く

複数の数式が同じ値を参照しているなら、作業列に一度だけ引いて、他はその列を参照させます。

数式を値に変換する

過去分の集計など、もう変わらないデータは値貼り付けにしてください。参照が消えるぶん、ファイル全体が軽くなります。


引き継ぐときに書いておくこと

数式は動いていても、意図は残りません。渡す前に次の3点をシート内にメモしてください。

どの表を参照しているか

参照先のシート名と、その表の更新担当。参照先が別ファイルなら、そのファイルの場所も書いてください。

未登録のときの扱い

IFERROR で空欄にしているなら、それは「未登録」の意味であることを明示します。書いていないと、受け取った側は空欄をデータなしと読みます。

列を増やすときの注意

列番号を直書きしている数式がある場合、列の挿入で壊れることを書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。


検索値の掃除を先にする

引けない原因の大半は、関数ではなく検索値の側にあります。数式をいじる前に、値を掃除してください。

前後の空白を落とす

=VLOOKUP(TRIM($A2),$F$2:$H$100,3,FALSE)

システムから書き出したデータには、末尾に空白が入っていることがよくあります。見た目では判別できません。TRIM は前後の空白と、語間の連続した空白を1つに詰めます。

全角と半角を揃える

=VLOOKUP(ASC($A2),$F$2:$H$100,3,FALSE)

ASC は全角の英数字と記号を半角に変換します。逆方向は JIS です。手入力が混じる列では、この差が原因になりがちです。

改行を取り除く

=VLOOKUP(SUBSTITUTE($A2,CHAR(10),""),$F$2:$H$100,3,FALSE)

セル内改行はコピー時に紛れ込みます。CHAR(10) が改行文字です。

まとめて掃除する

=VLOOKUP(TRIM(ASC(SUBSTITUTE($A2,CHAR(10),""))),$F$2:$H$100,3,FALSE)

三つを重ねた形です。ただし、数式が長くなるほど後から読めなくなります。恒久的に運用する表では、作業列を1つ作って掃除済みの値を置き、そこを検索値にするほうが保守しやすくなります。

掃除しても引けないとき

型の違いが残っています。=ISNUMBER(A2) と =ISNUMBER(F2) を並べて、片方だけ TRUE なら型違いです。数値側に揃えるなら VALUE、文字列側に揃えるなら TEXT を使います。


近似一致を正しく使う場面

4つ目の引数を TRUE にする近似一致は、多くの解説で「使うな」と書かれます。ただし、正しく使える場面が一つあります。

段階で分ける表

送料の重量区分、手数料の金額区分、評価の点数区分。こうした「以上・未満」で決まる表は、近似一致が最も短く書けます。

=VLOOKUP($A2,$F$2:$G$6,2,TRUE)

このとき、参照する表は次の形にします。

下限区分
0D
60C
70B
80A
90S

必ず昇順に並べる

近似一致は、検索値以下で最大の値を探します。表が昇順に並んでいないと、正しく動きません。しかもエラーにならず、間違った値を静かに返します。これが「使うな」と言われる理由です。

区分の境界を「以上」で書く

上の表は「0以上60未満はD」という意味です。境界をどちらに含めるかで結果が変わるため、表の見出しに「下限」と書いておくと誤解が減ります。

IFS で書き換える選択肢

区分が5つ程度なら、IFS のほうが読みやすい場合があります。

=IFS($A2>=90,"S",$A2>=80,"A",$A2>=70,"B",$A2>=60,"C",TRUE,"D")

区分が変わる可能性があるなら表を参照する形、変わらないなら数式に書く形が向いています。


他の関数に置き換える判断

VLOOKUPで書けるものが、他の関数でもっと短く安全に書けることがあります。

検索列が左端にないとき

XLOOKUP か INDEX+MATCH です。VLOOKUPでは右から左に引けません。

=XLOOKUP($A2,$H$2:$H$100,$F$2:$F$100,"")

条件が複数あるとき

FILTER か XLOOKUP の条件連結です。VLOOKUPは検索値を1つしか取りません。

=FILTER($H$2:$H$100,($F$2:$F$100=$A2)*($G$2:$G$100=$B2))

該当が複数あるとき

VLOOKUPは最初の1件しか返しません。全部欲しいなら FILTER です。

全行にまとめて引きたいとき

ARRAYFORMULA と組み合わせるか、XLOOKUP に範囲を渡します。1行ずつ数式を置くより、再計算が軽くなります。

それでもVLOOKUPを使う場面

共有先の環境が古い可能性があるときです。XLOOKUP に対応していない環境で開くとエラーになります。社外に渡すファイルでは、この一点だけでVLOOKUPを選ぶ理由になります。

実務でつまずいた場面と、その直し方

昨日まで動いていた数式が壊れた

参照先の表で列が挿入されたか、削除されたかのどちらかです。VLOOKUPの列番号は数字で書かれているため、参照先の構造が変わると意味が変わります。

直し方は二つあります。急ぎなら列番号を書き直す。恒久的に直すなら XLOOKUP か INDEX+MATCH に書き換えて、列の位置に依存しない形にする。同じ事故が三度目なら、後者にすべき段階です。

別ファイルを参照していて更新されない

外部ファイル参照は、参照先を開いていないと最新の値になりません。閉じたまま開いた場合、前回保存時の値が表示されます。

日次で使う表なら、参照先の内容を同じファイル内にコピーするか、IMPORTRANGE で取り込む形にしてください。参照先のファイル名が変わっただけで壊れる構造は、共有環境では危険です。

同じ値が複数あり、どれが返るか分からない

VLOOKUPは、上から探して最初に見つかった行を返します。最新の行が欲しい場合、表を降順に並べ替えるか、XLOOKUP の検索モード -1 を使ってください。

そもそも、検索キーが重複している時点で表の設計に問題があります。キーになる列は一意にしておくのが原則です。

検索値が計算結果のときに引けない

数式の結果として出た値には、小数の誤差が含まれることがあります。=ROUND(A2,0) のように丸めてから検索してください。

大文字と小文字を区別したい

VLOOKUPは区別しません。区別が必要なら INDEX と MATCH に EXACT を組み合わせます。

=INDEX($H$2:$H$100,MATCH(TRUE,EXACT($F$2:$F$100,$A2),0))

表そのものを直したほうが早い場合

数式で頑張るより、元の表を直したほうが早いことがあります。次のどれかに当てはまるなら、表の設計を見直してください。

検索キーが左端にない

VLOOKUPの制約です。表を作り直せるなら、キーを左端に移すのが最も簡単な解決です。

見出しが結合されている

結合セルがあると、範囲指定が意図通りになりません。集計に使う表では結合を使わないでください。見た目を整えたいなら「選択範囲内で中央」を使います。

1つのセルに複数の情報が入っている

「東京-第1課-山田」のような値は、そのままでは扱えません。SPLIT で分けるか、最初から列を分けて入力してください。

横方向にデータが伸びている

月ごとに列が増える表は、列番号が毎月変わります。縦持ちに変換すれば、SUMIFS で条件を足すだけになります。

空行や小計行が混ざっている

元データと集計結果は、別のシートに分けてください。混ざっている表は、範囲指定のたびに例外処理が必要になります。


確認のための小さな数式

数式が動かないとき、原因を切り分けるための短い数式を並べておきます。作業列に一時的に置いて、確認したら消してください。

文字数を比べる

=LEN($A2)&" / "&LEN($F2)

見た目が同じなのに引けないとき、まずこれを見ます。数が違えば、空白か不可視文字が入っています。

型を確かめる

=ISNUMBER($A2)&" / "&ISNUMBER($F2)

片方だけ TRUE なら、型の不一致です。

完全に一致するか確かめる

=EXACT($A2,$F2)

=$A2=$F2 は大文字小文字を区別しませんが、EXACT は区別します。両方を並べると、どちらの問題かが分かります。

何件ヒットするか数える

=COUNTIF($F$2:$F$100,$A2)

0 なら検索値の問題、2以上なら重複です。VLOOKUPを直す前に、この数字を見てください。

何行目にあるか調べる

=MATCH($A2,$F$2:$F$100,0)

行番号が返れば、検索自体は成功しています。値が違うなら、列番号の指定が間違っています。


チェックリスト

新しくVLOOKUPを書いたら、次を順に確認してください。三分で終わります。

範囲を絶対参照にしたか

$F$2:$H$100 の形になっているか。下にコピーしても範囲がずれないか。

4つ目の引数に FALSE を書いたか

省略していないか。区分表を引く意図がないのに TRUE になっていないか。

列番号は範囲内の番号か

シートの列番号ではなく、範囲の左端から数えた番号になっているか。

見つからない場合の扱いを決めたか

#N/A のまま出すのか、空欄にするのか、文言を出すのか。表の用途に合っているか。

一番下の行まで正しく返るか

上の数行だけ見て判断しないでください。表の最終行までスクロールして確認します。範囲のずれは、下のほうで初めて表面化します。


「検索・参照」の関数を全体から見る

別の表から値を持ってくる関数群です。同じカテゴリの関数は、つまずく場所も似ています。この記事のほかに16本あります。

記事
ADDRESS
CHOOSE
COLUMN
COLUMNS
HLOOKUP
IMPORTDATA
IMPORTHTML
IMPORTRANGE
INDEX
INDIRECT
MATCH
OFFSET
ROW
ROWS
XLOOKUP
XMATCH

このカテゴリで共通するつまずき

検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。1つで理解した内容は、同じカテゴリの他の関数にもそのまま使えます。

どれを使うかの決め方

検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。関数の一覧を眺めて選ぼうとすると、どれも当てはまるように見えて決まりません。

迷ったときは

→ 全関数の一覧 に目的別の索引があります。


このサイトの収録状況

収録は201本です。カテゴリごとの内訳を出しておきます。

カテゴリ記事数
目的別51本
集計47本
文字列31本
日付19本
検索・参照15本 ←この記事
条件15本
機能12本
配列・抽出10本
関数一覧1本

探し方の順番

関数名が分かっているなら検索窓から。やりたいことだけ決まっているなら「目的別」から。近い関数を比べたいなら、同じカテゴリの一覧から入ってください。

記事の構成

どの記事も、書式・実例・つまずきやすいところ・似た関数との使い分けを同じ順番で並べています。1本読めば、他の記事も同じ場所を探せます。


数式を書く前の手順

先に決めておけば、書くのは数分で終わります。

1. 出したい結果を一文で書く

「何を、どの条件で、どんな形で出したいか」。この一文が書ければ、関数はほぼ決まります。書けないなら、まだ要件が固まっていません。

2. 元データの型を確認する

検索値の型と前後の空白で結果が変わります。掃除を先に済ませてください。=ISNUMBER(A2) で数値かどうかを確認できます。見た目が同じでも、数値と文字列は別物です。

3. 空欄と0の扱いを決める

未入力なのか、実績が0なのか。表の意味が変わります。どちらとして扱うかを決めてから書いてください。

4. 条件の数を数える

検索列が左端にあるか、返したい列が複数あるかで使う関数が決まります。将来条件が増える可能性があるなら、最初から複数条件に対応する形にしてください。

5. 共有先の環境を確認する

新しい関数は、古い環境で開くとエラーになります。社外に渡すファイルでは、この一点で選択肢が変わります。

6. 1行だけ書いて確認する

全行にコピーする前に、1行分の結果が正しいかを見てください。間違ったまま広げると、直す手間が増えます。


どの関数でも共通する確認

うまくいかないときに見る場所は、ほぼ決まっています。

参照を固定したか

下方向にコピーする数式では、動いてはいけない参照を固定します。上の数行だけ見て判断しないでください。ずれは下のほうで表面化します。

範囲の行数が揃っているか

複数の範囲を渡す関数では、行数がずれると結果が狂います。エラーにならず値が返るため、気づきにくい種類の間違いです。

型が揃っているか

=ISNUMBER(A2)

数値として入っているかを判定します。システムから書き出したデータでは、これが原因のことが多くあります。

前後に空白が入っていないか

=LEN(A2)&" / "&LEN(TRIM(A2))

数が違えば、余分な空白が入っています。見た目では判別できません。

別の方法で検算したか

同じ数字を別の関数でも出して、突き合わせてください。1つの結果だけを見ても、正しいかどうかは判断できません。

最終行まで確認したか

一番下までスクロールして、結果を見てください。途中から値が変わっていないかを確認します。


引き継ぐときに残すこと

数式は動いていても、意図は残りません。渡す前に、次の点をシート内にメモしてください。3分で終わります。

何を出している数式か

一行で構いません。読めば分かると思っても、数か月後の自分には分かりません。

どの表を参照しているか

参照先のシート名と、更新の担当。別ファイルなら、その場所も書いてください。

該当しないときの扱い

空欄にしているのか、文言を出しているのか、エラーのまま残しているのか。書いていないと、受け取った側は空欄をデータなしと読みます。

触ってはいけない場所

列を挿入すると壊れる数式がある場合、必ず書き残してください。この一行があるだけで、引き継ぎ後の事故が大きく減ります。

使った関数の対応環境

新しい関数を使っている場合、古い環境では開けません。共有の範囲が広がる可能性があるなら、明記してください。

確定した期間は値にする

締めた月の集計は、値貼り付けにしてください。参照元を消しても壊れなくなり、ファイルも軽くなります。

まとめ

  • 書式は =VLOOKUP(検索キー, 範囲, 列番号, FALSE)
  • 4つ目の引数は基本 FALSE(段階表だけ TRUE)
  • 範囲は絶対参照か列全体で指定する
  • 検索できるのは範囲の左端列だけ
  • #N/A の多くはスペース・型違い・範囲ずれが原因

関連する関数