「範囲の中でいちばん大きい・小さい値を知りたい」という場面では、MAX関数・MIN関数を使うのが一般的です。一方で、このサイトの記事でも紹介しているLARGE関数・SMALL関数も「大きい方・小さい方から順に値を取り出す」関数として似た用途で使われます。どちらも最大値・最小値がらみの関数ですが、実は空欄や文字列が混じったときの挙動がまったく異なり、この違いを知らないまま使うと「エラーにはならないのに集計結果が間違っている」という、原因に気づきにくいトラブルにつながります。この記事では両者の違いと、実務で安全に使うためのポイントを解説します。

MAX・MIN関数の基本構文

MAX関数は指定した範囲の中の最大値を、MIN関数は最小値を返す関数です。引数は範囲(または数値)だけで、LARGE・SMALLのように「何番目か」を指定する必要がありません。

=MAX(範囲) / =MIN(範囲)

例:B2:B31の日別売上のうち、最も売上が高かった日の金額を求める場合
=MAX(B2:B31)
最も売上が低かった日の金額を求める場合
=MIN(B2:B31)

「1位の値だけ」でよいのであれば、MAX・MINはLARGE(範囲,1)・SMALL(範囲,1)とまったく同じ結果になります。引数もシンプルなので、単純に最大値・最小値を知りたいだけの場面ではMAX・MINを使うのが素直な選択です。

LARGE・SMALLとの使い分け

MAX・MINとLARGE・SMALLは、どちらも「範囲内の大きい方・小さい方の値」を扱う点では共通していますが、求められる情報の幅が違います。

MAX・MIN関数

  • 範囲内の最大値・最小値を1つだけ返す
  • 「何番目か」は指定できない
  • データが0件だとエラーにならず0を返す

LARGE・SMALL関数

  • k番目に大きい・小さい値を指定して取り出せる
  • 1位・2位・3位のランキング表を作れる
  • kがデータ件数を超えると#NUM!エラーになる

「今月の最高売上・最低売上だけ知りたい」という単発の集計ならMAX・MINで十分ですが、「上位3件を一覧表にしたい」「下から2番目までチェックしたい」という場合はLARGE・SMALLの出番です。逆に言えば、LARGE・SMALLで k=1 だけを使う運用は、そのままMAXやMINに置き換えたほうが数式がシンプルになります。LARGE・SMALLの詳しい使い方や、RANK関数との関係については別記事「LARGE・SMALL関数で上位・下位ランキングを抽出する方法」でも解説しています。

実務でのよくある使用シーン

営業事務担当者であれば、日別・担当者別の売上一覧からMAX関数で「今月の最高売上額」を表の隅に自動表示させ、朝礼や月次報告の資料にそのまま使う、という使い方がよくあります。経理担当者であれば、経費精算の申請一覧からMAX関数で突出して金額の大きい申請を素早く見つけたり、逆にMIN関数で0円に近い(入力漏れの疑いがある)申請がないかをチェックしたりする場面があります。総務担当者であれば、勤続年数の一覧からMAX・MINで最も勤続年数が長い社員・短い社員を確認する、といった人事データの集計にも使われます。

MAX・MINでよくあるエラー・トラブルと対処法

エラーにならず0が返ってくる(空欄・文字列だけの範囲)

MAX・MINは、範囲内に数値が1つも見つからない場合、エラーではなく0を返します。LARGE・SMALLなら#NUM!エラーになる場面でも、MAX・MINは何事もなかったかのように0を返すため、集計ミスに気づきにくいのが厄介な点です。

例:まだ売上データが入力されていない来月分のB列に=MAX(B2:B31)を組んでおくと、実際には「データなし」なのに「最高売上0円」と表示されてしまう

対処法として、=IF(COUNT(範囲)=0, "データなし", MAX(範囲))のように、COUNT関数でデータ件数を先に確認してから結果を出す形にしておくと、0円なのか未入力なのかを見分けられます。

