エクセルで大量のデータを集計する際、「特定の条件に合うデータだけで最大値や最小値を知りたい」と感じた経験はないでしょうか。
たとえば商品別の最高売上、担当者ごとの最低単価、特定期間の中央値など、条件を絞り込んだ統計値を求める場面はビジネスの現場で非常に多くあります。
ExcelにはMAXIFS関数・MINIFS関数という条件付きの最大値・最小値を簡単に求められる関数が用意されており、中央値についてはMEDIAN関数とIF関数を組み合わせることで対応可能です。
この記事では、各関数の基本的な構文から複数条件の指定方法、配列数式を使った応用テクニックまで、実践的なサンプルを交えながらわかりやすく解説します。
この記事でわかること
・MAXIFS関数・MINIFS関数の基本構文と使い方
・複数条件を組み合わせた最大値・最小値の取得方法
・MEDIAN+IF関数(配列数式)で条件付き中央値を求める方法
・比較演算子やワイルドカードを使った応用テクニック
・MAXIFS・MINIFSが使えない旧バージョンでの代替方法
条件付き最大値・最小値・中央値を求める関数の全体像
Excelで条件を指定しながら統計値を求める関数には、大きく分けて3種類のアプローチがあります。
まず、MAXIFS関数は指定した条件に合う範囲の中から最大値を返す関数で、Excel 2019以降およびMicrosoft 365で利用可能です。
同様にMINIFS関数は条件に合う範囲の最小値を返します。
中央値については専用の条件付き関数が存在しないため、MEDIAN関数とIF関数を組み合わせた配列数式で対応します。
以下のサンプルデータを使って、この記事全体の解説を進めていきましょう。
| A列:商品名 | B列:担当者 | C列:売上金額(円) | D列:月 |
|---|---|---|---|
| 桜餅 | 田中 | 48000 | 3 |
| 柏餅 | 鈴木 | 63000 | 5 |
| マシュマロ | 田中 | 31000 | 5 |
| チョコ | 佐藤 | 75000 | 3 |
| アボカド | 鈴木 | 52000 | 3 |
| カボチャ | 田中 | 41000 | 10 |
| マグロ | 佐藤 | 88000 | 5 |
| カツオ | 鈴木 | 36000 | 10 |
| ハラス | 田中 | 57000 | 10 |
| ボルト | 佐藤 | 44000 | 3 |
1行目はヘッダー行で、データは2行目から11行目に入力されているものとします。
このデータを使って、担当者別・月別・商品別など様々な条件での集計方法を確認していきましょう。
| A:商品名 | B:担当者 | C:売上金額 | D:月 | F:数式入力セル |
| 桜餅 | 田中 | 48000 | 3 | =MAXIFS(C2:C11,B2:B11,”田中”) |
| 柏餅 | 鈴木 | 63000 | 5 | |
| マシュマロ | 田中 | 31000 | 5 | |
| チョコ | 佐藤 | 75000 | 3 |
▲ F2セルにMAXIFS関数を入力したイメージ。担当者「田中」の売上最大値を取得
上図のように、集計用のセルに直接MAXIFS関数を入力することで、特定の担当者の最大売上を瞬時に取得できます。
それでは各関数の詳細な使い方を順番に確認していきましょう。
【関数の選び方ポイント】
・最大値を条件付きで求めたい → MAXIFS関数
・最小値を条件付きで求めたい → MINIFS関数
・中央値を条件付きで求めたい → MEDIAN+IF(配列数式)
・Excel 2016以前を使用している → MAX+IF(配列数式)で代替
MAXIFS関数の使い方|条件付き最大値をシンプルに求める
MAXIFS関数の基本構文
MAXIFS関数の基本的な構文は以下のとおりです。
=MAXIFS(最大範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], …)
・最大範囲:最大値を求めたい数値が入っている範囲
・条件範囲1:条件を判定する範囲
・条件1:絞り込む条件の値または文字列
・条件範囲2以降は省略可能(最大127組まで指定可能)
引数の順番はSUMIFS関数と同じ形式になっており、複数の関数を使い慣れている方にとっては直感的に理解しやすい構造といえるでしょう。
最大範囲と条件範囲は必ず同じ行数・列数の範囲を指定する必要があります。
サイズが異なると#VALUE!エラーが発生しますので注意が必要です。
1つの条件で最大値を求める基本的な使い方
サンプルデータから「担当者が田中の売上の最大値」を求めてみましょう。
=MAXIFS(C2:C11,B2:B11,”田中”)
→ 結果:57000(ハラスの売上)
C2:C11が最大値を求めたい売上金額の範囲、B2:B11が担当者名の入った条件範囲、”田中”が絞り込む条件です。
担当者列に「田中」が含まれる行(桜餅48000、マシュマロ31000、カボチャ41000、ハラス57000)の中で最も大きい57000が返ります。
条件に文字列を直接入力する場合はダブルクォーテーションで囲む必要があることを覚えておきましょう。
セル参照を使った条件指定と数式のコピー
担当者ごとの最大値を一覧表にしたい場合は、条件をセル参照にすることで数式をオートフィルで引っ張ることができます。
たとえばF2セルに担当者名「田中」、F3に「鈴木」、F4に「佐藤」と入力し、G2セルに以下の数式を入力します。
=MAXIFS($C$2:$C$11,$B$2:$B$11,F2)
ここで最大範囲と条件範囲は絶対参照($マーク)にしておくことが重要です。
こうすることでG2の数式をG3、G4へオートフィルでコピーしても範囲がずれることなく、各担当者の最大値を正しく取得できます。
| F列:担当者 | G列:数式 | G列:結果 | |
| 1 | 担当者 | 最大売上 | |
| 2 | 田中 | =MAXIFS($C$2:$C$11,$B$2:$B$11,F2) | 57000 |
| 3 | 鈴木 | =MAXIFS($C$2:$C$11,$B$2:$B$11,F3) | 63000 |
| 4 | 佐藤 | =MAXIFS($C$2:$C$11,$B$2:$B$11,F4) | 88000 |
▲ G2に数式を入力後、G3・G4へオートフィルすることで担当者別の最大値を一括取得
オートフィルを活用することで数式を何度も入力し直す手間が省け、担当者が増えた場合にも素早く対応できます。
【MAXIFS関数のポイント】
条件範囲と最大範囲は必ず同じサイズで指定しましょう。セル参照で条件を指定する場合は、最大範囲・条件範囲を絶対参照にしてオートフィルに備えることが作業効率アップのコツです。条件に合うデータが存在しない場合はMAXIFSは0を返すため、結果が0になっていたら条件指定を見直してみましょう。
MINIFS関数の使い方|条件を絞って最小値を取り出す
MINIFS関数の基本構文
MINIFS関数はMAXIFS関数と対になる関数で、条件に合うデータの中から最小値を返します。
=MINIFS(最小範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], …)
・最小範囲:最小値を求めたい数値の範囲
・条件範囲1:条件を判定する範囲
・条件1:絞り込む条件の値または文字列
構文はMAXIFSと完全に同じで、「最大」が「最小」に変わるだけです。
そのため、MAXIFS関数を理解していればMINIFS関数もほぼ同じ感覚で使いこなせるでしょう。
1つの条件で最小値を求める
サンプルデータから「担当者が鈴木の売上の最小値」を求めてみます。
=MINIFS(C2:C11,B2:B11,”鈴木”)
→ 結果:36000(カツオの売上)
鈴木担当の行は柏餅63000、アボカド52000、カツオ36000の3件で、その中の最小値36000が返ります。
MINIFS関数も条件に合うデータがない場合は0を返す点に注意が必要です。
0と実際の最小値0を区別したい場合はCOUNTIFS関数を組み合わせてデータの有無を確認するとよいでしょう。
比較演算子を使った数値条件での最小値
条件に比較演算子を組み合わせることで「売上が50000円以上の行の中での最小値」なども求められます。
=MINIFS(C2:C11,C2:C11,”>=50000″)
→ 結果:52000(アボカドの売上)
比較演算子を使う場合は“>=50000″のように文字列として指定します。
セル参照と組み合わせる場合は =”>=”&H2 のように &(アンパサンド)でつなぐ形になります。
使える比較演算子は >(より大きい)、<(より小さい)、>=(以上)、<=(以下)、<>(等しくない)の5種類です。
ワイルドカードを使った部分一致条件
条件にワイルドカードを使うと、文字列の一部が一致するデータを対象にできます。
・*(アスタリスク):任意の文字列に一致
・?(クエスチョンマーク):任意の1文字に一致
例:=MINIFS(C2:C11,A2:A11,”*チョコ*”) → 「チョコ」を含む商品の最小売上
たとえば商品名に「マ」で始まるものを絞り込みたい場合は条件を “マ*” とすれば、マシュマロとマグロが対象になります。
部分一致検索はデータの入力揺れがある現場では特に重宝するテクニックといえるでしょう。
【MINIFS関数のポイント】
比較演算子を条件に使う場合は必ずダブルクォーテーションで全体を囲むことを忘れずに。セル参照の値と比較する場合は “<=”&H2 のように文字列結合で記述します。ワイルドカードを活用すると部分一致での絞り込みも自在に行えます。
複数条件でMAXIFS・MINIFSを使う応用テクニック
2つの条件を組み合わせた最大値・最小値
MAXIFS・MINIFS関数の強みは複数条件を同時に指定できる点にあります。
「担当者が田中、かつ月が10月の売上の最大値」を求めるには以下のようにします。
=MAXIFS(C2:C11,B2:B11,”田中”,D2:D11,10)
→ 結果:57000(ハラスの売上)
複数の条件範囲・条件をカンマで区切って並べるだけで、AND条件(両方の条件を満たす)の最大値が取得できます。
数値条件の場合はダブルクォーテーションなしで直接数値を指定します。
田中かつ10月に該当する行はハラス57000のみですが、もし複数行あれば自動的にその中の最大値が返ります。
日付を条件に指定する方法
日付列を条件範囲にする場合も比較演算子が活躍します。
=MAXIFS(C2:C11,D2:D11,”>=5″)
→ 5月以降の月の行の中で売上が最大のものを返す
実際の日付型データの場合:=MAXIFS(C2:C11,D2:D11,”>=”&DATE(2024,4,1))
実際の業務データでは日付がシリアル値として扱われるため、DATE関数と&で結合した形での条件指定が確実です。
月単位で集計するならMONTH関数で月番号を抽出した列を別途用意し、それを条件範囲にするとシンプルに記述できます。
3つ以上の条件を使った高度な絞り込み
条件は最大127組まで設定できるため、実務で必要な複雑な絞り込みにも対応できます。
=MAXIFS(C2:C11,B2:B11,”鈴木”,D2:D11,”<>10″,C2:C11,”>=40000″)
→ 鈴木担当、10月以外、売上40000以上の中での最大値
このように複数条件を組み合わせることで非常に細かい集計が実現できます。
ただし条件が増えるほど数式が長くなるため、条件をセル参照に切り出すと後から修正しやすくなります。
【複数条件MAXIFSのポイント】
複数条件はすべてAND(かつ)条件として処理されます。OR条件(どちらかを満たす)を実現したい場合は、それぞれ別にMAXIFS関数を計算してMAX関数でまとめる方法が有効です。例:=MAX(MAXIFS(…,”田中”),MAXIFS(…,”鈴木”))のような形で記述します。
MEDIAN+IF関数で条件付き中央値を求める方法
条件付き中央値に専用関数がない理由と対処法
ExcelにはSUMIFS、AVERAGEIFS、MAXIFS、MINIFSと多くの条件付き集計関数が存在しますが、MEDIANIFSという関数は現時点で用意されていません。
そのため条件付きの中央値を求めるには、MEDIAN関数とIF関数を組み合わせた配列数式を使う必要があります。
配列数式とは通常の数式とは異なり、複数のセルの値を一括処理できる特殊な入力形式です。
MEDIAN+IF配列数式の基本的な書き方
「担当者が佐藤の売上の中央値」を求める数式は以下のとおりです。
=MEDIAN(IF(B2:B11=”佐藤”,C2:C11))
入力後に Ctrl+Shift+Enter で確定(配列数式として確定)
→ 結果:{=MEDIAN(IF(B2:B11=”佐藤”,C2:C11))} ← {}が自動的につく
→ 数値:75000(チョコ75000、マグロ88000、ボルト44000の中央値)
通常のEnterではなくCtrl+Shift+Enterの3キー同時押しで確定することが非常に重要です。
正しく入力されると数式バーに波括弧{}が表示されます。この{}は手入力するものではなく自動で付与されます。
なおMicrosoft 365や最新のExcel 2021以降では、一部の関数が動的配列に対応しているため通常のEnterで確定できる場合もあります。
複数条件を使った条件付き中央値
IF関数の論理式に複数条件を加えるには、各条件を括弧で囲んで掛け算(×)でつなぎます。
=MEDIAN(IF((B2:B11=”田中”)*(D2:D11<>5),C2:C11))
Ctrl+Shift+Enterで確定
→ 田中担当、かつ5月以外の行の売上の中央値
条件が1になる(真)行だけを積み上げた結果が1になるため、AND条件として機能します。
OR条件にしたい場合は掛け算ではなく足し算(+)でつなぐと実現できます。
MEDIAN関数はIF関数がFALSEを返した部分(対象外のセル)を自動的に無視するため、正確な中央値が算出されます。
{=MEDIAN(IF(B2:B11=”佐藤”,C2:C11))}
← {}は Ctrl+Shift+Enter で確定すると自動付与
| F列:集計項目 | G列:数式・結果 | |
| 1 | 集計項目 | 結果 |
| 2 | 佐藤の売上最大値 | 88000 |
| 3 | 佐藤の売上最小値 | 44000 |
| 4 | 佐藤の売上中央値 | {=MEDIAN(IF(B2:B11=”佐藤”,C2:C11))} → 75000 |
▲ 配列数式として入力された中央値の数式。{}が数式バーに表示されている状態
このように同じ担当者の最大値・最小値・中央値を並べて集計することで、データの分布傾向を一目で把握できます。
【MEDIAN+IF配列数式のポイント】
配列数式は必ずCtrl+Shift+Enterで確定することが大前提です。通常のEnterで確定すると正しい結果が返りません。数式を編集する際も同じく3キーで確定し直す必要があります。Microsoft 365最新版ではEnterのみでも動的配列として機能する場合がありますが、互換性を考慮するなら3キー確定を習慣にしておくのが安全といえるでしょう。
Excel 2016以前で使えるMAX+IF・MIN+IFの代替方法
MAXIFS・MINIFSが使えない旧バージョンへの対応
MAXIFS・MINIFS関数はExcel 2019およびMicrosoft 365から搭載されたため、Excel 2016以前のバージョンでは利用できません。
旧バージョンで条件付き最大値・最小値を求めるには、MAX関数やMIN関数とIF関数を組み合わせた配列数式を使います。
条件付き最大値(旧バージョン対応):
=MAX(IF(B2:B11=”田中”,C2:C11))
※ Ctrl+Shift+Enterで確定
条件付き最小値(旧バージョン対応):
=MIN(IF(B2:B11=”田中”,C2:C11))
※ Ctrl+Shift+Enterで確定
MEDIAN+IFの配列数式と同様に、こちらもCtrl+Shift+Enterによる配列数式の確定が必須です。
現在Excel 2019以降を使っているならMAXIFS・MINIFSを使うほうがシンプルですが、ファイルを旧バージョン利用者と共有する場合はこの代替方法を知っておくと役立ちます。
AGGREGATE関数を使った別のアプローチ
Excel 2010以降で使えるAGGREGATE関数も、エラー値や非表示行を除外した集計が可能で最大値・最小値の取得にも活用できます。
=AGGREGATE(14, 6, C2:C11*(B2:B11=”田中”), 1)
・第1引数14:LARGE関数(降順でk番目の値)
・第2引数6:エラー値を無視
・第3引数:配列で条件に合う値を掛け算で抽出
・第4引数1:1番目、つまり最大値
AGGREGATE関数はエラーを含むデータでも安全に集計できるメリットがありますが、数式が複雑になるため日常的にはMAXIFS関数を使うほうが読みやすいでしょう。
【旧バージョン対応のポイント】
MAX(IF(…))やMIN(IF(…))の配列数式はExcel 2007以降ならすべて利用できます。ファイルの共有先がどのExcelバージョンを使用しているか確認した上で、適切な数式を選択するようにしましょう。バージョンが混在する環境では配列数式ベースの書き方を標準にしておくと安心です。
MAXIFS・MINIFS使用時によくあるエラーと対処法
#VALUE!エラーの原因と対処
MAXIFS・MINIFS関数で最もよく発生するエラーが#VALUE!エラーです。
主な原因は「最大範囲と条件範囲のサイズが一致していない」ことで、たとえばC2:C11(10行)とB2:B10(9行)のようにサイズが違う場合に発生します。
対処法はシンプルで、すべての範囲が同じ行数・列数になっているかを確認するだけです。
また条件の文字列を囲むダブルクォーテーションが全角になっている場合もエラーの原因になります。
0が返ってくる場合のチェックポイント
条件に合うデータがない場合、MAXIFS・MINIFS関数は0を返します。
「なぜか0になる」というケースでよくある原因として以下が挙げられます。
まず条件の文字列に不要なスペースが含まれている可能性です。セルに見た目上「田中」と書いてあっても、実際には「田中 」(末尾スペース)となっている場合は条件が一致しません。
次に数値として入力すべきところが文字列として入っているパターンです。D列の月が「3」(数値)ではなく「3」(文字列)として入力されているとD2:D11,3という条件には引っかかりません。
TRIM関数やVALUE関数でデータをクリーンアップしてから集計することで解決できます。
条件付き最大値・最小値が正しく取れない場合の確認手順
数式は入力できているが結果がおかしいという場合は、以下の順番で確認してみましょう。
まずCOUNTIFS関数で同じ条件を使って該当件数を確認します。
=COUNTIFS(B2:B11,”田中”) → 担当者田中の行数を確認
結果が0なら条件が一致していないことが原因
次にSUMIFSで同じ範囲・条件の合計を確認し、集計対象の行が正しく選ばれているかを検証します。
段階的に確認することで問題の切り分けがしやすくなります。
【エラー対処のポイント】
MAXIFS・MINIFSが0を返す場合は、まずCOUNTIFS関数で条件一致件数を確認しましょう。件数が0なら条件文字列のスペースや全角・半角の不一致が原因である可能性が高いです。TRIM関数で前後のスペースを除去してから再試行すると多くの場合解決します。
まとめ:エクセルで条件付き最大値・最小値・中央値を使いこなすコツ
この記事では、エクセルで条件付きの最大値・最小値・中央値を求める方法をMAXIFS関数・MINIFS関数・MEDIAN+IF配列数式を中心に解説しました。
MAXIFS関数とMINIFS関数はExcel 2019以降で使える非常に強力な関数で、SUMIFSと同じ感覚で複数条件の最大値・最小値を求められます。
条件付きの最小値を特定の月や担当者で絞り込みたい場合もMINIFS関数一本でシンプルに対応できます。
MEDIAN関数には条件付き専用関数がないため、MEDIAN+IF配列数式(Ctrl+Shift+Enter)というアプローチが必須ですが、理解してしまえば非常に応用の利くテクニックです。
旧バージョンのExcelを使う環境ではMAX+IF・MIN+IFの配列数式で代替できることも覚えておくと、ファイルを共有する際も安心して運用できるでしょう。
条件付き最大値・最小値・中央値をMAXIFS・MINIFS・条件式と組み合わせて使いこなすことで、データ分析の精度と速度が格段に向上します。
ぜひ今回のサンプルデータを参考に、実際の業務データで各関数を試してみてください。