VLOOKUP関数で複数条件ができない原因と解決方法|IF・INDEXでの対処も解説
VLOOKUP関数で「複数条件で検索したいのに、うまくいかない」「条件を2つ指定するとエラーになる」と悩んでいませんか?
実はVLOOKUP関数自体は仕組み上、複数条件の検索に対応していません。
そのため、正しく数式を入力しているつもりでも「できない」と感じるケースが非常に多いです。
この記事では「VLOOKUP関数で複数条件を指定したい」方向けになぜVLOOKUPでは複数条件が使えないのかという理由から、IF関数・INDEX+MATCH・XLOOKUPを使った具体的な解決方法までを、初心者にもわかるように解説します。
「VLOOKUPに無理やりこだわるべきか」「別の関数を使うべきか」も判断できる内容なので、複数条件の検索でつまずいている方は、ぜひ最後まで確認してみてください。
VLOOKUP関数で複数条件ができない原因とは?
VLOOKUPで複数条件を指定しようとしてうまくいかない場合、数式の書き方が間違っているのではなく、関数の仕様そのものが原因であることがほとんどです。
まずは「なぜVLOOKUPでは複数条件ができないのか」を理解しておきましょう。
VLOOKUPは複数条件に対応していない
結論から言うと、VLOOKUP関数は複数条件での検索を想定して作られていません。VLOOKUPは「1つの検索値」をもとに、「決められた表の中から対応する値を返す」
というシンプルな仕組みの関数なのです。
そのため「AかつBの条件に一致するデータを探す」といった検索は、VLOOKUP単体ではできない仕様になっています。
1つの条件しか検索できない仕組み
VLOOKUPの第1引数には、検索値を1つしか指定できません。
また、検索対象となるのは「検索範囲の一番左の列」のみです。
つまりVLOOKUPは、「この値と一致する行を探す」という一次元の検索しかできず、複数の列を同時に判定する仕組みを持っていないのです。
VLOOKUPで複数条件を使いたくなるよくあるケース
実務では「複数条件で検索したい」と思う場面が非常に多くあります。
ここでは、特によくあるケースを見ていきましょう。
商品コード+日付で検索したい場合
例えば、
- 商品コード
- 取引日
この2つを条件にして、売上金額を取得したいケースです。
商品コードだけでは同じ商品が複数存在するため、日付も条件に含めないと正しいデータが取れません。
このような場面で、VLOOKUPが使えないと感じる人は非常に多いでしょう。
社員名+部署名で検索したい場合
社員名だけで検索すると、同姓同名の社員がいる場合に正しい結果が返りません。
そのため、
- 社員名
- 部署名
を組み合わせて検索したくなりますが、これもVLOOKUP単体では対応できない典型例です。
VLOOKUPで複数条件を擬似的に実現する方法
ここまできてVLOOKUPで複数条件はできないとなったらこの記事を読んでいる方は怒るでしょう(笑)
VLOOKUPでも、工夫次第で「複数条件っぽい検索」を実現できるのでご紹介します。
ただし、これはあくまで擬似的な方法である点は理解しておきましょう。
IF関数を使って条件を1つにまとめる
考え方としては、複数の条件をIF関数で判定し、1つの値に変換するという方法です。例えば、「条件Aかつ条件Bのときだけ検索する」といった形で、検索値を事前に加工します。
ただしこの方法は、
・数式が複雑になりやすい
・メンテナンス性が低い
というデメリットがあります。
結合列(補助列)を作成する方法
実務でよく使われるのが、補助列を使う方法です。
例として、
- 商品コード
- 日付
を「商品コード_日付」のように結合した列を作成し、その列を検索キーとしてVLOOKUPを使います。
この方法は、「仕組みが分かりやすい」と「VLOOKUPの制限を回避できる」というメリットがありますが、表の構造を変更する必要がある点には注意が必要です。
ちなみセルを結合する関数でオススメなのはCONCAT関数です。詳しく見たい方は下記のおすすめ記事をご覧ください。
INDEX+MATCHで複数条件に対応する方法
VLOOKUPで複数条件が使えない場合、最も汎用性が高く実務でもよく使われる解決策が「INDEX+MATCH」です。
INDEX+MATCHを使うことで、「検索列の位置に制限がない」「複数条件(AND条件)を指定できる」「列構成が変わっても壊れにくい」といったメリットがあります。
INDEX+MATCHが複数条件に強い理由
INDEX+MATCHでは、「どの行を取得するか(MATCH)」と「どの列の値を返すか(INDEX)」を完全に分離して指定できます。
そのため、MATCH関数の中で複数の条件を同時に判定することが可能です。
VLOOKUPのように「左端の列しか検索できない」といった制限もありません。
配列数式で複数条件を指定する方法
ここでは、次のような表を例にします。
- A列:商品コード
- B列:日付
- C列:売上金額
「商品コードがA001 かつ 日付が2024/1/1 の売上金額」を取得したい場合、数式は下記のようになります。
=INDEX(C:C, MATCH(1, (A:A=”A001″)*(B:B=DATE(2024,1,1)), 0))
この数式の仕組みは次のとおりです。
- (A:A=”A001″) → 条件に合う行はTRUE
- (B:B=DATE(2024,1,1)) → 条件に合う行はTRUE
- TRUE×TRUE = 1
- MATCH(1, … ,0) → 両方の条件を満たす行番号を取得
※Excelのバージョンによっては、Enterではなく「Ctrl+Shift+Enter」が必要な場合があります。
XLOOKUPで複数条件を指定する方法
Microsoft 365 や Excel 2021 以降を使っている場合は、XLOOKUPを使うのが最もシンプルでおすすめです。INDEX+MATCHよりも数式が直感的で、初心者でも理解しやすいのが特徴です。
XLOOKUPで複数条件が簡単にできる理由
XLOOKUPでは、検索範囲に論理式そのものを指定できます。そのため、「この条件かつこの条件」といったAND条件を、数式の中で自然に表現できます。
列番号の指定も不要で、VLOOKUPよりもミスが起きにくい点も大きなメリットです。
AND条件で複数条件を指定する例
先ほどと同じ表を使い、「商品コードがA001 かつ 日付が2024/1/1 の売上金額」を取得する例です。
この数式では、
- (A:A=”A001″)*(B:B=DATE(2024,1,1))
→ 両方の条件を満たす行だけが「1」になる - XLOOKUPで「1」を探し、C列の値を返す
という仕組みになっています。
INDEX+MATCHと比べて、数式が短く読みやすいのが特徴です。
複数条件ができないときによくあるミス
複数条件の数式は正しく書いているつもりでも、次のようなミスが原因で動かないことがあります。
- 条件の列範囲がズレている
- 数値と文字列が混在している
- 絶対参照が設定されていない
それぞれ見ていきましょう!
条件の列範囲がズレている
配列を使った数式では、条件に使う列の行数がすべて同じである必要があります。
例えば、「(A2:A100=”A001″)*(B2:B200=DATE(2024,1,1))」のように範囲がズレていると、正しく計算されません。
対処法としては、
- すべて同じ行範囲にそろえる
- テーブル化して列指定を使う
のが効果的と言えるでしょう。
数値と文字列が混在している
日付や数値が「数値として入力されている」「文字列として入力されている」状態が混在していると条件判定に失敗します。
特にCSVや外部データを使っている場合は、VALUE関数やDATE関数で形式を統一しましょう。
絶対参照が設定されていない
複数条件の数式をコピーするときに、参照範囲がズレると途中から結果が返らなくなります。必要に応じて絶対参照や固定範囲にすることが重要です。
数式をコピーしても参照するセルや範囲が変わらないように固定する指定方法です。
セル番地に $(ドルマーク) を付けることで、行や列の移動を防げます。
同じ表や範囲を何度も使う数式では、必須の設定です。
まとめ|VLOOKUPで複数条件ができない原因と正しい対処法
VLOOKUPで複数条件ができないのは、数式のミスではなく関数の仕様が原因です。無理にVLOOKUPで対応しようとすると、数式が複雑になりエラーや修正の手間が増えてしまいます。
目的に応じて、補助列・INDEX+MATCH・XLOOKUPを使い分けることが、複数条件検索をスムーズに解決する一番の近道です。
最後にこの記事の振り返りを簡単にしていきましょう。
VLOOKUPで複数条件が使えない理由
VLOOKUPは1つの条件・1つの検索列しか扱えない関数です。そのため、「条件を2つ以上同時に判定する」検索には仕組み上対応していません。
どうしてもVLOOKUP関数で複数条件を指定したい場合は範囲内のセルを結合したりIF関数を使用してデータを参照していきましょう!
状況別のおすすめ解決方法
- 表を大きく変えられる → 補助列+VLOOKUP
- 柔軟に複数条件を扱いたい → INDEX+MATCH
- 新しいExcelが使える → XLOOKUP(最も簡単)
無理にVLOOKUPにこだわらないのがポイントですね。
今後はVLOOKUPにこだわらなくてOK
VLOOKUPは今でも便利ですが、複数条件には不向きです。用途に応じて「INDEX+MATCH」や「XLOOKUP」を使い分けることで、エラーや修正の手間を大幅に減らせます。



