Googleスプレッドシートで表計算やレポートを作成する際、「日付」かつ「担当者名」に一致する売上データを抽出するなど、複数の条件(AND条件)を指定してマスタから値を引いてきたいケースは多々あります。
しかし、広く使われているVLOOKUP(ブイルックアップ)関数は、仕様上「検索キーを1つしか指定できない」ため、そのままでは複数条件での検索に対応できません。
スプレッドシート上でVLOOKUP関数を使って複数条件検索を実現するためには、マスタに「&」記号で結合した作業用のキー列を1列追加する最もシンプルな方法と、強力な機能である「ARRAYFORMULA関数」と「中括弧({})の配列」を組み合わせて作業列なしで仮想テーブルを作る応用方法があります。
今回は、初心者でも今すぐできる基本手順から、数式のみで完結させる配列数式の記述手順まで図解します。関数の記述スキルを高めてデータ抽出業務を高速化し、日々の実務の効率化に役立ててください。
記事のポイント
- VLOOKUP自体は単一キーのみ対応だが検索値と検索列を結合させることで複数条件に対応できる
- マスタの左端に結合キー列を作るのが計算負荷が少なく最も初心者向けの手順である
- ARRAYFORMULAと配列を使えばシートの構造を変えずに数式内だけで仮想マスタを生成して検索できる
- XLOOKUP関数が使える環境であればそちらを利用する方が数式が簡単になる
VLOOKUP関数で複数条件を指定する2つのアプローチ

スプレッドシートでVLOOKUPに複数条件を処理させるためのアプローチには、大きく分けて「作業列を追加する簡単な方法」と「配列数式を使って作業列を不要にする方法」の2つがあります。それぞれの特徴を整理しましょう。
初心者向け手法と上級者向け手法の使い分け
第1の基本のアプローチは、「マスタデータに作業列を1列挿入する」方法です。
例えば、店舗列(B列)と商品名列(C列)があるマスタに対し、その左側(A列)に =B2 & C2 と結合した「店舗名+商品名」の列をあらかじめ作成しておきます。
VLOOKUPで検索する際は、検索キーの部分に E2 & F2 と入力してこのA列を検索します。構造が目に見えて分かりやすく、シートの動作が軽いメリットがあります。
第2の応用のアクセスは、「ARRAYFORMULA関数と配列表現({})」を使用する方法です。
スプレッドシートならではの中括弧({})を用いると、メモリ上に一時的な「結合キー + 取り出したい値」という2列の仮想的なマスタテーブルを瞬時に生成できます。
これにVLOOKUPを組み合わせることで、シートに余計な作業用の列を一切追加することなく、1セルの数式だけでデータ検索が可能になります。
以下に、スプレッドシートでのVLOOKUP複数条件検索における2つのアプローチのメリット・デメリットを整理しました。
| 構築手法 | 作業列の作成 | 数式の難易度 | 再計算の負荷(軽さ) | 実務での推奨シーン |
|---|---|---|---|---|
| マスタへの作業列挿入方式 | 必要 | 低(通常のVLOOKUPの記述のみ) | 非常に軽い(大規模データでもサクサク動く) | 初心者や、データ数が数万行以上ある重いシート用 |
| ARRAYFORMULA 配列数式方式 | 不要 | 高({}配列やARRAYFORMULAの知識が必要) | やや重い(複雑な配列計算を都度実行するため) | 中上級者や、シートの列構造を変更したくないスマートな表向け |
シートの利用メンバーのスキルや、データの大きさに合わせて選択するのがプロの設計です。次の章から、まずは最も基本となる作業列を使った安全な作成手順を見ていきましょう。
【基本編】マスタに「作業列」を追加してVLOOKUPで検索する手順

