【Excel】売上トップを瞬時に特定!最大値の行を丸ごと取り出す5関数テクニック
「売上トップの担当者は誰か」「最高スコアはどの行か」——この情報を取り出すのに、何セルも数式を書いていませんか?実は 数式1行で最大値の行を丸ごと取得 できます。本記事では、古典的な3関数ネスト(INDEX・MATCH・MAX)とモダンな2関数構成(SORT・TAKE)を比較しながら、使い分けの判断基準までをわかりやすく解説します。
📌 本記事はLookupシリーズの一環です。最大値にまつわる情報取得に特化して解説します。
この記事で学べること
- MAX・MATCH・INDEX:バージョンを問わず動く定番の組み合わせ
- SORT・TAKE:Excel 365 / 2021以降で使えるモダンな1行アプローチ
- 列数が多い実務データへの対応方法と、2つのアプローチの使い分け基準
サンプルデータの確認
以下の売上データを使って解説します。
| A列(担当者) | B列(売上) |
|---|---|
| 山田 | 320,000 |
| 佐藤 | 450,000 |
| 鈴木 | 280,000 |
| 田中 | 510,000 |
| 高橋 | 390,000 |
目標:売上が最も高い担当者の名前と金額を取得する
古典的アプローチ:INDEX + MATCH + MAX
① MAX関数で最大値を取得する
=MAX(B2:B6)
結果:510,000(田中さんの売上)
② MATCH関数で最大値の位置を特定する
=MATCH(MAX(B2:B6), B2:B6, 0)
- 第1引数:検索値(MAXの結果)
- 第2引数:検索範囲
- 第3引数:
0=完全一致
結果:4(B2:B6の中で4番目 → 田中さんの行)
③ INDEX関数で担当者名を取り出す
=INDEX(A2:A6, MATCH(MAX(B2:B6), B2:B6, 0))
結果:田中
この INDEX + MATCH + MAX の組み合わせは Excel 2010以降であれば動作する鉄板テクニック です。ただし、複数列から情報を取りたい場合は列ごとに数式を用意する必要があります。列数が多いデータへの対応に少し手間がかかる点が弱点です。
モダンアプローチ:SORT + TAKE
INDEX + MATCH + MAXは列ごとに数式が必要でしたが、SORT + TAKEを使えば複数列の情報を1つの数式でまとめて取得できます。Excel 365 / 2021以降をお使いの方はこちらがおすすめです。
① SORT関数でデータを降順に並べ替える
=SORT(A2:B6, 2, -1)
- 第1引数:並べ替え対象の範囲
- 第2引数:
2(2列目=売上列を基準) - 第3引数:
-1(降順)
結果(スピル出力):
田中 510,000 佐藤 450,000 高橋 390,000 山田 320,000 鈴木 280,000
② TAKE関数で先頭行だけ取り出す
TAKE関数 は配列の先頭・末尾から指定した行数・列数を切り出す関数です。
=TAKE(SORT(A2:B6, 2, -1), 1)
- 第1引数:対象の配列(SOURTの結果)
- 第2引数:
1(先頭1行を取得)
結果:田中 510,000(1行2列の配列)
これだけで最大値を持つ行の全情報を取り出せます。特定の列だけ欲しい場合は第3引数で列数を指定します。
※担当者名だけ取得したい場合:
=TAKE(SORT(A2:B6, 2, -1), 1, 1)
※売上金額だけ取得したい場合:
=TAKE(SORT(A2:B6, 2, -1), 1, 2)
なお、TAKE関数の第2・第3引数に 負の値を指定すると末尾からの取得 になります(例:-1で最後の1行)。最小値行の取得など応用の幅が広いため、詳細は別記事で改めて解説予定です。
実務シナリオ:複数列データへの対応
実際の業務では列数がもっと多いケースがほとんどです。
| 担当者 | 地区 | 月 | 売上 |
|---|---|---|---|
| 山田 | 東京 | 4月 | 320,000 |
| 佐藤 | 大阪 | 4月 | 450,000 |
| 田中 | 名古屋 | 4月 | 510,000 |
SORT + TAKEであれば、列数が増えても数式の構造は変わりません。
=TAKE(SORT(A2:D4, 4, -1), 1)
結果:田中 名古屋 4月 510,000(1行4列)
一方、INDEX + MATCH + MAXで同じ情報を得るには、担当者・地区・月・売上それぞれに数式を書く必要があります。列数が多いほどSORT + TAKEのアドバンテージは大きくなります。
同率最大値(同点1位)が複数ある場合の注意点
両アプローチとも、同率で最大値が複数ある場合はデータ上で最初に登場する1件のみが返ります。実務では「同点の全員を取得したい」というニーズも少なくありません。
その場合は FILTER関数 との組み合わせが有効です。
=FILTER(A2:B6, B2:B6=MAX(B2:B6))
これで最大値に一致するすべての行を取り出せます。FILTER関数を使った複数条件・複数結果の取得については、次回のLookupシリーズで詳しく解説します。
2つのアプローチ比較まとめ
| 観点 | INDEX+MATCH+MAX | SORT+TAKE |
|---|---|---|
| 対応バージョン | Excel 2010以降 | Excel 365 / 2021以降 |
| 複数列への対応 | 列ごとに数式が必要 | 1つの数式で対応可 |
| 直感のしやすさ | やや複雑 | シンプル |
| 同率最大値の扱い | 最初の1件のみ | 最初の1件のみ |
| 全同率取得 | FILTER併用が必要 | FILTER併用が必要 |
まとめ:どちらを使うべきか
- INDEX + MATCH + MAX:Excel 2019以前の環境や、1〜2列のシンプルな参照に最適。汎用性が高く、どの職場でも通じる定番スキル
- SORT + TAKE:Excel 365 / 2021以降の環境で、複数列をまとめて取り出したいときに圧倒的に便利。数式がシンプルで保守しやすい
使い分けの基準は「Excelのバージョン」と「取得したい列の数」です。まず自分の環境を確認し、使えるならSORT + TAKEを積極的に活用することをおすすめします。
ぜひ手元のデータで試してみてください!
次回のLookupシリーズでは、FILTER関数を使った「複数条件・同率最大値」への対応を解説予定です。お楽しみに。