スプレッドシートのMAXIFS関数の使い方|複数条件・日付・0になる原因

スポンサーリンク

「部署ごとの最高売上を出したいのに、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/3520,000
3営業部佐藤2026/4/15830,000
4企画部田村2026/5/2410,000
5営業部田中2026/5/20760,000
6企画部鈴木2026/5/28690,000
7総務部山田2026/6/5300,000
8営業部佐藤2026/6/18650,000
9企画部田村2026/6/25580,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系の関数もあわせて覚えてみてください。

タイトルとURLをコピーしました