office

エクセルで2つの条件を満たす値を返す関数って?初心者向けに分かりやすく解説!

エクセルでのデータ管理は、多くの業務で欠かせないスキルの一つとなっています。特に、膨大なデータの中から特定の情報を素早く見つけ出す能力は、作業効率に直結するかもしれません。多くの方がVLOOKUP関数を使ってデータを検索した経験があるかと思われますが、もし検索条件が一つではなく、二つ、あるいはそれ以上だったらどうでしょうか。例えば、部門名と役職名の両方に一致する社員の氏名を抽出したい場合などです。このようなエクセルで複数条件が一致するデータの抽出は、VLOOKUP関数だけでは対応が難しい場面が出てくる可能性があります。エクセルで条件に合うデータを抽出する関数を求めている方もいらっしゃるでしょう。この記事では、エクセルで2つの条件を満たす値を返すための具体的な方法について、初心者の方にも分かりやすく、いくつかの関数やテクニックを紹介していきます。

・エクセルで複数の条件を指定してデータを検索する基本的な考え方

・VLOOKUP関数で複数の条件を扱う場合の限界

・INDEX関数とMATCH関数を組み合わせた複数条件の検索方法

・最新のXLOOKUP関数やDGET関数を使った効率的なデータ抽出

エクセルで2つの条件を満たす値を返すための基本的な考え方

ここではエクセルで2つの条件を満たす値を返すことの基本的な考え方について説明していきます。VLOOKUP関数の限界から、複数の条件を扱うための代表的なアプローチまで、順に見ていきましょう。

VLOOKUP関数でできることの限界

なぜ複数の条件指定が難しいのか

エクセルで複数条件の一致を実現する主な関数

作業列(補助列)を使う最も簡単な解決策

作業列のメリットとデメリット

エクセルで2つの条件を満たすカウントの方法(SUMIFS)

VLOOKUP関数でできることの限界

VLOOKUP関数は、エクセルユーザーにとって非常になじみ深い関数の一つでしょう。指定した範囲の左端の列で特定の値を検索し、同じ行にある別の列の値を返す機能を持っています。これは、例えば社員番号から氏名を検索する、あるいは商品コードから単価を調べるといった、一つのキー(検索値)に対応する一つの結果を得る作業において非常に強力です。しかし、VLOOKUP関数の基本的な仕組みは、一つの検索値に基づいて動作するように設計されています。そのため、検索条件が二つ以上になった場合、例えば「A部門」かつ「東京勤務」の社員を探すといったエクセルで2つの条件を満たす値を返す操作を直接行うことはできません。VLOOKUP関数は、最初に見つかった一致するデータしか返せないため、検索列に同じ値が複数ある場合も、最初のものしか対象にできないという特性も持っています。この「検索条件は一つだけ」という点が、VLOOKUP関数で複数条件を扱おうとする際の最大の限界点となると考えられます。もちろん、後述する作業列(補助列)を作成し、二つの条件を一つのセルに結合させた新たなキーを作ることで、擬似的にVLOOKUP関数で対応させることは可能です。ただ、それは関数本来の機能ではなく、あくまでも工夫次第ということになるでしょう。

なぜ複数の条件指定が難しいのか

エクセルで複数の条件を指定したデータ抽出が難しく感じられる理由は、主に検索関数の基本的な設計に起因するかもしれません。VLOOKUP関数やHLOOKUP関数といった従来の検索関数は、前述の通り、単一の検索キーに基づいてデータを検索するように作られています。これらの関数は、指定された配列の特定の列(または行)を縦(または横)にスキャンし、最初に見つかった一致項目の情報を返します。関数の引数自体が、複数の検索条件を同時に受け入れるような構造になっていないのです。エクセルで複数条件の一致をさせようとすると、関数は「条件Aも満たし、かつ、条件Bも満たす」という論理的な判断を、検索プロセスと同時に行う必要があります。これは、単純な一致検索よりも複雑な処理が求められることを意味します。また、データベースの構造として、通常は一つのレコード(行)が一つの単位であり、各列がその属性(部門、氏名、売上など)を示します。複数の条件で検索するということは、複数の列にまたがって条件を指定することを意味し、これを単一の関数でスマートに処理するための専用の引数が、従来の関数には備わっていなかったと言えるでしょう。このため、エクセルで2つの条件を満たす値を返すには、関数を組み合わせる、作業列を使う、あるいは配列数式という特殊な計算方法を利用するといった、一歩進んだテクニックが必要とされる傾向にあります。

