Excel VLOOKUPで複数シートから検索する方法|VSTACK関数で一括範囲指定(XLOOKUP対応)

2025年12月11日

English version.

PC画面を見て驚き喜ぶ女性と、完了のポーズをとる猫のアニメ調イラスト。左側にある「シート1」「シート2」「シート3」の3つの表が、光の帯となって1つの長いリストに結合される様子が描かれている。画像内のタイトル文字:「Excel 複数シートを一瞬で結合! VLOOKUP & VSTACKで解決!」

はじめに

顧客リストや商品マスタが「月ごと」や「カテゴリごと」に別々のシートに分かれており、VLOOKUP関数でまとめて検索できずに困った経験はないでしょうか。

通常、VLOOKUP関数XLOOKUP関数は一つのシート(範囲)しか検索対象にできません。これまではIFERROR関数を長く繋げたり、INDIRECT関数でシート名を操作したりする複雑な工夫が必要でした。

しかし、Microsoft 365で追加された新関数「VSTACK」を使えば、複数のシートを「一つの範囲」として一瞬で結合し、シンプルに検索できるようになります。

本記事では、最新のVSTACK関数を使った効率的な方法を中心に、従来のExcel環境でも使えるテクニックまで、複数シートを検索する全手法を解説します。

サンプル表

このように三つの表に検索範囲が分かれた例で手順を記載します。

検索値に一致するものが複数存在する場合、

VLOOKUP関数XLOOKUP関数の仕様上、

そのまま使用すると最初に一致する値が取得されます。

方法1:VSTACK関数で検索範囲を一つに結合する(推奨)

解説動画

本記事の内容を、実際のExcel操作画面を交えて動画で解説しました(約3分)。 ナレーションには、声優・井上喜久子さんの声を元に制作された『VOICEPEAK 桜乃そら』を使用しています。落ち着いたトーンで聞き取りやすくまとめていますので、テキストを読むのが大変な方はこちらをご覧ください。

基本的な結合と検索の手順

2022年9月にMicrosoft365(Office365)のExcelに追加された新関数を使うので

古いバージョンのExcelでは使用できません。

VSTACK関数・HSTACK関数はセル範囲を結合し、

その結果をVLOOKUP関数XLOOKUP関数に利用することが可能です。

=VSTACK(マグロ!A2:B4,サバ!A2:B5,カツオ!A2:B5)
=VLOOKUP(C2,VSTACK(マグロ!A2:B4,サバ!A2:B5,カツオ!A2:B5),2,FALSE)

XLOOKUP関数に利用する場合は検索範囲と戻り範囲を、それぞれ結合する必要があります。

=XLOOKUP(C2, VSTACK(マグロ!A2:A4,サバ!A2:A5,カツオ!A2:A5), VSTACK(マグロ!B2:B4,サバ!B2:B5,カツオ!B2:B5) )

行数が不明な場合に列全体を指定する(#NUM!エラー対策)

検索対象の行数が不定で、列そのものを指定したいケースがありますが、

そのままではExcelの行数の限界を超えてしまいエラーになってしまいます。

この場合、結合前に有効行だけに加工する必要があります。

  1. 【推奨】TRIMRANGE関数で有効行のみを結合する
  2. 【参考】LAMBDA関数で有効行を定義する(旧手法)

【推奨】TRIMRANGE関数で有効行のみを結合する

TRIMRANGE関数は2025年10月のアップデートで正式実装された余白セルを削除する関数です。

VSTACK関数・HSTACK関数を利用可能な状況であれば基本的に利用できるので②の方法はメリットがありません。こちらを優先的に利用しましょう。

利用方法はシートの各シートのセル範囲指定にTRIMRANGE関数を適用するだけです。

これにより結合でエラーにならなくなります。

VLOOKUP関数の例:

=VLOOKUP(C2,VSTACK(TRIMRANGE(マグロ!A:B),TRIMRANGE(サバ!A:B),TRIMRANGE(カツオ!A:B)),2,FALSE)

ヘッダー行が存在する場合は、DROPでヘッダー分の行数を削除します。(検索条件によっては不要)

=VLOOKUP(C2,VSTACK(DROP(TRIMRANGE(マグロ!A:B),1),DROP(TRIMRANGE(サバ!A:B),1),DROP(TRIMRANGE(カツオ!A:B),1)),2,FALSE)

XLOOKUP関数の例:

=XLOOKUP(C2, VSTACK(TRIMRANGE(マグロ!A:A),TRIMRANGE(サバ!A:A),TRIMRANGE(カツオ!A:A)), VSTACK(TRIMRANGE(マグロ!B:B),TRIMRANGE(サバ!B:B),TRIMRANGE(カツオ!B:B)) )
=XLOOKUP(C2, VSTACK(DROP(TRIMRANGE(マグロ!A:A),1),DROP(TRIMRANGE(サバ!A:A),1),DROP(TRIMRANGE(カツオ!A:A),1)), VSTACK(DROP(TRIMRANGE(マグロ!B:B),1),DROP(TRIMRANGE(サバ!B:B),1),DROP(TRIMRANGE(カツオ!B:B),1)) )

【参考】LAMBDA関数で有効行を定義する(旧手法)

有効行だけに制限を利用します。

この数式を利用できる場合は基本的にTRIMRANGE関数を利用できるので、TRIMRANGE関数登場前の手法の参考情報です。

TRIMRANGE関数が登場するまでの方法でした)