最も動作が軽快で、数式のミスが起きにくい基本の解決策が「マスタ側に結合したキー列(作業列)を追加する」手順です。スプレッドシートの画面に沿って解説します。
ステップ1:マスタデータの左端に「空の列」を挿入する
まず、検索対象となるマスタデータのシートを開きます。
VLOOKUP関数は「検索範囲の一番左端の列」を基準に検索を行う仕様であるため、条件に指定したい列(例: 店舗名がB列、商品名がC列)よりもさらに左側(A列)に新しい列を挿入します(列Aを選択して右クリック > 「左に1列挿入」を選択)。
ステップ2:&記号を使って結合キーを作成する
新しく作ったA列のセル(例: A2)に、右隣の条件列を繋ぐ数式を入力します。
=B2 & C2
これでセル内には「東京りんご」という結合テキストが生成されます。この数式を、データが入っている一番下の行までコピー(フィルコピー)しておきます。これで「結合キー列(作業列)」の作成は完了です。
ステップ3:検索元のシートで&結合キーを指定してVLOOKUPを実行する
データを抽出して表示したい集計用シートを開き、VLOOKUPの数式を入力します。検索キーの引数部分にも、マスタと同じ順序で条件セルを & で結合して記述します。
例えば、D2セルに店舗名、E2セルに商品名が入っており、マスタ(A〜D列)の4番目の列(単価)を取得したい場合:
=VLOOKUP(D2 & E2, Master!$A$2:$D$100, 4, FALSE)
これで、店舗と商品の2つの条件が完全に合致した正しい単価データが瞬時に抽出されます。
実は私も昔、他部署と共有している売上マスタで勝手に作業列を挿入してVLOOKUPを組んだら、マスタの列数を決め打ちで動かしていた別システムのマクロがエラーを吐いて停止し、部署中から大目玉をくらった苦い経験があります……。共有シートでは勝手に列を追加できないことも多いので、作業列を作らない応用編のテクニックを覚えておくと本当に重宝しますよ!
並び順と結合文字の重複バグに注意!
めったに発生しませんが、& で単純結合した際に、異なる条件の組み合わせが同じ結合文字列になってしまう「重複バグ」が発生することがあります。例えば、条件1が「東」で条件2が「京りんご」の場合と、条件1が「東京」で条件2が「りんご」の場合、どちらも結合すると「東京りんご」になってしまいます。これを防ぐためには、作業列とVLOOKUPの検索値の記述を =B2 & "_" & C2 や D2 & "_" & E2 のように、条件の間にアンダーバー(_)やスラッシュ(/)などの区切り文字を挟んで結合するように設計するのがプロの安全設計です。
【応用編】作業列不要!ARRAYFORMULAと中括弧配列({})による検索

「共有されているファイルなので、勝手に行を挿入したり列を増やしてレイアウトを崩したくない」という場合に最適な、数式の中だけで仮想のマスタデータを組み立ててVLOOKUPを実行する応用手順を解説します。
中括弧「{}」とARRAYFORMULAによる仮想VLOOKUP構文
作業列を一切使わずに複数条件を判定する、スプレッドシート専用の特殊な数式コードが以下になります。
=ARRAYFORMULA(VLOOKUP(条件1 & 条件2, {検索範囲1 & 検索範囲2, 対応範囲}, 2, FALSE))
■ 具体的な記述の具体例:
手元の D2(店舗名)と E2(商品名)を条件にして、マスタ(別シートのA列が店舗、B列が商品、C列が価格)から一括で価格を取得したい場合:
=ARRAYFORMULA(VLOOKUP(D2 & E2, {Master!$A$2:$A$100 & Master!$B$2:$B$100, Master!$C$2:$C$100}, 2, FALSE))
数式の仕組みと動作の解説
この非常に強力な数式は、Googleスプレッドシート固有の「2つの配列処理機能」を利用して動作しています。
- 中括弧「{}」による仮想テーブルの作成:スプレッドシートでは、
{範囲X, 範囲Y}とカンマで区切って記述すると、XとYの範囲を横並びに連結した新しい仮想のテーブル(配列)をメモリ上に一時作成できます。上記の例では、「A列&B列(店舗+商品)」という結合キーの縦1列と、C列(価格)の縦1列を横にくっつけて、「結合キー列(1列目) + 価格列(2列目)」という2列構成の仮設マスタを作っています。 - 列番号「2」の指定:仮想マスタが2列構成であるため、VLOOKUPの第3引数である列番号には、価格が並んでいる「
2」を指定します(マスタ自体の元の列位置は関係なくなります)。 - ARRAYFORMULAによる配列の強制計算:VLOOKUP単体では、セル範囲同士の結合(
&)を計算できません。数式全体をARRAYFORMULA(アレイフォーミュラ)で囲むことで、スプレッドシートに「範囲全体を1行ずつ連結して仮想のリストを完成させよ」と命令し、エラーを起こさずに配列処理を実行させています。
【要注意】アップデートによる最新仕様の落とし穴

