「範囲の中でいちばん大きい・小さい値を知りたい」という場面では、MAX関数・MIN関数を使うのが一般的です。一方で、このサイトの記事でも紹介しているLARGE関数・SMALL関数も「大きい方・小さい方から順に値を取り出す」関数として似た用途で使われます。どちらも最大値・最小値がらみの関数ですが、実は空欄や文字列が混じったときの挙動がまったく異なり、この違いを知らないまま使うと「エラーにはならないのに集計結果が間違っている」という、原因に気づきにくいトラブルにつながります。この記事では両者の違いと、実務で安全に使うためのポイントを解説します。
MAX・MIN関数の基本構文
MAX関数は指定した範囲の中の最大値を、MIN関数は最小値を返す関数です。引数は範囲(または数値)だけで、LARGE・SMALLのように「何番目か」を指定する必要がありません。
例: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でよくあるエラー・トラブルと対処法
MAX・MINは、範囲内に数値が1つも見つからない場合、エラーではなく0を返します。LARGE・SMALLなら#NUM!エラーになる場面でも、MAX・MINは何事もなかったかのように0を返すため、集計ミスに気づきにくいのが厄介な点です。
対処法として、=IF(COUNT(範囲)=0, "データなし", MAX(範囲))のように、COUNT関数でデータ件数を先に確認してから結果を出す形にしておくと、0円なのか未入力なのかを見分けられます。
VLOOKUPやXLOOKUPの結果を集計している列など、範囲内に1つでもエラー値が含まれていると、MAX・MINの結果全体がそのエラー値になってしまいます。
対処法としては、AGGREGATE関数を使い=AGGREGATE(4, 6, B2:B31)(4はMAX相当、6はエラー値を無視するオプション)のようにするとエラー値を無視して集計できます。集計元の数式側にIFERRORを組み込み、そもそもエラーを表に出さないようにしておく方法も有効です。
「部署ごとの最高売上」「正社員だけの最長勤続年数」のように、条件を絞った上で最大値・最小値を求めたい場合、MAX・MIN単体では対応できません。
Excel 2019以降・Microsoft 365であれば、SUMIFSと同じ引数の並び方でMAXIFS・MINIFS関数が使えます。古いバージョンのExcelでは、配列数式として{=MAX(IF(部署範囲="営業部", 売上範囲))}をCtrl+Shift+Enterで確定する方法もありますが、可能であればMAXIFS・MINIFSを使ったほうが数式がシンプルで壊れにくくなります。
初心者がつまずきやすいポイントとコツ
- 0という結果を鵜呑みにしない。MAX・MINで0が返ってきたときは、「本当に最小値が0だったのか」「そもそもデータが入っていないのか」を一度疑う習慣をつけましょう。
- 単発の最大値・最小値ならMAX・MIN、順位付きの一覧ならLARGE・SMALL。作りたい表が「1つの値」なのか「複数件のランキング」なのかで、使う関数を最初に決めておくと数式選びで迷いません。
- 条件付きの最大値・最小値は素直にMAXIFS・MINIFSを使う。配列数式で無理に組もうとすると、後から見た人(未来の自分も含む)が理解しづらい数式になりがちです。
- エラー値が混ざりやすい範囲では、あらかじめIFERRORで防御しておく。MAX・MINをかける前の集計段階でエラーを潰しておけば、後工程の数式がシンプルに保てます。
まとめ
MAX・MIN関数は、範囲内の最大値・最小値をシンプルに1つだけ取り出せる基本の関数です。LARGE・SMALL関数と役割が重なる部分もありますが、「順位を指定できるか」「データが0件のときにエラーになるかどうか」という2点が大きな違いです。特にMAX・MINが空欄や文字列だけの範囲で黙って0を返す仕様は、エラー表示が出ない分だけ見逃しやすい落とし穴なので、COUNT関数などでデータの有無を確認する癖をつけておくと安心です。条件を絞った最大値・最小値が必要な場合は、配列数式に頼らずMAXIFS・MINIFSを使うことも覚えておきましょう。
よくある質問
関連記事
- LARGE・SMALL関数で上位・下位ランキングを抽出する方法|#NUM!エラーの原因と対処法
- RANK・RANK.EQ関数で売上や点数の順位をつける方法|同順位で順位が飛ぶ理由と対処法
- COUNTIFS関数で複数条件を数える方法|COUNTIFとの違いとよくあるエラー
- AVERAGEIF関数で条件付き平均を出す方法|SUMIFとの関係とよくあるエラー