エクセルで大量のデータを扱うとき、「複数の条件を同時に満たすデータだけを取り出したい」と思う場面は多いでしょう。
たとえば、商品名が「マグロ」かつ売上が一定以上のデータだけを抽出したい、あるいは複数のシートにまたがるデータを条件付きで集計したいといったケースです。
エクセルにはこうした複数条件の抽出・検索に対応した関数や機能が豊富に用意されています。
本記事では、IFS・FILTER・COUNTIFS・SUMIFSなど複数条件に対応した関数を中心に、複数シートへの応用まで幅広く解説します。
この記事でわかること
・複数条件でデータを抽出する主な関数(IF・IFS・FILTER・INDEX+MATCH)
・AND条件・OR条件それぞれの書き方
・複数シートをまたいだ条件付き集計の方法
・条件式の組み合わせパターンと実用例
複数条件でデータを抽出する基本的な考え方
エクセルで複数条件に一致するデータを抽出するとき、まず押さえておきたいのが「AND条件」と「OR条件」の違いです。
AND条件とは、すべての条件を同時に満たすデータだけを対象にする考え方です。
一方、OR条件とは、いずれかの条件を満たすデータを対象にする考え方になります。
この2つの概念を理解しておくことで、関数の使い分けがスムーズになるでしょう。
以下のサンプルデータを使って解説を進めます。
| A列:商品名 | B列:カテゴリ | C列:売上(円) | D列:担当者 |
|---|---|---|---|
| マグロ | 鮮魚 | 15000 | 田中 |
| カツオ | 鮮魚 | 8000 | 佐藤 |
| ハラス | 鮮魚 | 12000 | 田中 |
| アボカド | 野菜 | 5000 | 鈴木 |
| カボチャ | 野菜 | 9000 | 佐藤 |
| マシュマロ | 菓子 | 3000 | 田中 |
| チョコ | 菓子 | 11000 | 鈴木 |
| 桜餅 | 和菓子 | 7000 | 佐藤 |
| 柏餅 | 和菓子 | 6000 | 田中 |
このデータはA1セルにヘッダーが入っており、2行目以降にデータが並んでいる構成です。
以降の数式はすべてこのサンプルをベースに解説します。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | 商品名 | カテゴリ | 売上(円) | 担当者 | |
| 2 | マグロ | 鮮魚 | 15000 | 田中 | E2に数式を入力 |
| 3 | カツオ | 鮮魚 | 8000 | 佐藤 | |
| 4 | ハラス | 鮮魚 | 12000 | 田中 | |
| 5 | アボカド | 野菜 | 5000 | 鈴木 | |
| 6 | カボチャ | 野菜 | 9000 | 佐藤 | |
| 7 | マシュマロ | 菓子 | 3000 | 田中 | |
| 8 | チョコ | 菓子 | 11000 | 鈴木 | |
| 9 | 桜餅 | 和菓子 | 7000 | 佐藤 | |
| 10 | 柏餅 | 和菓子 | 6000 | 田中 |
▲ A1セルにヘッダーを配置した基本構成。E2セルに判定用の数式を入力し、オートフィルで引っ張ります。
まず最もシンプルな複数条件の指定方法として、IF関数とAND関数を組み合わせる方法があります。
たとえば「カテゴリが鮮魚」かつ「売上が10000以上」の行に印をつけたい場合、E2セルに次のように入力します。
=IF(AND(B2=”鮮魚”,C2>=10000),”対象”,”—”)
AND関数の中に複数の条件をカンマで区切って並べることで、すべての条件を満たした行だけに「対象」と表示されます。
この数式をF10までオートフィルで引っ張れば、全行に判定結果が表示されるでしょう。
【操作のポイント】AND条件はAND関数、OR条件はOR関数をIF関数の中に組み込むことで柔軟に対応できます。条件が増えてもカンマで追記するだけなので拡張も簡単です。
FILTER関数で複数条件に一致する行をまとめて抽出する
Excel 2019以降(Microsoft 365含む)では、FILTER関数を使うことで複数条件に一致する行をまとめて別の場所に抽出できます。
従来のIF+AND式との最大の違いは、該当する行全体を自動的に出力してくれる点です。
手動で並べ替えたりコピーしたりする手間が省けるため、実務での活用度は非常に高い関数と言えるでしょう。
FILTER関数の基本構文
FILTER関数の基本的な書き方は次の通りです。
=FILTER(配列, 含む, [空の場合])
「配列」には抽出したいデータ範囲を指定します。
「含む」には条件式を指定し、TRUEになる行だけが抽出される仕組みです。
「空の場合」は省略可能ですが、該当なしのときに表示するテキストを指定できます。
AND条件でFILTERを使う
「カテゴリが鮮魚」かつ「売上が10000以上」の行を抽出する場合、F2セルに次のように入力します。
=FILTER(A2:D10,(B2:B10=”鮮魚”)*(C2:C10>=10000),”該当なし”)
AND条件の場合は、各条件式を掛け算(*)でつなぐのがポイントです。
掛け算はTRUE(1)とFALSE(0)の積を計算するため、すべての条件がTRUEの行だけが抽出されます。
この数式を入力すると、マグロ(鮮魚・15000・田中)とハラス(鮮魚・12000・田中)の2行が自動的に展開されて表示されるでしょう。
OR条件でFILTERを使う
OR条件の場合は、掛け算ではなく足し算(+)を使います。
「カテゴリが鮮魚」または「売上が10000以上」のどちらかに当てはまる行を抽出するなら、次の数式になります。
=FILTER(A2:D10,(B2:B10=”鮮魚”)+(C2:C10>=10000),”該当なし”)
足し算では、どちらかの条件がTRUE(1)であれば合計が1以上になるため、OR条件として機能します。
両方の条件がFALSEのときのみ0になり、その行は除外されるわけです。
| A | B | C | D | E | F | G | H | ||
|---|---|---|---|---|---|---|---|---|---|
| 1 | 商品名 | カテゴリ | 売上 | 担当者 | ▼ FILTER結果 | ||||
| 2 | マグロ | 鮮魚 | 15000 | 田中 | =FILTER(A2:D10,(B2:B10=”鮮魚”)*(C2:C10>=10000),”該当なし”) | ||||
| 3 | カツオ | 鮮魚 | 8000 | 佐藤 | マグロ | 鮮魚 | 15000 | ||
| 4 | ハラス | 鮮魚 | 12000 | 田中 | ハラス | 鮮魚 | 12000 | ||
| 5 | アボカド | 野菜 | 5000 | 鈴木 | |||||
▲ F2セルにFILTER数式を入力すると、条件に一致した行が自動でスピルして展開されます。
【操作のポイント】FILTER関数はMicrosoft 365やExcel 2021以降で使用可能です。旧バージョンでは使えないため、その場合はINDEX+MATCH関数の組み合わせやオートフィルター機能で代用しましょう。
INDEX+MATCH関数で複数条件に一致するデータを検索する
FILTER関数が使えない環境では、INDEX関数とMATCH関数を組み合わせた配列数式が複数条件検索の定番手法です。
少し記述が長くなりますが、古いバージョンのExcelでも動作するため覚えておく価値は十分あります。
INDEX+MATCHの基本構文
まず、INDEX関数とMATCH関数それぞれの役割を確認しましょう。
MATCH関数は指定した値が範囲内の何行目にあるかを返し、INDEX関数はその行番号を使って特定のセルの値を取り出します。
2つを組み合わせることで、VLOOKUPでは難しい柔軟な検索が実現できるわけです。
複数条件でのINDEX+MATCH数式
「カテゴリが鮮魚」かつ「担当者が田中」の行の売上を取り出す場合、次のように入力します。
=INDEX(C2:C10,MATCH(1,(B2:B10=”鮮魚”)*(D2:D10=”田中”),0))
この数式はCtrl+Shift+Enterで確定する配列数式として入力してください(Microsoft 365では通常のEnterでも動作します)。
MATCH関数の中でAND条件を掛け算で表現し、その積が1になる最初の行番号を取り出す仕組みです。
結果として最初に一致した「マグロ・鮮魚・15000・田中」行の売上「15000」が返されます。
2番目以降の一致データを取り出すには
INDEX+MATCHは基本的に最初の一致行しか返しません。
2番目以降のデータも必要な場合は、SMALL関数やIFERROR関数と組み合わせることで対応できます。
ただし数式が複雑になるため、Microsoft 365環境ではFILTER関数を使うほうがシンプルで管理しやすいでしょう。
【操作のポイント】INDEX+MATCH配列数式は、Ctrl+Shift+Enterで入力すると数式バーに{}(波括弧)が自動でつきます。手動で{}を入力しても配列数式にはならないので注意が必要です。
SUMIFSとCOUNTIFSで複数条件の集計・カウントをする
データの抽出だけでなく、複数条件に一致するデータの「合計」や「個数」を求めたい場面も多いでしょう。
そのような場合に活躍するのが、SUMIFS関数とCOUNTIFS関数です。
SUMIFSで複数条件の合計を求める
SUMIFS関数は、複数の条件をすべて満たす行の合計値を返します。
基本構文は次の通りです。
=SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, …)
「カテゴリが鮮魚」かつ「担当者が田中」の売上合計を求める場合は、次のように書きます。
=SUMIFS(C2:C10,B2:B10,”鮮魚”,D2:D10,”田中”)
この数式は、B列が「鮮魚」でかつD列が「田中」の行のC列(売上)を合計します。
マグロ(15000)とハラス(12000)が該当し、結果は「27000」になります。
COUNTIFSで複数条件の個数を数える
COUNTIFS関数は、複数条件に一致するセルの個数を返します。
=COUNTIFS(条件範囲1, 条件1, 条件範囲2, 条件2, …)
先ほどと同じ条件でカウントするなら次の通りです。
=COUNTIFS(B2:B10,”鮮魚”,D2:D10,”田中”)
結果は「2」が返され、条件に一致する行が2件あることがわかります。
SUMIFSとCOUNTIFSは条件の数に上限がなく、実務でも非常に使いやすい関数です。
比較演算子を使った条件指定
数値の条件には比較演算子を文字列として指定できます。
「売上が8000以上かつ12000以下」のデータ数を数えたい場合は次のように書きます。
=COUNTIFS(C2:C10,”>=8000″,C2:C10,”<=12000″)
同じ範囲に対して2つの条件を指定することで、範囲内の数値に絞ったカウントが可能になります。
カツオ(8000)・ハラス(12000)・カボチャ(9000)・桜餅(7000)のうち条件に合う3件が返されるでしょう。
【操作のポイント】SUMIFSとCOUNTIFSの条件にはワイルドカード(*や?)も使えます。たとえば”*魚*”とすれば「鮮魚」「白身魚」など「魚」を含む文字列すべてが対象になります。
複数シートをまたいだ条件付き集計の方法
実務では、月別・店舗別などシートを分けて管理しているケースも多くあります。
複数シートにまたがった条件付き集計は、SUMIFS+INDIRECTの組み合わせや3D参照が有効です。
3D参照で複数シートを一括集計する
同じ構造のシートが複数ある場合、3D参照を使うことでシートをまたいだ集計が簡単にできます。
たとえばSheet1からSheet3まで同じ構造のデータがある場合、C列の合計を一括で求めるには次のように書きます。
=SUM(Sheet1:Sheet3!C2:C10)
ただし3D参照はSUMIFSには対応していないため、条件付きで複数シートを集計するには工夫が必要です。
INDIRECTとSUMIFSを組み合わせる方法
シート名をセルに入力しておき、INDIRECT関数で参照先を動的に切り替える方法があります。
たとえばF1セルに「Sheet1」、F2セルに「Sheet2」と入力してある場合、次のような数式で各シートの集計が可能です。
=SUMIFS(INDIRECT(F1&”!C2:C10″),INDIRECT(F1&”!B2:B10″),”鮮魚”)
F1セルの値が変わるたびに参照先シートが切り替わるため、汎用性の高い集計フォームを作れます。
複数シートの同条件集計をまとめて行いたいときは、この数式をSUMでまとめる形にすると便利です。
VSTACK関数で複数シートのデータを結合してからFILTERする
Microsoft 365では、VSTACK関数を使って複数シートのデータを縦に結合したうえでFILTER関数をかける方法も使えます。
=FILTER(VSTACK(Sheet1!A2:D10,Sheet2!A2:D10),(VSTACK(Sheet1!B2:B10,Sheet2!B2:B10)=”鮮魚”))
VSTACKで2つのシートのデータを縦に結合し、その結果に対してFILTERをかける形です。
シートが増えた場合もVSTACKの引数を追加するだけで対応できるため、拡張性が高い方法と言えるでしょう。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | 集計設定 | シート名 | Sheet1 | |||
| 2 | 条件:カテゴリ | 鮮魚 | ||||
| 3 | 集計結果 | 27000 | =SUMIFS(INDIRECT(F1&”!C2:C10″),INDIRECT(F1&”!B2:B10″),”鮮魚”) | |||
| 4 | ▲ F1のシート名を「Sheet2」に変えると自動で参照先が切り替わります | |||||
▲ INDIRECTとSUMIFSを組み合わせることで、シート名を変えるだけで複数シートの条件集計が可能になります。
【操作のポイント】INDIRECT関数はシート名やセル参照を文字列から動的に生成できます。シート名にスペースや記号が含まれる場合は、シングルクォートで囲む必要があります(例:INDIRECT(“‘”&F1&”‘!C2:C10”))。
オートフィルターと詳細設定で複数条件を絞り込む
関数を使わずに複数条件でデータを絞り込む方法として、エクセルの「オートフィルター」と「フィルターの詳細設定」があります。
特に詳細設定(フィルターオプション)は、AND条件とOR条件を自由に組み合わせた複雑な絞り込みが関数なしで実現できる便利機能です。
オートフィルターで複数列を絞り込む
オートフィルターは、各列のドロップダウンから個別に条件を指定する方法です。
複数の列で同時にフィルターをかけると、それらはAND条件として機能します。
B列で「鮮魚」、D列で「田中」を選択すれば、両方の条件を満たす行だけが表示されるわけです。
詳細設定(フィルターオプション)の使い方
より複雑な条件を指定したい場合は、「データ」タブから「詳細設定」を選択します。
別のセル範囲に「検索条件範囲」を作成し、そこに条件を記述することで柔軟なフィルタリングが可能です。
同じ行に条件を並べるとAND条件、別の行に記述するとOR条件として認識されます。
結果を別の場所に抽出したい場合は「指定した範囲」にコピー先のセルを指定することもできるでしょう。
フィルター結果を別シートに出力する
詳細設定では、抽出結果を別シートに出力することも可能です。
ただしこの操作は、出力先のシートをアクティブにした状態で「データ」→「詳細設定」を開く必要があります。
元データのシートをアクティブにした状態では別シートへの出力が選択できないため、操作順序に注意が必要です。
【操作のポイント】詳細設定の検索条件範囲には、必ず元データのヘッダーと同じ列名を使ってください。列名が一致しないと条件が認識されず、全データが表示されてしまいます。
条件式のパターン別まとめと選び方
ここまで解説してきた複数条件の抽出・検索・集計の手法をおさらいしましょう。
目的に応じた使い分けを意識することが、作業効率アップの近道です。
目的別の関数・機能の選び方
条件に一致する行全体を抽出したい場合はFILTER関数が最適です。
特定セルの値を取り出したい場合はINDEX+MATCHを使いましょう。
合計値を求めたい場合はSUMIFS、個数を数えたい場合はCOUNTIFSが対応します。
関数を使わず視覚的に操作したい場合はオートフィルターや詳細設定が便利でしょう。
AND条件とOR条件の組み合わせパターン
AND条件はFILTER関数では「*」、SUMIFS/COUNTIFSでは複数の条件範囲と条件の組み合わせで表現します。
OR条件はFILTER関数では「+」、COUNTIFSではCOUNTIFS同士の足し算で表現するのが基本パターンです。
複雑な条件が必要な場合は、FILTER関数内でAND条件とOR条件を組み合わせることも可能です。
バージョンによる使い分け
Microsoft 365・Excel 2021以降ではFILTER・VSTACKなどの新関数が使えるため、積極的に活用しましょう。
Excel 2019以前の環境ではINDEX+MATCH配列数式やSUMIFS・COUNTIFSで対応するのが現実的です。
バージョンを問わず使えるSUMIFSとCOUNTIFSは、迷ったときの基本として覚えておくと安心です。
【操作のポイント】FILTER関数の結果はスピル(溢れ出し)形式で展開されます。結果が表示されるセル範囲に既存データがあるとエラーになるため、出力先には十分な空白セルを確保しておきましょう。
まとめ:エクセルで複数条件に一致するデータを抽出・検索・集計する方法
エクセルで複数条件に一致するデータを抽出・検索・集計するには、目的に応じた関数と機能の使い分けが大切です。
行全体の抽出にはFILTER関数、特定値の検索にはINDEX+MATCH、合計にはSUMIFS、カウントにはCOUNTIFSと、それぞれ得意領域が異なります。
AND条件はFILTERでは掛け算(*)、OR条件は足し算(+)で表現できるのが重要なポイントです。
複数シートの集計にはINDIRECT+SUMIFSやVSTACKが活躍し、用途に応じた使い分けが作業効率を大きく向上させるでしょう。
条件式の複数シート集計・複数条件の検索方法をマスターして、日々のデータ処理をよりスマートに進めてみてください。