#N/A・#VALUE!エラー(範囲にエラー値が混ざっている)

VLOOKUPやXLOOKUPの結果を集計している列など、範囲内に1つでもエラー値が含まれていると、MAX・MINの結果全体がそのエラー値になってしまいます。

例:B2:B31にVLOOKUPの結果が並んでおり、そのうち1件が検索対象なしで#N/Aになっている場合、=MAX(B2:B31)自体も#N/Aになる

対処法としては、AGGREGATE関数を使い=AGGREGATE(4, 6, B2:B31)(4はMAX相当、6はエラー値を無視するオプション)のようにするとエラー値を無視して集計できます。集計元の数式側にIFERRORを組み込み、そもそもエラーを表に出さないようにしておく方法も有効です。

条件付きで最大値・最小値を求めたい場合に迷う

「部署ごとの最高売上」「正社員だけの最長勤続年数」のように、条件を絞った上で最大値・最小値を求めたい場合、MAX・MIN単体では対応できません。

例:営業部だけの最高売上を求めたい場合 → =MAXIFS(売上範囲, 部署範囲, "営業部")

Excel 2019以降・Microsoft 365であれば、SUMIFSと同じ引数の並び方でMAXIFS・MINIFS関数が使えます。古いバージョンのExcelでは、配列数式として{=MAX(IF(部署範囲="営業部", 売上範囲))}をCtrl+Shift+Enterで確定する方法もありますが、可能であればMAXIFS・MINIFSを使ったほうが数式がシンプルで壊れにくくなります。

初心者がつまずきやすいポイントとコツ

まとめ

MAX・MIN関数は、範囲内の最大値・最小値をシンプルに1つだけ取り出せる基本の関数です。LARGE・SMALL関数と役割が重なる部分もありますが、「順位を指定できるか」「データが0件のときにエラーになるかどうか」という2点が大きな違いです。特にMAX・MINが空欄や文字列だけの範囲で黙って0を返す仕様は、エラー表示が出ない分だけ見逃しやすい落とし穴なので、COUNT関数などでデータの有無を確認する癖をつけておくと安心です。条件を絞った最大値・最小値が必要な場合は、配列数式に頼らずMAXIFS・MINIFSを使うことも覚えておきましょう。

よくある質問

MAX関数の結果が0になってしまうのはなぜですか?
MAX・MIN関数は、指定した範囲に数値が1つも入っていない(すべて空欄、または文字列だけ)場合、エラーではなく0を返す仕様になっています。数式そのものは正しく組めていても、参照先の表がまだ未入力だったり、金額欄が文字列として入力されていたりすると、あたかも「最高額が0円」であるかのような結果になってしまいます。範囲内にCOUNT関数を組み合わせて、データ件数が0でないかを確認する一手間を入れると安全です。
範囲にエラー値が混ざっているとMAXも#N/Aになりますか?
はい。MAX・MIN関数は、参照範囲の中に#N/Aや#DIV/0!などのエラー値が1つでも含まれていると、結果全体がそのエラー値になってしまいます。VLOOKUPなどの結果を集計している範囲でよく発生します。対処法としては、AGGREGATE関数(第2引数でエラー値を無視するオプションを指定)を使うか、集計元の数式側にIFERRORを組み込んでエラーが表に出ないようにしておくと安定します。
MAX・MINとLARGE・SMALLはどちらを使えばいいですか?
「範囲の中でいちばん大きい・小さい値を1つだけ」知りたいならMAX・MINで十分です。「2位」「3位」まで含めた上位・下位のランキング表を作りたい場合や、何位まで見るかを後から調整したい場合はLARGE・SMALLが向いています。MAX(範囲)とLARGE(範囲,1)、MIN(範囲)とSMALL(範囲,1)はそれぞれ同じ結果になりますが、空欄範囲での挙動が異なる点には注意してください。

関連記事

→ MAX/MINの数式を作ってみる ← 記事一覧に戻る