Excel関数 逆引き集 | 最大値の位置 → MATCH(MAX(範囲),範囲,0)

Excel
スポンサーリンク

概要

「最大値がどこにあるか(位置)」を求める定番式が MATCH(MAX(範囲), 範囲, 0) です。内側の MAX(範囲) で最大値を取り、その値が範囲の中の何番目かを MATCH(..., 範囲, 0) で突き止めます。返り値は「範囲内のインデックス(1始まり)」で、行番号や列番号に変換したり、INDEXで値や関連情報を取り出すのに使えます。


基本の使い方

書式

=MATCH(MAX(範囲), 範囲, 0)
  • MAX(範囲): 最大値を取得
  • MATCH(検索値, 検索範囲, 検索の種類): 位置を取得(検索の種類は完全一致なら0)

最小例

=MATCH(MAX(B2:B20), B2:B20, 0)

B2:B20の最大値が「範囲の何番目か」を返します(B2が1、B3が2…)。


具体例

行番号を得たい(シート上の行番号に変換)

=ROW(B2) - 1 + MATCH(MAX(B2:B20), B2:B20, 0)

B2の行番号を基準に「オフセット」を足して、シート上の絶対行番号を返します。

最大値の“行の別列情報”を取り出す(INDEXと組み合わせ)

=INDEX(A2:A20, MATCH(MAX(B2:B20), B2:B20, 0))

B列の最大値の行にあるA列の値(例: 商品名)を取得します。

テーブル(構造化参照)で見やすく

テーブル名「売上」、金額列「金額」、商品列「商品」:

=INDEX(売上[商品], MATCH(MAX(売上[金額]), 売上[金額], 0))

最大金額の商品の名前を返します。


応用テンプレート

列全体の最大値位置(列番号に変換)

横方向(1行内)の最大値の“列位置”を求める:

=MATCH(MAX(2:2), 2:2, 0)

行2の中で最大値がある列の「インデックス」(左端から1,2,3…)を返します。シート上の列番号にしたい場合は COLUMN(A1)-1+... を同様に加算します。

2次元の最大値の“行と列”を同時に特定

行はB2:F20、列はB:Fに揃っているとき:

  • 行インデックス
=MATCH(MAX(B2:F20), INDEX(B2:F20, 0, MATCH(MAX(B2:F20), B2:F20, 0)), 0)

実務では、まず「最大値そのもの」を探し、その値が含まれる行・列を段階的に特定するより、次のように分けて求めるのが確実です。

  • 行番号
=MIN(IF(MAX(B2:F20)=B2:B20, ROW(B2:B20)))
  • 列番号
=MIN(IF(MAX(B2:F20)=B2:F2, COLUMN(B2:F2)))

Microsoft 365なら LETXLOOKUP/XMATCH を使うと読みやすく書けます。

複数の最大値がある場合(最初の1つ以外も列挙)

最大値に一致する“すべての位置”を返す(Microsoft 365の動的配列):

=FILTER(ROW(B2:B20), B2:B20=MAX(B2:B20))

行番号の配列が返り、複数箇所の最大値を一覧にできます。テーブルなら FILTER(売上[商品], 売上[金額]=MAX(売上[金額])) で最大金額の商品を複数返します。

最大値が複数でも“最後のもの”を取りたい(最後の一致)

XMATCHが使える環境なら「最後の一致」を指定できます:

=XMATCH(MAX(B2:B20), B2:B20, 0, -1)

-1は「最後の一致」を意味します。


よくあるつまずきと対策

同率(同じ最大値)が複数ある

MATCH は最初に見つかった位置を返します。全件列挙したいなら FILTER を使うか、古いExcelでは配列数式で IFSMALL を組み合わせて複数位置を取り出します。

数値に見える文字列が混ざっている

MAX はテキストを無視します。数値が文字列で入っていると正しく比較されません。入力規則の整備か、別列で =VALUE(セル) などで正規化してから使います。

範囲と基準の不一致

MATCH(MAX(範囲), 範囲, 0) の「範囲」は内外で必ず一致させます。違う範囲を混ぜると位置がずれます。

空白やエラーを含む

空白は問題ありませんが、エラー値が混ざると MAXMATCH がエラーになります。データ側で IFERROR で保護するか、計算用列でエラーを排除してから参照します。


例題

問題1: 列B(B2:B20)の最大値の“範囲内位置”をC2に表示

解答例:

=MATCH(MAX(B2:B20), B2:B20, 0)

問題2: 列Bの最大値の“行の商品名(A列)”をD2に表示

解答例:

=INDEX(A2:A20, MATCH(MAX(B2:B20), B2:B20, 0))

問題3: テーブル「売上」で最大金額の“レコードの顧客名(顧客列)”をH2に表示

解答例:

=INDEX(売上[顧客], MATCH(MAX(売上[金額]), 売上[金額], 0))

問題4: 行2(B2:F2)の中で最大値がある“列インデックス”をG2に表示

解答例:

=MATCH(MAX(B2:F2), B2:F2, 0)

問題5: 列Bの最大値が複数あるとき、その“すべての行番号”をI2から縦に出力(Microsoft 365)

解答例:

=FILTER(ROW(B2:B20), B2:B20=MAX(B2:B20))

まとめ

MATCH(MAX(範囲), 範囲, 0) は「最大値の位置」を最短で取得する定番式です。位置が分かれば INDEX と組み合わせて関連情報も取り出せます。複数最大値への対応や“最後の一致”は FILTERXMATCH が便利です。範囲の整合、データ型の統一、エラー値の除去を意識すれば、実務で堅牢に使えます。

タイトルとURLをコピーしました