Excelでテスト結果の最大値や最小値をパッと確認したいときはないでしょうか。
けど、そんな中で悩むことは、
・2番目・3番目に高い点数も知りたい
・「誰が」最高点なのか名前まで出したい
・欠席の0点を最小値と間違えたくない
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
完成イメージ
最大値や最小値を目で探していると、見落としや勘違いが起きやすく、件数が増えるほど大変になります。
今回は
・MAX・MIN・LARGE・SMALL・MAXIFSを使って最大値・最小値を自動で求める方法
をゴールにします。
「組ごとの最高点」や「欠席の0点を除いた最低点」まで、数式だけで出せるようになります。
なお、最高得点の氏名を出すINDEX/MATCHの使い方や、うまくいかないときの対処法(トラブルシュート)、VBAでまとめて求める方法もあわせてご紹介します。
早速実装して試してみましょう!

上の画像が完成形です。最大値・最小値・上位3位・下位3位・組ごとの最高点まで、数式だけで一覧にまとめています。
もくじ
STEP1. テスト結果表を用意する
まずは集計したいテスト結果表を用意します。
今回は10名分のテスト結果を使います。
A列が氏名、B列が組、C列が点数です。
山本さんは欠席のため、点数は0点になっています。
右側には、これから結果を書き出すための欄を用意しました。
この表から、最大値と最小値を求めていきましょう。

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。
| 氏名 | 組 | 点数 |
|---|---|---|
| 佐藤 | 1組 | 88 |
| 鈴木 | 1組 | 76 |
| 高橋 | 2組 | 92 |
| 田中 | 1組 | 65 |
| 伊藤 | 2組 | 79 |
| 渡辺 | 1組 | 95 |
| 山本 | 2組 | 0 |
| 中村 | 1組 | 84 |
| 小林 | 2組 | 92 |
| 加藤 | 2組 | 71 |
※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。
STEP2. MAX関数とMIN関数で最大値・最小値を求める
まずは基本のMAX関数とMIN関数です。
結果を出したいセルに、次のように入力します。
=MAX(C2:C11)(最大値)
=MIN(C2:C11)(最小値)
最高点は95点、最低点は0点になりました。
「あれ、0点?」と気づいた方はするどいです。
これは山本さんが欠席のためで、本当の最低点ではありません。
0を除いた最低点の求め方はSTEP6でご紹介します。
範囲を指定するだけなのでカンタンですね。

数式はどのセルに入れる?
セルを選んで数式バーに入力するだけです。
実際のMAX関数の入力画面がこちらです。
入力中は引数のヒントが表示されるので、順番を確認しながら進められます。

STEP3. LARGE関数とSMALL関数で上位・下位n番目を求める
「2番目に高い点数は?」「ワースト3は?」を知りたいときはLARGE関数とSMALL関数を使います。
LARGEは大きい方から数えてn番目、SMALLは小さい方から数えてn番目の値を返します。
順位は次のように指定します。
=LARGE(C2:C11,1)(1位)→ 95
=LARGE(C2:C11,2)(2位)→ 92
=LARGE(C2:C11,3)(3位)→ 92
=SMALL(C2:C11,1)(最下位)→ 0
=SMALL(C2:C11,2)(下から2番目)→ 65
=SMALL(C2:C11,3)(下から3番目)→ 71
2位と3位がどちらも92点で並んでいるのがわかります。
順位の数字を変えるだけで、上位何位でも取り出せるので便利ですね。
SMALLの1番目は0点(欠席)なので、こちらも0に引っ張られます。

LARGE関数の入力画面
LARGE関数も、数式バーから入力できます。
第2引数の「順位」に 2 を指定すると、大きい方から2番目の値が返ります。

