Excelで「別のシートにある一覧表から、名前や金額を自動で拾ってきたい」というとき、真っ先に候補になるのがVLOOKUP関数です。ところが実際にやってみると、シート名の付け方ひとつで数式が動かなくなったり、下にコピーした瞬間に途中から結果が消えたりと、初心者がつまずくポイントが集中しています。
このページでは、別シート参照のVLOOKUPを最初から最後まで完成させる手順に加えて、当サイトが実機のExcel 2019で一つひとつ試して確かめた「シート名を変えたらどうなるか」「シートを消したらどうなるか」といった、他ではあまり書かれていない挙動まで踏み込んで解説します。
別シートからVLOOKUPで取得する基本の形
VLOOKUP関数の引数は次の4つです。別シートを参照する場合も、変わるのは2番目の「範囲」の書き方だけです。
=VLOOKUP(検索値, 範囲, 列番号, 検索の型)- 検索値 … 探したいキー(社員番号や商品コードなど)
- 範囲 … 探しにいく表。別シートなら
シート名!範囲の形で書く - 列番号 … 範囲の左端を1列目として、取り出したい列が何番目か
- 検索の型 … 完全一致で探すときは
FALSE(ほぼこれで固定)
たとえば「社員データ」というシートのA2からD6に社員番号・氏名・部署・給与が並んでいて、別シートのA2に入れた社員番号から給与(4列目)を取りたい場合、数式はこうなります。
=VLOOKUP(A2,社員データ!$A$2:$D$6,4,FALSE)当サイトの実機(Excel 2019)で試したところ、この数式で結果は410000と正しく表示されました。シート名のうしろに感嘆符「!」を付けて範囲をつなぐ、というのが別シート参照の要点です。Microsoft公式でも別シート参照の例として=VLOOKUP(A2,'Client Details'!A:F,3,FALSE)が示されており、書き方の考え方は同じです。

なお、旧バージョンの解説にありがちな シート名!D100 のように範囲を1セルだけ指定する書き方は誤りです。範囲は必ず「左端列から取り出したい列まで」を含む複数列の範囲で指定してください。左端列に検索値がないと、そもそも探しにいけません。
シート名を後から変えても数式は自動で追従する
初心者からよく出るのが「参照先のシート名をあとで変えたら、数式が壊れてしまうのでは?」という不安です。ここは当サイトが実機で確かめました。
当サイトの実機で、参照先シートの名前を「社員データ」から「従業員リスト」に変更したところ、数式のシート名部分がひとりでに書き換わりました。具体的には次のように変化し、しかも結果の410000はそのまま保たれています。
変更前 =VLOOKUP(A2,社員データ!$A$2:$D$6,4,FALSE)
変更後 =VLOOKUP(A2,従業員リスト!$A$2:$D$6,4,FALSE)つまりシート名の変更をおそれる必要はありません。これはVLOOKUPに限った話ではなく、別シートを参照するすべての数式に共通するExcelの仕組みです。Excelがシート名とセル参照を内部で結びつけて管理しているため、名前を変えても参照関係はきちんと維持されます。