エクセルで複数条件の一致を実現する主な関数

エクセルで複数条件の一致するデータを抽出したい場合、VLOOKUP関数単体では難しいですが、他の関数や機能を組み合わせることで実現の道筋が見えてきます。代表的な方法としては、いくつかのパターンが考えられます。一つ目は、INDEX関数とMATCH関数を組み合わせる方法です。これは非常に強力で、エクセルで3つの条件を満たす値を返すといった、さらに多い条件にも応用が利く柔軟性を持っています。MATCH関数で複数の条件に一致する行番号を探し出し、INDEX関数でその行番号に対応するセルの値を返すという仕組みです。二つ目は、XLOOKUP関数を使用する方法です。これは比較的新しいバージョンのエクセル(Microsoft365やExcel2021)で利用可能な関数で、VLOOKUP関数の後継とも言われ、複数条件の扱いが格段に容易になっています。三つ目は、DGET関数を使用する方法です。これはデータベース関数の一つで、指定した条件(クライテリア)に一致するデータを抽出できます。ただし、条件に一致するデータが複数あるとエラーを返す特性があるため、一意のデータを抽出する際に適しています。また、エクセルで複数条件の一致した〇(例えば数値)を合計したい場合はSUMIFS関数、個数を数えたい場合はCOUNTIFS関数が非常に便利です。エクセルで2つの条件を満たすカウントなどもこれらで対応可能です。このように、目的に応じて複数の選択肢が存在するため、それぞれの特徴を理解し、状況に合わせて使い分けることが重要になるでしょう。

作業列(補助列)を使う最も簡単な解決策

エクセルで2つの条件を満たす値を返すための最も直感的で、初心者にも理解しやすい解決策の一つが、作業列(補助列)を作成する方法です。これは、元のデータテーブルに新しい列を追加し、そこに複数の条件を結合した新しい検索キーを作成するというアプローチです。例えば、「部門」(A列)と「役職」(B列)の二つの条件で検索したい場合、データテーブルの空いている列(例:D列)に、=A2&B2といった数式を入力します。この数式をデータのある行までコピーすると、D列には「営業部課長」や「開発部一般」のように、二つの条件が連結された文字列が作成されます。この作業列さえ準備してしまえば、あとは使い慣れたVLOOKUP関数の出番です。検索時には、検索値として二つの条件を同じように連結した値(例:「営業部課長」)を指定し、検索範囲を作業列(D列)から始めるように設定します。こうすることで、VLOOKUP関数は作業列(D列)を検索し、二つの条件が同時に満たされた行を見つけ出し、指定した列番号の値を返すことができます。この方法は、配列数式のような複雑な概念を必要とせず、処理速度が比較的速いというメリットがあります。元のデータを加工する必要がある点は考慮が必要ですが、手軽に複数条件検索を実現する有効な手段と言えるでしょう。

作業列のメリットとデメリット

前述の作業列(補助列)を使用する方法は、エクセルで2つの条件を満たす値を返す際に非常に実用的ですが、メリットとデメリットの両面を理解しておくことが望ましいでしょう。まずメリットとしては、その「単純さ」が挙げられます。INDEX関数とMATCH関数の組み合わせや配列数式といった複雑な数式を組む必要がなく、既存の二つ(あるいはそれ以上)の列を&(アンパサンド)演算子などで結合するだけです。そして、作成した作業列を検索対象として、多くの方が使い慣れているVLOOKUP関数をそのまま利用できるため、学習コストが低いと言えます。また、数式がシンプルであるため、他の人がファイルを引き継いだ際にも理解しやすいという利点も考えられます。一方で、デメリットも存在します。最大のデメリットは、元のデータテーブルに手を加える(列を追加する)必要がある点です。もし元のデータを変更することが許可されていない場合や、参照専用の共有ファイルである場合、この方法は採用できない可能性があります。また、データ量が多い場合、作業列を追加することでファイルサイズがわずかに増加することも考えられます。さらに、条件の組み合わせパターンが非常に多い場合、作業列の管理が煩雑になる可能性も否定できません。このように、作業列は手軽で分かりやすい反面、元のデータを変更するという制約が伴うため、使用する状況を選ぶアプローチと言えるでしょう。