STEP4. INDEX/MATCHで最高得点の氏名を求める
点数だけわかっても、「誰が」最高点なのか知りたいときがあります。
そんなときはINDEX関数とMATCH関数を組み合わせます。
=INDEX($A$2:$A$11, MATCH(MAX($C$2:$C$11), $C$2:$C$11, 0))
やっていることは2段階です。
まずMATCHで「最大値が上から何番目にあるか」を調べます。
その番号をINDEXに渡して、氏名の列から同じ位置の名前を取り出しています。
結果は渡辺になりました。
最高得点の人が自動で表示されるので、確認作業がぐっとラクになります。

STEP5. 条件付き(MAXIFS)で組ごとの最高点を求める
「1組の中での最高点」のように、条件を付けて最大値を出すときはMAXIFS関数を使います。
書き方は =MAXIFS(最大値を求める範囲, 条件の範囲, 条件) です。
=MAXIFS(C2:C11, B2:B11, “1組”) → 95
=MAXIFS(C2:C11, B2:B11, “2組”) → 92
1組は95点、2組は92点と、組ごとの最高点が一発で出ました。
条件に合うデータだけを見てくれるので、いちいち並べ替えをしなくて済みます。

STEP6. 0(欠席)を無視して最小値を求める
STEP2で見たとおり、MIN関数やSMALL関数は欠席の0点もいっしょに拾ってしまいます。
0を除いた本当の最低点を出したいときは、MINIFS関数に条件を付けます。
=MINIFS(C2:C11, C2:C11, “>0”)
「C2:C11の中で0より大きいもの」だけを対象にする、という意味です。
結果は65点(田中さん)になりました。
MINIFSが使えない古いExcelでは、=SMALL(C2:C11, COUNTIF(C2:C11,0)+1) でも同じ結果になります。
0の件数だけ順位をずらす、という考え方です。
欠席を0で入力している現場では、ぜひ覚えておきたいテクニックですね。

