「部署ごとの最高売上を出したいのに、MAX関数だと全体の最大値しか返ってこない」。スプレッドシートで集計していて、そんな場面に出会ったことはありませんか?
フィルターで絞ってから目で探す方法もありますが、データが増えるほど手間もミスも増えていきます。MAXIFSを使ってみたら結果が0になった、日付が46198のような数字で出た、とつまずく人も多いはず。
この記事では、GoogleスプレッドシートのMAXIFS関数を基本の書き方から複数条件・日付条件まで順に解説します。0になる原因やエラーの切り分け、MAX+FILTER・QUERYとの使い分けも、実際のシートで出た結果つきで紹介します。
対応バージョン: この記事はGoogleスプレッドシートのMAXIFSが対象。ExcelのMAXIFSはExcel 2019以降とMicrosoft 365で使え、Excel 2016にはありません。
スプレッドシートのMAXIFS関数とは?構文と基本の使い方
MAXIFSは、条件に合う行だけを対象にして最大値を返す関数です。結論から言うと、「営業部の最高売上」は次の1行で出せます。
=MAXIFS(D2:D9,A2:A9,"営業部")
結果は830,000です。読み方は「マックスイフス」。MAX(最大)+IF(条件)+S(複数形)を合わせた名前で、MAX関数に「条件」を足したものと考えるとわかりやすいでしょう。
基本構文と引数
=MAXIFS(最大値の範囲, 条件範囲1, 条件1, [条件範囲2, 条件2, ...])
| 引数 | 説明 | 上の式では |
|---|---|---|
| 最大値の範囲 | 最大値を探す数値の列 | D2:D9(売上) |
| 条件範囲1 | 条件を調べる列 | A2:A9(部署) |
| 条件1 | 文字列・数値・比較式など | “営業部” |
| 条件範囲2, 条件2… | 任意。すべてを満たす行が対象(AND) | ― |
先頭が「最大値を探す列」で、その後ろに「どの列を・どんな条件で」のペアが続く形です。条件を増やすときは、ペアを後ろに足していくだけ。
サンプルデータで部署ごとの最高売上を求める
ここからは次の表(A1:D9)を使って説明します。C列の日付は、DATE関数で入力した日付の値です。
| 行 | A:部署 | B:担当者 | C:日付 | D:売上 |
|---|---|---|---|---|
| 2 | 営業部 | 田中 | 2026/4/3 | 520,000 |
| 3 | 営業部 | 佐藤 | 2026/4/15 | 830,000 |
| 4 | 企画部 | 田村 | 2026/5/2 | 410,000 |
| 5 | 営業部 | 田中 | 2026/5/20 | 760,000 |
| 6 | 企画部 | 鈴木 | 2026/5/28 | 690,000 |
| 7 | 総務部 | 山田 | 2026/6/5 | 300,000 |
| 8 | 営業部 | 佐藤 | 2026/6/18 | 650,000 |
| 9 | 企画部 | 田村 | 2026/6/25 | 580,000 |
営業部は2・3・5・8行目の4件で、その中で一番大きい830,000が返ります。部署名を「企画部」に変えれば690,000、「総務部」なら300,000です。
IFS系関数は引数の並びが共通
MAXIFSの引数の並びは、SUMIFS・AVERAGEIFS・MINIFSと同じ。1つ覚えれば、ほかの関数にもそのまま応用できます。
| 関数 | 先頭の引数 | 返す値 |
|---|---|---|
| SUMIFS | 合計する範囲 | 合計 |
| AVERAGEIFS | 平均する範囲 | 平均 |
| MINIFS | 最小値の範囲 | 最小値 |
| MAXIFS | 最大値の範囲 | 最大値 |
| COUNTIFS | なし(条件範囲1から始まる) | 件数 |
2番目以降の「条件範囲と条件のペア」は、どの関数も共通です。COUNTIFSだけは件数を数えるため、先頭の対象範囲がありません。
複数条件・比較演算子・ワイルドカード・セル参照の書き方
部署×担当者・部署×期間のAND条件
条件範囲と条件のペアを足すと、すべてを満たす行だけが対象になります。営業部の田中さんの最高売上なら、次の式です。
=MAXIFS(D2:D9,A2:A9,"営業部",B2:B9,"田中")
結果は760,000。営業部かつ田中の行は520,000と760,000の2件で、大きいほうが返っています。
期間と組み合わせることもできます。「営業部で2026/5/1以降」の最高売上はこちら。
=MAXIFS(D2:D9,A2:A9,"営業部",C2:C9,">="&DATE(2026,5,1))
結果は760,000。4月の830,000は期間外なので、対象から外れました。条件のペアは3つ以上に増やしてもかまいません。
比較演算子とワイルドカード
数値の大小で絞るときは、演算子ごと二重引用符(”)で囲みます。最大値を探すD列を、そのまま条件範囲に使ってもOKです。
=MAXIFS(D2:D9,D2:D9,">=800000")
結果は830,000。80万以上の行が1件だけなので、その値が返ります。演算子は「>=(以上)」「<=(以下)」「>」「<」「<>(等しくない)」が使えます。
部分一致にはワイルドカードを使います。担当者列(B列)で試すと、「田*」(田で始まる)も「?中」(○中の2文字)も760,000でした。
「」や「?」そのものを探すときは、前に「~」を付けます。T1・T2に「AB」「AXB」、U1・U2に10と20を入れて比べた結果がこちら。
=MAXIFS(U1:U2,T1:T2,"A*B") → 20(*がワイルドカードとして働き、両方に一致)
=MAXIFS(U1:U2,T1:T2,"A~*B") → 10(「A*B」という文字列だけに一致)
条件をセル参照にする書き方
条件を式に直接書くより、セルに入れて参照したほうが使い回しやすくなります。演算子を付けるときは、演算子だけを二重引用符で囲み、「&」でセルとつなぐのがポイント。
J1に「営業部」を入れ、J2は空白のままにした例です。
| 式 | 意味 | 結果 |
|---|---|---|
=MAXIFS(D2:D9,A2:A9,"<>"&J1) | J1(営業部)以外 | 690,000 |
=MAXIFS(D2:D9,A2:A9,"<>"&J2) | J2が空白なので「空白以外のすべて」 | 830,000 |
=MAXIFS(D2:D9,A2:A9,J2) | 条件セルそのものが空白 | 0 |
J1を書き換えるだけで、集計対象が切り替わります。
気をつけたいのは条件セルが空白のとき。「”<>“&J2」は全体の最大値になり、「J2」だけだと0が返りました。
MAXIFSの日付条件で最新日・期間内の最大を出す
担当者ごとの最新日を出す
最大値の範囲に日付列を指定すると、条件に合う中で一番新しい日付が返ります。日付は中身が数値なので、「最大の日付=最新日」になるわけです。
=MAXIFS(C2:C9,B2:B9,"田村")
田村さんの行は2026/5/2と2026/6/25の2件。ところが結果のセルには「46198」と表示されました。これは2026/6/25を表す日付の値で、計算そのものは合っています。
日付として見せる方法は2つです。
- 結果のセルの表示形式を日付に変える → 2026/06/25
- TEXT関数で包む:
=TEXT(MAXIFS(C2:C9,B2:B9,"田村"),"yyyy/mm/dd")→ 2026/06/25
TEXTの結果は文字列になります。続けて日付の計算に使うなら、表示形式を変える方法が向いているでしょう。
期間内の最大を出す
「5月中の最高売上」のように期間で絞るときは、同じ日付列を2回指定します。「以上」と「より前」の2つの条件を組み合わせる形です。
=MAXIFS(D2:D9,C2:C9,">="&DATE(2026,5,1),C2:C9,"<"&DATE(2026,6,1))
結果は760,000。5月の行は410,000・760,000・690,000の3件です。
終わりを「翌月1日より前」にしておくと、月末が30日か31日かを気にせずに済みます。期間を変えるときも、DATEの月を書き換えるだけ。なお、">=2026/5/1"のように日付を文字で直接書いても条件として働きました。
日付が文字列だと一致しない/1899/12/30と表示される
日付条件でつまずきやすいのは、次の2つです。
1つ目は、日付が文字列として入っているケース。R1に="2026/07/01"(文字列)、S1に100を入れて試してみます。
=MAXIFS(S1:S1,R1:R1,">="&DATE(2026,6,1)) → 0
結果は0。見た目は日付でも、文字列のままでは日付条件に一致しません。ISTEXT関数でTRUEになるセルは文字列なので、日付として入力し直しましょう。
2つ目は、結果が「1899/12/30」と表示されるケースです。=MAXIFS(C2:C9,B2:B9,"高橋")のように一致する行がないと結果は0になり、日付の表示形式ではこの日付に見えます。
つまり1899/12/30は「該当なし」のサイン。次の章のIF+COUNTIFSで出し分けられます。
MAXIFSの結果が0になる・エラーになるときの切り分け
症状から原因を探す早見表
MAXIFSは、条件に一致する行が1つもないとエラーではなく0を返します。そのため「0=最大値が0」とは限りません。まずは症状から原因を絞り込みましょう。
| 症状 | 主な原因 | 確認すること |
|---|---|---|
| 0になる | 条件に一致する行がない | 条件の文字が表の値と同じか |
| 0になる | 条件セルが空白 | 参照している条件セルに値が入っているか |
| 0になる(日付では1899/12/30) | 日付が文字列で日付条件に一致しない | 日付列が日付として入っているか |
| 想定より小さい値 | 最大値の範囲の数字が文字列で無視されている | 数字が文字列になっていないか |
| 誤った値(エラーなし) | 範囲の開始行がずれている | 各範囲の開始行・終了行 |
| #VALUE! | 範囲の行数が違う | すべての範囲の行数 |
「想定より小さい値」の例も見ておきましょう。P1に="900000"(文字列)とP2に500000を入れ、Q1・Q2はどちらも「A」にします。
=MAXIFS(P1:P2,Q1:Q2,"A") → 500,000
文字列の900000は無視され、数値の500,000だけが対象になりました。
IF+COUNTIFSで「該当なし」を出し分ける
0が「本当の最大値」なのか「該当なし」なのかを区別したいときは、COUNTIFS関数で先に件数を数えます。
=IF(COUNTIFS(A2:A9,"人事部")=0,"該当なし",MAXIFS(D2:D9,A2:A9,"人事部"))
サンプルに人事部はないので、結果は「該当なし」。件数が1件以上あるときだけMAXIFSの結果が表示されます。
コツは、COUNTIFSとMAXIFSに同じ条件を書くこと。条件をセル参照にしておくと、両方を一度に書き換えられて食い違いを防げます。
#VALUE!と開始行のずれ
最大値の範囲と条件範囲の行数が違うと、#VALUE!エラーになります。一方、行数が同じで開始行だけずれていると、エラーにならずに誤った値が返ってきます。
=MAXIFS(D2:D10,A2:A9,"営業部") → #VALUE!(9行と8行で行数が違う)
=MAXIFS(D3:D10,A2:A9,"企画部") → 760,000(正しくは690,000)
2つ目の式は、企画部の行(4・6・9行目)を1行下のD列と照らし合わせています。拾われたのは5行目、営業部の田中さんの760,000です。
エラーが出ないぶん、こちらのほうが気づきにくいもの。すべての範囲の開始行と終了行が揃っているか確かめましょう。コピーして使う式は、$D$2:$D$9のような絶対参照にしておくと範囲がずれません。
スプレッドシートのMAXIFSまとめ・よくある質問
スプレッドシートのMAXIFSは、条件に合う行の中から最大値を1つ返す関数です。ポイントを振り返っておきましょう。
- 条件範囲と条件のペアを足すとAND条件になる
- 演算子付きの条件は
">="&DATE(2026,5,1)や"<>"&J1のように「&」でつなぐ - 日付列の最新日は数値で返るので、表示形式を日付にする
- 0は「該当なし」のことが多く、IF+COUNTIFSで出し分けられる
- 範囲の行数違いは#VALUE!、開始行のずれはエラーなしで誤った値になる
MAX+FILTERやQUERYとはどう使い分ける?
同じ「条件付きの最大値」でも、返り方が違います。
| 方法 | 式 | 結果 | 向いている場面 |
|---|---|---|---|
| MAXIFS | =MAXIFS(D2:D9,A2:A9,"営業部") | 830,000(一致なしは0) | 条件付きの最大値を1つ出す |
| MAX+FILTER | =MAX(FILTER(D2:D9,A2:A9="営業部")) | 830,000(一致なしは#N/A) | 該当なしをエラーで気づきたい |
| QUERY | =QUERY(A1:D9,"select A, max(D) group by A label max(D) '最大売上'",1) | 部署ごとの一覧 | 全部署の最大値を表で並べる |
QUERYは、企画部690,000・営業部830,000・総務部300,000を見出しつきの表で返しました。一方、MAXIFSの条件を配列にしても一覧にはなりません。次の式は830,000の1セルだけを返します。
=ARRAYFORMULA(MAXIFS(D2:D9,A2:A9,{"営業部";"企画部"}))
部署ごとの一覧ならQUERY関数、行の絞り込みならFILTER関数が向いています。2番目以降に大きい値はLARGE関数、上位の行を並べるならSORTN関数も候補です。
OR条件(企画部または総務部)はどう書く?
MAXIFSの複数条件はANDなので、OR条件は条件ごとにMAXIFSを作り、MAXでまとめます。
=MAX(MAXIFS(D2:D9,A2:A9,"企画部"),MAXIFS(D2:D9,A2:A9,"総務部"))
結果は690,000。企画部の最大690,000と総務部の最大300,000のうち、大きいほうが返ります。
最大値の行の担当者名を取るには?
MAXIFSは値を返すだけなので、担当者名はINDEX+MATCHかFILTERで取り出します。企画部の最高売上の担当者なら、どちらも結果は「鈴木」でした。
=INDEX(B2:B9,MATCH(MAXIFS(D2:D9,A2:A9,"企画部"),D2:D9,0))
=FILTER(B2:B9,A2:A9="企画部",D2:D9=MAXIFS(D2:D9,A2:A9,"企画部"))
同じ金額が複数の行にあるデータでは、意図した行が取れているか結果を確認してください。
ExcelのMAXIFSとの違いは?
書き方は同じ形です。一致なしなら0、範囲の大きさが違えば#VALUE!という点も変わりません。Excelでの使い方はExcelのMAXIFS関数の使い方で解説しています。
次のステップ
MAXIFSに慣れたら、引数の並びが同じIFS系の関数もあわせて覚えてみてください。

