「営業部だけの最高売上を知りたい」「東京支店の最大受注額は?」。条件を絞って最大値を調べたい場面、仕事でよく出てきますよね。
MAX関数なら範囲全体の最大値を出せます。でも部署別や期間別に絞り込むことはできません。
そんなときに使うのがMAXIFS関数です。この記事では基本の書き方から複数条件やワイルドカードの応用パターンまで解説します。「0になる」ときの対処法もカバーしています。
この記事では、次のサンプルデータを使って解説を進めます。
| A列(社員名) | B列(部署) | C列(月) | D列(売上) | |
|---|---|---|---|---|
| 2行目 | 田中 | 営業部 | 4月 | 850,000 |
| 3行目 | 鈴木 | 営業部 | 4月 | 620,000 |
| 4行目 | 佐藤 | 総務部 | 4月 | 480,000 |
| 5行目 | 高橋 | 営業部 | 5月 | 730,000 |
| 6行目 | 伊藤 | 総務部 | 5月 | 510,000 |
| 7行目 | 渡辺 | 営業部 | 5月 | 0 |
| 8行目 | 山本 | 総務部 | 6月 | 390,000 |
| 9行目 | 中村 | 営業部 | 6月 | 920,000 |
MAXIFS関数とは?読み方と基本の仕組み
MAXIFS関数は、条件を満たすデータだけに絞って最大値を返す関数です。
読み方は「マックスイフエス関数」です。MAX(最大値)+ IF(もし)+ S(複数形)で、「複数のもしで最大値を求める」という意味になっています。
サンプルデータで言えば、MAXIFS関数を使うと「営業部だけの最大売上」を一発で取り出せます。フィルターで絞り込んでからMAX関数を使う手間がなくなりますよ。
対応バージョンはExcel 2019以降とMicrosoft 365です。Excel Web AppおよびGoogleスプレッドシートでも同じ書き方で使えます。
NOTE
Excel 2016以前をお使いの場合は、配列数式 =MAX(IF(条件範囲=条件, 最大範囲)) をCtrl+Shift+Enterで入力する方法で代用できます。
| 入力 | 出力 |
|---|---|
| 最大値を求めたい範囲 + 条件(最大126組) | 条件を満たす行の中で一番大きい数値(1つ) |
MAXIFS関数の書き方(構文と引数)
基本構文
=MAXIFS(最大範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], ...)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 最大範囲 | 必須 | 最大値を求めたい数値が入っている範囲 |
| 条件範囲1 | 必須 | 1つ目の条件を判定する範囲 |
| 条件1 | 必須 | 1つ目の条件(例: “営業部”) |
| 条件範囲2 | 省略可 | 2つ目の条件を判定する範囲 |
| 条件2 | 省略可 | 2つ目の条件 |
条件のペア(条件範囲と条件)は最大126組まで追加できます。条件はすべてAND条件(かつ)で評価されます。
大事なポイントが2つあります。
- 最大範囲が第1引数にくること。SUMIFS関数と同じ順番です
- 最大範囲と条件範囲のサイズを揃えること。行数が異なると
#VALUE!エラーになります
MAXIFS関数の基本的な使い方
結論から言うと、最大範囲と条件のペアを指定するだけです。
サンプルデータで、営業部の最大売上を求める式はこちらです。
=MAXIFS(D2:D9, B2:B9, "営業部")
B列が「営業部」の行だけに絞り、D列の中で最大の数値を返します。結果は 920,000(中村の売上)です。
条件にはセル参照も使えます。F1セルに部署名を入力しておけば、ドロップダウンリストで切り替えられます。
=MAXIFS(D2:D9, B2:B9, F1)
F1の値を「営業部」から「総務部」に変えるだけで、結果が自動的に切り替わります。集計レポートを作るときに便利ですよ。
条件に比較演算子を使う
「売上が50万以上」のように数値条件を指定する場合は、比較演算子を文字列として渡します。
=MAXIFS(D2:D9, D2:D9, ">=500000")
使える比較演算子は次のとおりです。
| 演算子 | 意味 | 記述例 |
|---|---|---|
= | 等しい | "=100" |
<> | 等しくない | "<>0" |
> | より大きい | ">500000" |
>= | 以上 | ">=500000" |
< | より小さい | "<1000" |
<= | 以下 | "<=1000" |
セル参照と組み合わせる場合は、演算子とセルを & で結合します。
=MAXIFS(D2:D9, D2:D9, ">="&F1)
F1セルに基準値を入れておけば、後から自由に変更できます。
MAXIFS関数の実務活用パターン
基本の使い方がわかったところで、実務でよく使われる応用パターンを見ていきましょう。パターン3(日付の期間指定)のみ別の列構成で説明します。それ以外はサンプルデータを使って解説します。
パターン1: 複数条件で最大値を求める
「営業部」かつ「4月」のデータだけに絞って最大売上を求めます。条件のペアを追加するだけでOKです。
=MAXIFS(D2:D9, B2:B9, "営業部", C2:C9, "4月")
B列が「営業部」かつC列が「4月」の行だけを対象に、D列の最大値を返します。結果は 850,000(田中の売上)です。
3つ以上の条件も同じ要領で追加できます。条件範囲と条件のペアを続けて書くだけです。
パターン2: ワイルドカードで部分一致
社員名に「藤」を含む人だけを対象にしたいときは、ワイルドカード * を使います。
=MAXIFS(D2:D9, A2:A9, "*藤*")
「佐藤」と「伊藤」がマッチし、それぞれの売上480,000と510,000のうち最大値 510,000 を返します。
| ワイルドカード | 意味 | 使用例 |
|---|---|---|
* | 任意の文字列(0文字以上) | "藤" |
? | 任意の1文字 | "?月" |
? は1文字だけを表します。「?月」なら「4月」「5月」にはマッチしますが、「10月」にはマッチしません。
TIP
ワイルドカードの使い方はCOUNTIF関数やSUMIFS関数と共通です。条件付き関数をまとめて覚えると効率が良いですよ。
パターン3: 日付の期間指定で最大値を求める
「2025年4月1日から2025年6月30日まで」のように期間を絞って最大値を求める書き方です。ここでは日付データがA列、売上がB列に入っている場合を想定します。
=MAXIFS(B2:B100, A2:A100, ">="&DATE(2025,4,1), A2:A100, "<="&DATE(2025,6,30))
同じ条件範囲(A列)に対して「以上」と「以下」の2条件を指定します。これで期間の絞り込みができます。
DATE関数を使うと、日付の指定ミスを防げます。">=2025/4/1" と文字列で書くこともできますが、DATE関数のほうが確実です。
パターン4: 0以外の最大値を求める
データに0が混ざっていて、0を除外して最大値を求めたい場合です。サンプルデータでは渡辺の売上が0になっています。
=MAXIFS(D2:D9, D2:D9, "<>0")
最大範囲と条件範囲に同じ範囲を指定し、条件を "<>0" にします。0以外のデータだけを対象に最大値を返します。
TIP
MAXIFS関数では0があっても最大値に影響しないケースがほとんどです。この
"<>0"条件がとくに威力を発揮するのはMINIFS関数のほうです。「0を除いた最小値」を求めたいときにぜひ活用してみてください。
パターン5: INDEX+MAXIFS関数で最大値の行データを取得する
「営業部の最大売上はわかったけど、それは誰の売上?」というときに使うパターンです。
=INDEX(A2:A9, MATCH(MAXIFS(D2:D9, B2:B9, "営業部"), D2:D9, 0))
処理の流れはこうなります。
結果は 中村 です。ちょっとむずかしく見えますが、「最大値を求める → 位置を探す → 対応データを返す」の3ステップです。
よくあるエラーと対処法
MAXIFS関数で「思った結果が出ない」ときの原因と対処法を整理しました。
| 症状 | 原因 | 解決策 |
|---|---|---|
結果が 0 になる | 条件に一致するデータがない | 条件の文字列を確認(全角/半角、前後のスペース) |
結果が 0 になる | 数値に見える文字列が入っている | ISNUMBER関数で確認し、VALUE関数で変換 |
#VALUE! エラー | 範囲のサイズ不一致 | すべての範囲の行数を確認して揃える |
#NAME? エラー | Excel 2016以前で使用している | Excel 2019以降にアップグレード、または配列数式で代用 |
| 期待より小さい値が返る | 一部のデータが文字列で無視されている | 区切り位置機能またはVALUE関数で数値に変換 |
結果が「0」になるときの対処法
MAXIFS関数で一番多いトラブルがこれです。最初に確認するのは条件に一致するデータが本当にあるかです。
条件の文字列が全角/半角で違っていたり、前後に見えないスペースが入っていたりすることがあります。TRIM関数で空白を除去してから比較すると解決することが多いですよ。
次に疑うのは数値に見えて中身が文字列のケースです。CSVファイルの取り込み後に起きやすい問題です。
=ISNUMBER(D2)
TRUE なら数値、FALSE なら文字列です。文字列だった場合は、データタブの「区切り位置」機能で変換するか、VALUE関数を使って数値に変換してみてください。
#VALUE! エラーが出るとき
最大範囲と条件範囲の行数が合っていないときに出ます。たとえば最大範囲が D2:D9 なのに条件範囲が B2:B5 だと #VALUE! になります。
すべての範囲の開始行と終了行を揃えれば解決します。
似た関数との違い・使い分け
MAXIFS関数に関連する条件付き関数をまとめて比較します。
| 関数 | 機能 | 使い分けのポイント |
|---|---|---|
| MAX | 最大値を返す | 条件なしで全体の最大値を求めるとき |
| MAXIFS | 条件付きの最大値 | 部署別・月別など条件で絞りたいとき |
| MINIFS | 条件付きの最小値 | 条件を絞って最小値を求めたいとき |
| SUMIFS | 条件付きの合計 | 条件を絞って合計を求めたいとき |
| COUNTIFS | 条件付きの件数 | 条件を絞って件数を数えたいとき |
| AVERAGEIFS | 条件付きの平均 | 条件を絞って平均を求めたいとき |
| LARGE | N番目に大きい値 | 2位・3位の値を取得したいとき |
| SMALL | N番目に小さい値 | 下から数えたいとき |
MAX関数との違い
MAX関数は範囲全体から最大値を返します。条件指定はできません。「全体の最大値」ならMAX関数、「条件を絞った最大値」ならMAXIFS関数です。
=MAX(D2:D9)
=MAXIFS(D2:D9, B2:B9, "営業部")
上の式はD列全体の最大値、下の式は営業部だけの最大値です。使い分けはシンプルですよ。
MINIFS関数との違い
MINIFS関数は構文がMAXIFS関数と完全に同じで、方向が逆なだけです。
=MAXIFS(D2:D9, B2:B9, "営業部")
=MINIFS(D2:D9, B2:B9, "営業部")
営業部の「最大売上」と「最小売上」をセットで出すと、データの振れ幅がすぐにわかります。
SUMIFS関数との違い
SUMIFS関数は条件付きの「合計」を返す関数です。MAXIFS関数は条件付きの「最大値」を返します。
引数の構造は同じ(対象範囲が第1引数)なので、関数名を変えるだけで切り替えられます。
=SUMIFS(D2:D9, B2:B9, "営業部")
=MAXIFS(D2:D9, B2:B9, "営業部")
「営業部の売上合計」と「営業部の最大売上」を並べて比較すると、集計レポートの説得力が上がりますよ。
まとめ
- MAXIFS関数は条件を満たすデータだけに絞って最大値を返す関数
- 書き方は
=MAXIFS(最大範囲, 条件範囲1, 条件1, ...)で、条件は最大126組まで指定できる - 比較演算子(
>=、<>など)やワイルドカード(*、?)も使える - 日付の期間指定はDATE関数と組み合わせると確実
- 「0が返る」ときは条件の文字列確認とISNUMBER関数でデータ型をチェック
- 条件なしの最大値はMAX関数、条件付きの最小値はMINIFS関数を使う
- Excel 2019以降またはMicrosoft 365で利用可能
MAXIFS関数は条件付き集計関数の中でも使いどころが多い関数です。まずは =MAXIFS(範囲, 条件範囲, 条件) の基本形から試してみてください。MINIFS関数やSUMIFS関数もセットで覚えると、条件付きの集計がぐっと効率的になりますよ。