有効行だけに制限をそのまま利用しても構いませんが、

名前の管理で数式を登録すると利用しやすくなります。

「新規作成」をクリックします、

名前に任意の関数名、参照範囲に次の数式を指定します。

=LAMBDA(指定範囲,LET(中間範囲,HSTACK(BYROW(指定範囲,LAMBDA(行,COUNTA(行))),指定範囲),MAP(DROP(FILTER(中間範囲,CHOOSECOLS(中間範囲,1)>0),,1),LAMBDA(セル,IF(セル="","",セル)))))

指定の関数名で利用することが可能になります。(例では「有効行」)

=VSTACK(有効行(マグロ!A:B),有効行(サバ!A:B),有効行(カツオ!A:B))

ヘッダー行が存在する場合は、DROPでヘッダー分の行数を削除します。

(検索条件によっては不要)

=VSTACK(DROP(有効行(マグロ!A:B),1),DROP(有効行(サバ!A:B),1),DROP(有効行(カツオ!A:B),1))

このセル範囲は、そのままVLOOKUP関数に利用可能です。

=VLOOKUP(C2,VSTACK(DROP(有効行(マグロ!A:B),1),DROP(有効行(サバ!A:B),1),DROP(有効行(カツオ!A:B),1)),2,FALSE)

XLOOKUP関数にも利用可能ですが、範囲から列を抽出するCHOOSECOLS関数を併用します。

=XLOOKUP(C2,CHOOSECOLS( VSTACK(DROP(有効行(マグロ!A:B),1),DROP(有効行(サバ!A:B),1),DROP(有効行(カツオ!A:B),1)),1),CHOOSECOLS( VSTACK(DROP(有効行(マグロ!A:B),1),DROP(有効行(サバ!A:B),1),DROP(有効行(カツオ!A:B),1)),2))

VLOOKUP関数の方が数式は簡潔ですが、XLOOKUP関数では冗長になります。

XLOOKUP関数で数式を短く記述するコツ

有効行のセル範囲を展開してから指定

まず有効行をどこかに展開にします。(例ではE1)

TRIMRANGE関数の例:

=VSTACK(DROP(TRIMRANGE(マグロ!A:B),1),DROP(TRIMRANGE(サバ!A:B),1),DROP(TRIMRANGE(カツオ!A:B),1))

LAMBDA関数の例:

=VSTACK(DROP(有効行(マグロ!A:B),1),DROP(有効行(サバ!A:B),1))

有効行のみにする数式のあるセルに#を付けると

結合したセル範囲全体になるためそれを利用することも可能です。