エクセルで2つの条件を満たすカウントの方法(SUMIFS)

ここまではエクセルで2つの条件を満たす値を返す(特定のセル値を抽出する)方法に焦点を当ててきましたが、関連する操作としてエクセルで2つの条件を満たすカウント、つまり「条件に一致するデータが何個あるか」を数えたい場面も頻繁に発生します。この場合、COUNTIFS関数が非常に役立ちます。COUNTIFS関数は、複数の検索条件範囲とそれに対応する検索条件を指定し、すべての条件を満たすセルの個数を数えることができます。例えば、「部門が営業部」であり、かつ「ステータスが契約済み」の案件数を数えたい場合などに使えます。構文は=COUNTIFS(条件範囲1, 条件1, 条件範囲2, 条件2, ...)となります。一方、もしエクセルで複数条件に一致した〇(特定の値、例えば売上など)を「合計」したいのであれば、SUMIFS関数が適しています。SUMIFS関数は、複数の条件に一致したセルの合計を計算します。構文は=SUMIFS(合計対象範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, ...)です。COUNTIFS関数と似ていますが、最初に合計したい数値データの範囲を指定する点が異なります。これらの関数は、エクセルで複数条件の一致するデータを集計する際に非常に強力で、エクセルで3つの条件を満たす値を返す集計(3条件での合計やカウント)にも容易に対応可能です。値を「抽出」するのではなく「集計(カウントや合計)」するのが目的であれば、INDEXとMATCHの組み合わせよりも、これらIFS系の関数を使用する方がはるかに簡単で効率的でしょう。

エクセルで2つの条件を満たす値を返すための具体的な関数

ここではエクセルで2つの条件を満たす値を返すための、より具体的な関数やテクニックについて説明していきます。INDEX関数とMATCH関数を組み合わせる王道の方法から、最新のXLOOKUP関数まで、順に見ていきましょう。

INDEX関数とMATCH関数の基本

INDEXとMATCHを組み合わせる方法(配列数式)

XLOOKUP関数での簡単な実現方法(対象者限定)

エクセルで条件に合うデータを抽出するDGET関数

エクセルで3つの条件を満たす値を返す応用

エクセルで2つの条件を満たす値を返す関数の選び方

INDEX関数とMATCH関数の基本

エクセルで2つの条件を満たす値を返すための強力なテクニックとして、INDEX関数とMATCH関数の組み合わせがよく知られています。この組み合わせを理解するために、まずはそれぞれの関数が単体でどのような働きをするのかを知っておくことが重要です。INDEX関数は、指定した範囲(配列)の中から、指定した「行番号」と「列番号」に基づいて、その交点にあるセルの値を返す関数です。例えば、=INDEX(A1:C10, 5, 2)と入力すると、A1からC10の範囲の「5行目」かつ「2列目」(つまりB5セル)の値を返します。範囲全体を指定し、座標(行番号、列番号)で値を取り出すイメージです。一方、MATCH関数は、指定した範囲内で特定の検索値が「何番目にあるか」という位置(行番号または列番号)を数値で返す関数です。例えば、=MATCH("東京", A1:A10, 0)と入力すると、A1からA10の範囲で「東京」という文字が(完全一致で)何番目にあるかを返します。もしA3セルに「東京」があれば「3」という数値を返します。このように、INDEX関数が「座標(位置)から値を取り出す」関数であるのに対し、MATCH関数は「値から座標(位置)を探す」関数です。この二つは、単体でも便利ですが、組み合わせることで真価を発揮すると言えるでしょう。

