検索・参照
VLOOKUP関数の使い方・読み方
読み方:VLOOKUP は「ブイルックアップ」と読みます。(一般的な読み方です。公式に読み仮名の定めはありません)
VLOOKUPは、表の中から目的の値を探して、同じ行の別の列を取り出す関数です。「商品コードから商品名を引く」「社員番号から部署名を引く」といった、表と表を突き合わせる作業で使います。
このページの中身(31項目)
- 書式
- 基本の使い方
- 実務での書き方
- 4つ目の引数を省略してはいけない理由
- エラーの原因と対処
- 列を挿入すると壊れる問題
- Excelとの違い
- 実例:商品リストから単価を引く
- つまずきやすいところ
- エラー別の見分け方
- 似た関数との使い分け
- 大量データで重くなったとき
- そのまま使える型を5つ
- 引数の意味を表で押さえる
- 壊れ方を4つに分類する
- 重くなったときに効く順番
- 引き継ぐときに書いておくこと
- 検索値の掃除を先にする
- 近似一致を正しく使う場面
- 他の関数に置き換える判断
- 実務でつまずいた場面と、その直し方
- 表そのものを直したほうが早い場合
- 確認のための小さな数式
- チェックリスト
- 「検索・参照」の関数を全体から見る
- このサイトの収録状況
- 数式を書く前の手順
- どの関数でも共通する確認
- 引き継ぐときに残すこと
- まとめ
- 関連する関数
この記事の書式と対応環境の出どころ(2026-08-26 確認)
- Google スプレッドシート ヘルプ:公式の書式は
VLOOKUP(検索キー, 範囲, 指数, 並べ替え済み)
Google 公式ヘルプ - Microsoft サポート:VLOOKUP 関数
Microsoft 公式サポート
関数の仕様は追加・変更されることがあります。書式が合わないときは、上の公式ページで最新をご確認ください。
スプレッドシートで最もよく使われる関数のひとつですが、同時にエラーで詰まりやすい関数でもあります。この記事では基本の使い方に加えて、#N/A が出たときの原因の切り分け方まで扱います。

書式
=VLOOKUP(検索キー, 範囲, 列番号, [検索の型])
| 引数 | 内容 |
|---|---|
| 検索キー | 探したい値。セル参照でも直接入力でも可 |
| 範囲 | 探しに行く表の範囲。左端の列が検索対象になる |
| 列番号 | 範囲の左端を1として、取り出したい列が何番目か |
| 検索の型 | FALSE=完全一致 / TRUE=近似一致(省略時はTRUE) |
4つ目の引数は、基本は FALSE を書いてください
省略すると近似一致になり、意図しない値が返ります。送料や評価の段階表を引くときだけ TRUE を使います。その使い方は後半で説明します。理由は後述します。
基本の使い方
こんな商品マスタがあるとします。
| A | B | C | |
|---|---|---|---|
| 1 | 商品コード | 商品名 | 価格 |
| 2 | A-101 | ボールペン | 150 |
| 3 | A-102 | ノート | 320 |
| 4 | B-201 | ハサミ | 480 |
| 5 | B-202 | ホチキス | 890 |
ここから「B-201」の商品名を取り出します。
=VLOOKUP("B-201", A2:C5, 2, FALSE)
結果:ハサミ
引数を順番に読むとこうなります。
"B-201"を探すA2:C5の左端の列(A列)から探す- 見つかった行の2列目(B列)を返す
FALSEなので完全に一致するものだけ
価格が欲しいなら、列番号を 3 に変えます。
=VLOOKUP("B-201", A2:C5, 3, FALSE) → 480

実務での書き方
実際には検索キーをセルで指定し、数式を下方向にコピーします。このとき範囲は絶対参照($付き)にするのが必須です。
=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つあります。
=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 | コード | 商品名 | 単価 |
| 2 | A-101 | ボールペン | 120 |
| 3 | A-102 | ノート | 250 |
| 4 | B-201 | クリアファイル | 80 |
| 5 | B-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つあります。
- XLOOKUPを使う(対応していれば最も簡単)
- INDEX + MATCHを使う(どの環境でも動く)
- マスタの列の順番を入れ替える(根本的だが、他の数式に影響が出る)
実務では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)
このとき、参照する表は次の形にします。
| 下限 | 区分 |
|---|---|
| 0 | D |
| 60 | C |
| 70 | B |
| 80 | A |
| 90 | S |
必ず昇順に並べる
近似一致は、検索値以下で最大の値を探します。表が昇順に並んでいないと、正しく動きません。しかもエラーにならず、間違った値を静かに返します。これが「使うな」と言われる理由です。
区分の境界を「以上」で書く
上の表は「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の多くはスペース・型違い・範囲ずれが原因