ただしシートを削除すると数式は壊れる
名前の変更は安全でしたが、削除はまったく別の話です。当サイトの実機で参照先シートそのものを削除したところ、数式のシート名部分だけが #REF! に化け、結果も #REF! になりました。
削除後 =VLOOKUP(A2,#REF!$A$2:$D$6,4,FALSE)範囲の $A$2:$D$6 の部分は残っているのに、参照先のシートが消えたことで居場所を失い、#REF!(参照エラー)に置き換わってしまうわけです。これもVLOOKUP固有ではなく、別シートを参照する数式に共通する挙動です。しかもこれは元に戻せません。「シート名の変更はOK、シートの削除はNG」とセットで覚えておくと、事故を防げます。参照先の表を整理したいときは、削除ではなくデータを別の場所へ移し替えてから数式を作り直すのが安全です。

シート名にスペースがあるときはシングルクォートで囲む
「社員 一覧」のようにシート名の途中にスペースが入っていると、そのまま書いた数式はエラーになります。当サイトの実機で、スペースを含む「社員 一覧」をクォートなしで参照すると #NAME? エラーになり、シングルクォートで囲むと正常に320000が表示されました。
エラー =VLOOKUP(1001,社員 一覧!$A$1:$D$5,4,FALSE)
正常 =VLOOKUP(1001,'社員 一覧'!$A$1:$D$5,4,FALSE)公式の例=VLOOKUP(A2,'Client Details'!A:F,3,FALSE)でもシート名がシングルクォートで囲まれているのは、名前にスペースが含まれているためです。スペースや記号を含むシート名は、必ず「’(シングルクォート)」で挟むと覚えておきましょう。迷ったら常にクォートで囲んでおいても問題ありません。
下にコピーして途中から #N/A になる原因は絶対参照の付け忘れ
1行目は正しく出たのに、数式を下方向へコピーしたら2行目以降が #N/A になった、という相談はとても多いです。原因のほとんどは範囲を絶対参照($付き)にしていないことです。
当サイトの実機で、範囲を相対参照(社員データ!A2:D6)のまま下にコピーしたところ、1行目は410000、2行目でいきなり #N/A、3行目は298000というちぐはぐな結果になりました。これは、コピーで範囲がA3:D7へ、さらにA4:D8へと勝手にずれてしまい、検索したいデータが範囲の外へこぼれてしまうからです。
いっぽう、範囲を $A$2:$D$6 と絶対参照にした列は、下までコピーしても全行が正しく表示されました。Microsoft公式も『絶対参照を使うと、数式を下方向へコピーした場合に常にまったく同じ検索範囲を参照することができます。』と説明しています。
- 範囲を選んだあとに F4キーを押すと、$付きの絶対参照に一発で変えられます
- 検索値(A2など)は行ごとに変わってほしいので、こちらは$を付けず相対参照のままにします

そのほかのよくあるエラーと原因
別シートVLOOKUPでつまずきやすい残りのエラーも、当サイトの実機で再現しました。
- 検索値の型が合わない … 検索値のセルが文字列の「1001」で、参照表の社員IDが数値の1001というように型が食い違うと、見た目が同じでも #N/A になります(当サイトの実機でも、文字列で検索して #N/A になりました)。公式も『range_lookupが FALSE の場合、#N/A エラー値は正確な数値が見つからないことを示します。』としています
- 列番号が範囲の列数を超える … 範囲が4列なのに列番号に5を指定すると #REF! になります(当サイトの実機でも列番号5で #REF! になりました)。公式ドキュメントでも、列番号(col_index_num)が範囲の列数を超えると #REF! エラーになると説明されています
別のファイル(別ブック)から参照したいとき
ここは正直にお伝えします。別のExcelファイル(別ブック)を参照するパターンは、当サイトでは実機で確認できていません。そのため実際の挙動を体験としては語れません。
公式の考え方としては、別ブック参照でも「ファイル名を含めた場所+シート名+範囲」を指定する点は同じで、書き方が長くなるだけです。ただし参照元ファイルを移動・リネームするとリンクが切れやすく、別シート参照よりトラブルが起きやすくなります。まずは同じブック内の別シート参照で仕組みを固めてから、必要になったときに別ブック参照へ進むのが安全です。当サイトで実機確認ができ次第、この項目は体験ベースで追記します。
公式ドキュメントで裏を取る
VLOOKUPの引数やエラーの意味を正確に確認したいときは、Microsoftの公式ページが一次情報として確実です。下の画像をクリックすると公式のVLOOKUP解説ページが開きます。


まとめ
別シートVLOOKUPは シート名!範囲 の形で書くのが基本で、範囲は必ず絶対参照にしてからコピーすれば途中で #N/A になる事故を防げます。そして当サイトの実機検証でわかったとおり、シート名の変更は数式が自動追従して安全、シートの削除は #REF! になって復元不可という違いを押さえておけば、参照先を整理するときにも慌てずにすみます。スペース入りシート名はシングルクォートで囲む、というルールも合わせて覚えておきましょう。
「自分の表だと数式がどうしても #N/A や #REF! になる」「別シート参照が思ったように組めない」——そんなExcelのVLOOKUPのつまずきは、画面を見ながらのほうが一気に解決します。当サイトではLINEやZoomでの個別相談を承っていますので、実際のファイルの状況を教えていただければ、どこで参照がずれているのかを一緒に確認します。
出典・引用サイト
最終確認日:2026年7月15日/文責:uri uri


コメント