近年、チャットツールやAIサービス、表計算ソフトなど多くのSaaSツールにおいて、高頻度でUI(ユーザーインターフェース)や内部仕様のアップデートが実施されています。
これにより、「昨日まで使えていた設定メニューの位置が変わった」「ショートカットキーの挙動が突然変化した」といったトラブルが非常に多く報告されており、公式ヘルプの更新が追いついていないケースも少なくありません。
特にWebブラウザ版やスマホアプリ版では、キャッシュデータの蓄積が原因で古いバージョンの画面と新しい挙動が混在し、「保存ボタンが押せない」「設定が反映されない」といった不具合(バグ)を引き起こすことがよくあります。
このような原因不明の不具合に遭遇した場合は、アプリの再起動や端末の再起動だけでなく、ブラウザのシークレットウィンドウ(プライベートブラウズ)での動作確認や、キャッシュ(一時データ)の完全削除を行うことで、多くの場合即座に解決可能です。
正確な最新の仕様変更等については公式サイトも併せてご確認ください。
スプレッドシートのVLOOKUP複数条件検索に関するFAQ
スプレッドシートでのVLOOKUPを使った複数条件検索の実務運用に関して、直面しやすい問題や解決策をQ&A形式で解説します。
Q1:ARRAYFORMULAを使った数式で「#N/A」や「#VALUE!」が表示される場合のチェック項目は?
「範囲指定のサイズ不一致」または「検索キーの不一致」が原因です。
まず、「#VALUE!」エラーが出る場合は、中括弧 {} の中に指定しているセル範囲の行数がズレていないか確認してください。
例えば、Master!$A$2:$A$100 と Master!$C$2:$C$100 はどちらも99行で揃っていますが、一方が $C$2:$C$90 になっていると配列エラーになります。
「#N/A」が出る場合は、検索値である D2 & E2 の結合テキストが、マスタ側の結合リストの中に存在しない状態を示しています。全角・半角のズレや、余計な空白が含まれていないかを確認してください。
Q2:新しく追加された「XLOOKUP関数」を使う方が簡単ではないですか?
はい、お使いのスプレッドシートや共有相手のExcel環境が新しい場合は、XLOOKUP関数を使用するのが最も簡単でおすすめです。
GoogleスプレッドシートではXLOOKUP関数が完全サポートされているため、以下のように非常にシンプルに複数条件検索が記述できます(ARRAYFORMULAや中括弧も不要です)。
=XLOOKUP(D2 & E2, Master!A:A & Master!B:B, Master!C:C, "なし")
今回のVLOOKUPを用いた複数条件の手法は、主に「古いバージョンのExcelで開く可能性がある共有ファイル」や「社内の古いルールでVLOOKUPの使用が義務づけられている」といった互換性を最優先する現場で活用してください。
Q3:3つ以上の条件(例: 店舗、商品、日付)を組み合わせて検索することは可能ですか?
はい、& 記号を増やして連結数を増やすだけで、何個でも条件を追加できます。
例えば、3つの条件で検索する場合は以下のように記述します。
=ARRAYFORMULA(VLOOKUP(条件1 & 条件2 & 条件3, {範囲1 & 範囲2 & 範囲3, 対応範囲}, 2, FALSE))
ただし、結合キーの順序(条件の並び順)が、検索値と仮想テーブルの範囲側で完全に一致している必要があるので、順序がズレないようにだけ注意して設定を行ってください。