使う関数の比較
今回登場した関数を表にまとめました。
出したいものに合わせて選ぶと迷いません。
| 関数 | 求められるもの | 書式 |
|---|---|---|
| MAX | 範囲の最大値 | =MAX(範囲) |
| MIN | 範囲の最小値 | =MIN(範囲) |
| LARGE | 大きい方からn番目の値 | =LARGE(範囲, 順位) |
| SMALL | 小さい方からn番目の値 | =SMALL(範囲, 順位) |
| MAXIFS | 条件に合う最大値 | =MAXIFS(最大範囲, 条件範囲, 条件) |
| MINIFS | 条件に合う最小値 | =MINIFS(最小範囲, 条件範囲, 条件) |
| INDEX+MATCH | 最大値の行の氏名など | =INDEX(氏名列, MATCH(最大値, 点数列, 0)) |
「最大・最小だけ」ならMAX/MIN、
「2番目・3番目」ならLARGE/SMALL、
「組ごと」など条件付きならMAXIFS/MINIFSを使います。
欠席の0点を無視したいときは、MINIFS(範囲, 範囲, “>0”)がおすすめです。
VBAで最大値・最小値をまとめて求める
毎回セルに数式を入れるのが手間なときは、VBAでまとめて求めるのもおすすめです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。
Sub MaxMinSummary()
Dim rng As Range
Set rng = Range("C2:C11")
Range("F2").Value = Application.WorksheetFunction.Max(rng)
Range("F3").Value = Application.WorksheetFunction.Min(rng)
Range("F4").Value = Application.WorksheetFunction.Large(rng, 1)
Range("F5").Value = Application.WorksheetFunction.Large(rng, 2)
Range("I2").Value = Application.WorksheetFunction.Small(rng, 2)
End Sub
実行すると、点数列から最大値・最小値・上位・下位がまとめてセルに入ります。
ボタンに登録しておけば、クリック1つで最新の結果に更新できます。
SmallやLargeの第2引数に順位を渡せば、下位・上位も取り出せますよ。
数式を消したくないセルでは、表示用のセルに分けて書き出すのがおすすめです。
うまくいかないときの対処法(トラブルシュート)
実際に試すと、思ったようにいかないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。
| 症状 | 原因 | 対処 |
|---|---|---|
| 最小値が0になる | 欠席などで0点のデータが入っている | =MINIFS(範囲, 範囲, “>0”) で0を除く |
| 最大値が0になる | 点数が文字列として入力されている | C列を選択して数値に変換する/=VALUE()で数値化する |
| 同じ点数が複数ある | LARGE/SMALLの順位が重複する | 上位3位なら 1・2・3 と順位を変えて並べて出す |
| 氏名が別の人になる | INDEX/MATCHは最初に見つかった行を返す | 同点がある場合は並べ替えやRANK関数と組み合わせる |
| MAXIFSが#NAME? | Excelが古くMAXIFSに未対応 | =SUMPRODUCT(MAX((条件範囲=条件)*値範囲)) で代用する |
関数の説明
今回使う関数の概要です。
どれも集計の基本になるので、違いを押さえておきましょう。
MAX関数(マックス)
| 書式 | =MAX(数値1, [数値2], …) |
|---|---|
| できること | 指定した範囲の最大値を返します。 |
| 戻り値 | 最大値(数値) |
| こんなときに | 最高点や最高売上など、いちばん大きい値を知りたいとき。 |
| 注意 | 文字列や空白は無視しますが、0は値として扱われます。 |
=MAX(C2:C11)
MIN関数(ミン)
| 書式 | =MIN(数値1, [数値2], …) |
|---|---|
| できること | 指定した範囲の最小値を返します。 |
| 戻り値 | 最小値(数値) |
| こんなときに | 最低点や最低金額など、いちばん小さい値を知りたいとき。 |
| 注意 | 0が入っていると0を返します。0を除きたいときはMINIFSを使います。 |
=MIN(C2:C11)
LARGE関数(ラージ)
| 書式 | =LARGE(配列, 順位) |
|---|---|
| できること | 範囲の中で大きい方から数えて指定した順位の値を返します。 |
| 戻り値 | n番目に大きい値(数値) |
| こんなときに | 上位3位までなど、順位ごとの値を出したいとき。 |
| 注意 | 順位に範囲の件数より大きい数字を入れると #NUM! になります。 |
=LARGE(C2:C11, 2)
SMALL関数(スモール)
| 書式 | =SMALL(配列, 順位) |
|---|---|
| できること | 範囲の中で小さい方から数えて指定した順位の値を返します。 |
| 戻り値 | n番目に小さい値(数値) |
| こんなときに | ワースト3など、下位の値を出したいとき。 |
| 注意 | 1が最小値です。0も対象になる点に注意しましょう。 |
=SMALL(C2:C11, 2)
MAXIFS関数・MINIFS関数(マックスイフス/ミンイフス)
| 書式 | =MAXIFS(最大値を求める範囲, 条件の範囲1, 条件1, …) |
|---|---|
| できること | 条件に合うデータだけを対象に最大値/最小値を返します。 |
| 戻り値 | 条件に合う最大値/最小値(数値) |
| こんなときに | 組ごとの最高点など、条件付きの最大・最小を出したいとき。 |
| 注意 | Excel 2019以降で使えます。MINIFS(範囲,範囲,”>0″) で0を除けます。 |
=MAXIFS(C2:C11, B2:B11, "1組")
完成
最大値・最小値から上位3位、下位3位、組ごとの最高点まで、すべて数式で出せるようになりました。
思ったとおりに動きましたか?
目で探していた作業がなくなるので、確認ミスも減らせます。
点数を書き換えれば、結果は自動で最新に更新されますよ。

さいごに
いかがでしょうか。
今回は、
についてまとめました。
まずは今回のサンプル表で、ぜひ一度試してみてください。
最大・最小はMAXとMIN、順位ごとならLARGEとSMALL、条件付きならMAXIFSとMINIFSと使い分けてみてくださいね。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。
ぜひ試してみてください。







コメントを残す