=XLOOKUP(C2, CHOOSECOLS(E1#,1), CHOOSECOLS(E1#,2) )

LET関数で名前をつける

LET関数を利用すると有効行をどこにも展開せずに実現可能です。

TRIMRANGE関数の例:

=LET(対象範囲,
VSTACK(DROP(TRIMRANGE(マグロ!A:B),1),DROP(TRIMRANGE(サバ!A:B),1),DROP(TRIMRANGE(カツオ!A:B),1)),
XLOOKUP(C2,CHOOSECOLS(対象範囲,1),CHOOSECOLS(対象範囲,2))
)

LAMBDA関数の例:

=LET(対象範囲,
VSTACK(DROP(有効行(マグロ!A:B),1),DROP(有効行(サバ!A:B),1),DROP(有効行(カツオ!A:B),1)),
XLOOKUP(C2,CHOOSECOLS(対象範囲,1),CHOOSECOLS(対象範囲,2))
)

方法2:INDIRECT関数で検索対象シートを動的に切り替える

セルでシート(セル範囲)を指定します。

検索値が同じでもシートが異なると結果がこのように切り替わります。

実現にはVLOOKUP関数の範囲指定にINDIRECT関数を使用します。

それぞれセル範囲に名前を付けて、INDIRECT関数の引数にしても実現が可能です。

セルの行や列が変わる場合は特に効果的です。

数式は下記のようになります。

=VLOOKUP(C3,INDIRECT(C2&"!A:B"),2,FALSE)
=XLOOKUP(C3,INDIRECT(C2&"!A:A"),INDIRECT(C2&"!B:B"))

方法3:IFERROR関数で複数のシートを順番に検索する

IFERROR関数を使用し、検索対象の全シートを対象とする

VLOOKUP関数を順番に記述しています。

#N/AエラーしなければVLOOKUP関数の結果を返しますが

結果が見つからないと#N/Aエラーとなるため次のVLOOKUP関数を実行します。

複数の検索対象に存在する検索値を指定した場合、

書いた順番(マグロ→サバ→カツオ)で優先されます。

数式は下記のようになります。

=IFERROR(VLOOKUP(C2,マグロ!A:B,2,FALSE),IFERROR(VLOOKUP(C2,サバ!A:B,2,FALSE),VLOOKUP(C2,カツオ!A:B,2,FALSE)))
=IFERROR(XLOOKUP(C2,マグロ!A:A,マグロ!B:B),IFERROR(XLOOKUP(C2,サバ!A:A,サバ!B:B),XLOOKUP(C2,カツオ!A:A,カツオ!B:B)))

まとめ

本記事では、Excelで複数シートにまたがるデータを検索するいくつかの方法を紹介しました。

  • VSTACK関数(推奨): 複数の範囲を仮想的に「縦」に結合し、VLOOKUP/XLOOKUPでそのまま検索可能にする最もスマートな方法。
  • INDIRECT関数: シート名がセルに入力されている場合に有効。
  • IFERROR関数: 古いExcel環境で、どうしても検索が必要な場合の代替策。

環境が許すのであれば、数式がシンプルで管理しやすい「VSTACK関数」の利用がおすすめです。データの散在による検索エラーを解消し、業務効率を向上させましょう。

関連記事

XLOOKUP(VLOOKUP)関数の使い方・活用方法の記事一覧

Excel 文字列による柔軟なセル指定を行う(INDIRECT関数)

Excel完全マスター: 関数・テクニック・新機能を網羅した決定版ガイド

本書は、Excelの基礎から応用まで、包括的に学べるガイドブックです。当サイトの豊富な情報を、電子書籍向けに最適化し、読みやすく再構成しました。

【本書の特徴】

  • 情報量:Word-A4サイズ換算で1,400ページ相当
  • 基本操作から高度なテクニックまで、段階的に学習可能
  • 140種類の関数を詳細に解説
  • 109種類の実用的なテクニックと具体例を紹介
  • 最新機能(XLOOKUP関数、LET関数、シートビュー、LAMBDA関数、スピル等)を徹底解説

【対象読者】

  • Excel初心者からプロフェッショナルまで
  • 体系的にExcelスキルを向上させたい方
  • 業務効率化を目指すビジネスパーソン
  • データ分析や可視化のスキルを磨きたい方

【本書の強み】

  • 実務に即した例題と解説
  • 視覚的な図表やスクリーンショットで理解を促進
  • 最新のExcelバージョンに対応した内容
  • 著者の長年の経験に基づく、実践的なTipsを多数収録

【更新とサポート】

  • 常に最新の情報を反映するため、定期的に内容を更新
  • 最新版の入手方法:Amazonカスタマーサポートへお問い合わせください

【入手方法】

  • 買い切り:950円
  • Kindle Unlimited:読み放題プランで利用可能

Excelマスターを目指す方、業務効率を劇的に向上させたい方に、自信を持っておすすめできる一冊です。この1冊で、Excelの可能性を最大限に引き出す力が身につきます。