INDEXとMATCHを組み合わせる方法(配列数式)

INDEX関数とMATCH関数の基本を理解したところで、いよいよこれらを組み合わせてエクセルで2つの条件を満たす値を返す方法を見ていきましょう。ここでのポイントは、MATCH関数を使って「二つの条件に同時に一致する行番号」を見つけ出すことです。例えば、A列に「部門」、B列に「役職」、C列に「氏名」が入力された表があり、「営業部」かつ「課長」の「氏名」を抽出したいとします。この場合、MATCH関数の検索値として1を指定し、検索範囲として(A列範囲="営業部")*(B列範囲="課長")のように、条件式を掛け算(論理積)で指定します。これは「配列数式」と呼ばれるテクニックです。(A列範囲="営業部")は、A列の各セルが「営業部」と一致すればTRUE(1)、違えばFALSE(0)の配列を返します。同様に(B列範囲="課長")もTRUE(1)とFALSE(0)の配列を返します。これらを掛け算すると、両方の条件を満たす行だけが1*1=1となり、それ以外は0になります。MATCH関数は、この1が検索範囲の「何番目」にあるかを探します。これで二つの条件を満たす行番号が特定できます。最後に、INDEX関数を使って、C列(氏名)の範囲から、MATCH関数が見つけてきた行番号の値を抽出します。数式のイメージは=INDEX(C列範囲, MATCH(1, (A列範囲="営業部")*(B列範囲="課長"), 0))となります。この数式は、従来のExcel(2019以前)では、入力後にCtrl + Shift + Enterキーを同時に押して配列数式として確定させる必要がありました。Microsoft365やExcel2021では、Enterキーだけで機能することがあります(スピル機能)。

XLOOKUP関数での簡単な実現方法(対象者限定)

もし、お使いのエクセルがMicrosoft365またはExcel2021以降のバージョンであれば、エクセルで2つの条件を満たす値を返す作業は劇的に簡単になる可能性があります。それは、新しく導入されたXLOOKUP関数のおかげです。XLOOKUP関数は、VLOOKUP関数やHLOOKUP関数、さらにはINDEXとMATCHの組み合わせの多くの機能を一つに統合したような、非常に強力な関数です。XLOOKUP関数の基本的な構文は=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合], [一致モード], [検索モード])です。これだけ見るとVLOOKUPと似ていますが、複数条件を扱う際の柔軟性が全く異なります。二つの条件を指定する場合、XLOOKUP関数の検索値として1を指定し、検索範囲に (条件範囲1=条件1)*(条件範囲2=条件2)という配列数式のロジック(前述のINDEX+MATCHで解説したものと同様)をそのまま組み込むことができます。例えば=XLOOKUP(1, (A列範囲="営業部")*(B列範囲="課長"), C列範囲)のように記述します。これは、 (A列範囲="営業部") (B列範囲="課長")の両方を満たす(結果が1になる)行を検索し、その行に対応するC列範囲(氏名など)の値を返します。この方法は、INDEXとMATCHの組み合わせと比べて構文がシンプルで理解しやすく、Ctrl + Shift + Enterキー(従来の配列数式)を意識する必要もありません。ただし、この関数は新しいバージョンでしか使えないため、古いバージョンのエクセルでファイルを開く可能性がある場合は、互換性の問題に注意が必要でしょう。

エクセルで条件に合うデータを抽出するDGET関数

