【Excel】エクセルで最大値のセルを抽出する方法(INDEX・MATCH組み合わせ・該当データ取得)
エクセルで最大値を求めることはMAX関数で簡単にできますが、「最大値がどのセルにあるのか」「最大値に対応するラベルや項目名を取得したい」という場面では、もう一歩踏み込んだ操作が必要になります。
そこで活躍するのが、INDEX関数とMATCH関数の組み合わせです。
この2つの関数を組み合わせることで、最大値が存在するセルの位置を特定し、対応するデータを自動で取得することが可能になります。
この記事では、INDEX・MATCH関数の基本から、最大値セルの抽出方法、該当データの取得テクニックまで、ステップバイステップで解説していきます。
INDEX・MATCH関数の組み合わせで最大値セルを抽出する基本
それではまず、INDEX関数とMATCH関数それぞれの役割と、最大値セルを抽出するための基本的な組み合わせ方について解説していきます。
この組み合わせはエクセルの中でも特に強力なテクニックのひとつとして、多くのエクセルユーザーに活用されています。
MATCH関数で最大値の位置を特定する
MATCH関数は、指定した値が範囲内の何番目にあるかを返す関数です。
=MATCH(検索値, 検索範囲, 照合の型)
照合の型:0(完全一致)、1(以下の最大値)、-1(以上の最小値)
例:=MATCH(MAX(A1:A10), A1:A10, 0) → 最大値が何番目にあるかを返す
この数式はまずMAX関数で最大値を求め、その値がA1:A10の何番目にあるかをMATCH関数で特定します。
照合の型は必ず0(完全一致)を指定することが重要です。
INDEX関数で最大値に対応するデータを取得する
INDEX関数は、指定した範囲の中で、行番号・列番号に対応するセルの値を返す関数です。
=INDEX(範囲, 行番号, [列番号])
例:=INDEX(B1:B10, 3) → B1:B10の3行目の値を返す
MATCH関数の結果(最大値の位置)をINDEXの行番号として渡すことで、最大値に対応する別列のデータを取得できます。
INDEX・MATCHを組み合わせた完成形
2つを組み合わせると、最大値に対応するデータを一発で取得できる数式が完成します。
例:A列に「担当者名」、B列に「売上」が入っており、最高売上者の名前を取得する場合
=INDEX(A2:A10, MATCH(MAX(B2:B10), B2:B10, 0))
→ B列の最大値(最高売上)に対応するA列の担当者名を返す
この数式はVLOOKUPでは逆方向の参照ができない場合にも有効で、非常に汎用性が高いテクニックです。
最大値セルの行番号・列番号を取得する方法
続いては、最大値が存在するセルの行番号・列番号そのものを取得する方法を確認していきます。
データの場所を特定することで、後続の処理や参照に役立てることができます。
ROW関数とMATCHで最大値の行番号を取得する
最大値が何行目にあるかを数値で取得するには、MATCH関数にオフセットを加えた計算をします。
例:B2:B10の中の最大値が何行目(シート上)にあるかを返す場合
=MATCH(MAX(B2:B10), B2:B10, 0) + 1
(MATCHは範囲内の相対位置を返すため、開始行-1を加算して絶対行番号に変換)
ROW関数の参照開始行を考慮した計算が正確な行番号取得のポイントです。
ADDRESS関数でセルアドレスを文字列として取得する
最大値セルのアドレス(例:B5)を文字列として取得したい場合は、ADDRESS関数を組み合わせます。
=ADDRESS(MATCH(MAX(B2:B10),B2:B10,0)+1, 2)
(第2引数は列番号。B列=2)
→ 例:「$B$5」のようなセルアドレス文字列が返る
このセルアドレスをINDIRECT関数と組み合わせると、動的なセル参照が実現します。
最大値が複数ある場合の対応方法
最大値が複数のセルに存在する場合、MATCHは最初に一致した位置のみを返します。
すべての最大値セルを取得したい場合は、より複雑な配列数式か、FILTER関数(Excel 365以降)を活用する必要があります。
FILTER関数を使った全最大値セルの値取得例(Excel 365):
=FILTER(A2:A10, B2:B10=MAX(B2:B10))
→ 最大値と一致するA列のすべての値を返す
Excel 365をお使いであればFILTER関数が最もシンプルな解決策になるでしょう。
複数列・複数行のデータから最大値の該当データを取得する
続いては、複数の列や行にまたがるデータから最大値に対応するデータを取得する方法を確認していきます。
実務では単一列ではなく、複数の属性を持つデータ表を扱うことがほとんどです。
複数列にまたがる最大値の行データを一括取得する
担当者・エリア・商品・売上のように複数列があるデータで、最高売上の行のすべての情報を取得したい場合もあります。
例:A列担当者・B列エリア・C列売上のデータで、最高売上の担当者とエリアを取得
担当者:=INDEX(A2:A10, MATCH(MAX(C2:C10),C2:C10,0))
エリア:=INDEX(B2:B10, MATCH(MAX(C2:C10),C2:C10,0))
MATCH部分は共通なので、セルに一度計算結果を出して参照すれば数式が整理されます。
MATCHの結果を使い回すことで、数式の重複を減らしてわかりやすく管理できます。
2次元の表から最大値の位置を特定する
行と列の両方にラベルがある2次元の表で最大値の位置を特定するには、MATCH関数を行・列両方に使います。
例:B2:D5の範囲で最大値の行ラベル(A列)と列ラベル(1行目)を取得
行ラベル:=INDEX(A2:A5, MATCH(MAX(B2:D5), MMULT((B2:D5=MAX(B2:D5))*1, {1;1;1}), 0))
(配列数式でのアプローチ。複雑な場合はFILTER・XLOOKUPの使用が推奨)
2次元の場合は計算が複雑になるため、Excel 365以降ではXLOOKUPやFILTERを活用する方が現実的です。
XLOOKUP関数による最大値の該当データ取得(Excel 365)
Excel 365以降では、XLOOKUP関数を使うとINDEX・MATCHの組み合わせをよりシンプルに書けます。
=XLOOKUP(MAX(B2:B10), B2:B10, A2:A10)
(B列の最大値に対応するA列の値を返す)
XLOOKUPはVLOOKUPやINDEX・MATCHの後継的な関数で、書式がシンプルでエラー処理もしやすい特徴があります。
実務でよく使うINDEX・MATCH応用パターン
続いては、INDEX・MATCHを実務でよく使う応用パターンを確認していきます。
具体的なシーンを知ることで、自分の業務への活用イメージが広がるでしょう。
月次レポートで最高成績者を自動表示する
毎月の成績データが更新される月次レポートで、最高成績者の名前とスコアを自動表示するセルを設けておくと便利です。
| 項目 | 数式 |
|---|---|
| 最高売上 | =MAX(B2:B20) |
| 最高売上者 | =INDEX(A2:A20, MATCH(MAX(B2:B20),B2:B20,0)) |
| 最高売上エリア | =INDEX(C2:C20, MATCH(MAX(B2:B20),B2:B20,0)) |
データが更新されるたびに自動で最高売上者が変わるため、レポート作成の手間が大幅に削減されます。
品質管理で最大測定値の製品・ロットを特定する
製品ロットごとの測定データで最大値(不良品候補)がどのロットのものかを特定する場合にも活躍します。
測定値の最大値に対応するロット番号や日付を自動取得することで、迅速な問題特定が可能になります。
在庫データで最多在庫商品の情報を取得する
在庫数量データで最も在庫が多い商品名・商品コード・保管場所などをINDEX・MATCHで自動取得できます。
在庫管理システムからエクスポートされたデータに対して使うことで、棚卸作業や在庫圧縮の優先順位判断にも役立てられます。
INDEX・MATCHの組み合わせは、最大値のセル位置の特定から該当データの取得まで、エクセルでの検索・抽出を支える最重要テクニックのひとつです。
最初は難しく感じるかもしれませんが、仕組みを理解すればさまざまな場面で応用できる強力なスキルになります。
まとめ
この記事では、エクセルで最大値のセルを抽出する方法について、INDEX・MATCH関数の基本から、複数列・複数行のデータへの応用、Excel 365でのXLOOKUP活用まで幅広く解説しました。
MATCH関数で最大値の位置を特定し、INDEX関数でその位置に対応するデータを取得するという組み合わせは、エクセル操作の中でも特に汎用性の高いテクニックです。
実務での月次レポート・品質管理・在庫管理など、さまざまな場面で活用できます。
Excel 365をお使いの方は、XLOOKUP・FILTERといった新関数も積極的に取り入れることで、より効率的な数式が実現します。
INDEX・MATCHをマスターすれば、エクセルでのデータ抽出作業が格段に効率化されるでしょう。