エクセルで条件に合うデータを抽出するための関数として、データベース関数の一つであるDGET関数も選択肢になります。DGET関数は、リスト(データベース)の中から、指定した条件(クライテリア)に一致する特定のフィールド(列)の値を返します。この関数の最大の特徴は、条件を指定するための「条件範囲」をシート上に別途作成する必要がある点です。例えば、元のデータリストとは別の場所に、検索したい列の見出し(例:「部門」「役職」)と、その下に具体的な条件(例:「営業部」「課長」)を入力したセル範囲を準備します。DGET関数の構文は=DGET(データベース範囲, フィールド, 条件範囲)となります。データベース範囲は見出し行を含むデータ全体、フィールドは抽出したい列の見出し(例:「氏名」)または列番号、条件範囲は先ほど準備した条件指定エリアです。この方法のメリットは、条件範囲のセルを書き換えるだけで、数式を変更せずに検索条件を動的に変更できる点です。ただし、DGET関数には重要な注意点があります。それは、指定した条件に一致するデータが一つも見つからない場合(#VALUE!エラー)、または二つ以上見つかった場合(#NUM!エラー)は、エラー値を返すという特性です。つまり、DGET関数は「条件に一致するデータが、必ず(そして正確に)一つだけ存在する」ことが分かっている場合に適しています。エクセルで条件に合うデータを抽出する関数(複数)の結果を期待する場合は、他の方法を検討する必要があるかもしれません。

エクセルで3つの条件を満たす値を返す応用

これまでエクセルで2つの条件を満たす値を返す方法を中心に見てきましたが、これらのテクニックは、さらに多い条件、例えばエクセルで3つの条件を満たす値を返す場合にも応用が可能です。特に、INDEX関数とMATCH関数を組み合わせる方法(配列数式)や、XLOOKUP関数を使用する方法は、条件の数を増やすのが比較的容易です。INDEXとMATCHの組み合わせの場合、MATCH関数の検索範囲の部分を (条件範囲1=条件1)*(条件範囲2=条件2)*(条件範囲3=条件3)のように、条件式を*(アスタリスク)で必要なだけ連結していきます。これにより、三つの条件すべてを満たす行(結果が1になる行)の行番号をMATCH関数が見つけ出してくれます。XLOOKUP関数でも同様で、検索範囲の部分を (条件範囲1=条件1)*(条件範囲2=条件2)*(条件範囲3=条件3)と記述します。作業列(補助列)を使う方法でも、=A2&B2&C2のように、三つの列の値を連結させた作業列を作成すれば、VLOOKUP関数で対応可能です。DGET関数を使用する場合も、条件範囲に3列分の見出しと条件を記述すれば、3条件での検索が行えます(ただし、結果が一意である必要があります)。このように、基本的な「複数条件」の処理ロジックを理解していれば、条件が二つから三つ、あるいはそれ以上に増えたとしても、同じ考え方で対応できる可能性が高いでしょう。

エクセルで2つの条件を満たす値を返す関数の選び方

今回はエクセルで2つの条件を満たす値を返すための様々な方法についてお伝えしました。以下に、本記事の内容を要約します。

・VLOOKUP関数は基本的に一つの検索条件で動作する

・複数条件をVLOOKUPで扱うには作業列(補助列)が有効である

・作業列は元のデータを変更するが、数式は単純になる

エクセルで複数条件の一致を実現する代表格はINDEXとMATCHの組み合わせである

・INDEX関数は指定した座標(行・列)の値を取得する

・MATCH関数は指定した値が範囲の何番目にあるか(位置)を取得する

・INDEXとMATCHを組み合わせる際は配列数式の考え方を用いる

・配列数式では条件式を*(論理積)で連結することが多い

・従来のExcelではINDEX+MATCHの配列数式にCtrl+Shift+Enterが必要な場合がある

・Microsoft365やExcel2021ではXLOOKUP関数が利用可能である

・XLOOKUP関数は複数条件をよりシンプルに扱うことができる

・DGET関数はデータベース関数の一つで、条件範囲を別途用意する

・DGET関数は条件に一致する結果が一意(一つだけ)の場合に有効である

・条件に一致するデータの個数を数える場合はCOUNTIFS関数が適している

・条件に一致するデータの数値を合計する場合はSUMIFS関数が適している

どの関数を選ぶかは、ご自身の使用するエクセルのバージョンや、元のデータを変更できるか、また検索結果が一意であるかどうかといった状況によって変わってくるかもしれません。

それぞれの関数の特徴や注意点を理解し、ご自身の作業に最適な方法を見つけていただければ幸いです。

エクセルのデータ活用が、よりスムーズで効率的なものになることを願っています。

CTAサンプル

これはCTAサンプルです。
内容を編集するか削除してください。