前回はLARGE関数で打率・打点・本塁打の上位N件の数値をランキングシートに自動取得しました。ただ、この時点では「1位は .636」とわかっても、それが誰の成績なのかがわかりません。今回はそこを補う INDEX・MATCH の組み合わせを解説します。
「INDEX・MATCHって2つも覚えるの?」と思った方、ご安心ください。それぞれ単体では「場所を調べる」「その場所のデータを取り出す」という役割があり、組み合わせることで「〇位の選手名を自動表示する」が完成します。順番に見ていきましょう。
INDEX・MATCHを使う前に:今どういう状態か確認する
前回の終わり時点で、ランキングシートはこういう状態でした。
| 順位 | 選手名 | 打率 |
|---|---|---|
| 1 | (空欄) | .636 ✅ |
| 2 | (空欄) | .368 ✅ |
| 3 | (空欄) | .368 ✅ |
| 4 | (空欄) | .357 ✅ |
| 5 | (空欄) | .318 ✅ |
数値は揃っています。今回の目標は、この「選手名(空欄)」の列を INDEX・MATCH で自動埋めすることです。
まずINDEX単体を理解する
INDEX関数は「指定した範囲の、〇行目のデータを取り出す」関数です。
=INDEX(範囲, 行番号)
| 引数 | 意味 | 例 |
|---|---|---|
| 範囲 | 取り出したいデータが入っている列 | 年間(野手)シートの選手名列(B列) |
| 行番号 | 「その範囲の何行目か」を数値で指定 | 3(3行目のデータを取り出す) |
要するに「この列の、〇行目の値を取り出して」という関数です。
たとえば年間(野手)シートのB列(選手名)がこう並んでいるとします。
| 行 | B列(選手名) |
|---|---|
| 1 | 選手名(ヘッダー) |
| 2 | TANAKA |
| 3 | NAKATA |
| 4 | YAMAMOTO |
| 5 | YAMAOKA |
| 6 | SUZUKI |
=INDEX('年間(野手)'!B:B, 6) と書けば「SUZUKI」が返ってきます。6行目のデータなので当然ですね。
ここで1つ問題が起きます。「打率1位は何行目の選手か」がわからなければINDEXは使えません。 その「何行目か」を自動で調べてくれるのがMATCH関数です。
次にMATCH単体を理解する
MATCH関数は「指定した値が、範囲の何行目にあるか」を返す関数です。
=MATCH(検索値, 検索範囲, 照合の型)
| 引数 | 意味 | 今回の設定 |
|---|---|---|
| 検索値 | 「何を探すか」 | LARGEで取り出した「1位の打率の値」 |
| 検索範囲 | 「どこを探すか」 | 年間(野手)シートの打率列(D列) |
| 照合の型 | 「完全一致で探すか」の指定 | 0(完全一致)を必ず使う |
照合の型は 0(完全一致) を常に使います。1や-1はソート済みリスト用で、成績表には不向きです。
先ほどの例で確認します。打率1位の値 .636 が年間(野手)シートのD列の何行目にあるかをMATCHで調べます。
=MATCH(0.6363636364, '年間(野手)'!D:D, 0)
打率 .636(正確には 0.6363636364)はD列の6行目にあるので、MATCHは 6 を返します。
INDEXとMATCHを組み合わせる
ここまでの流れをまとめると、こうなります。
MATCH( LARGEで取り出した値, 打率列, 0 ) → 6(行番号)
「打率1位の値(.636)は何行目にある?」→ 6
INDEX( 選手名列, 6 ) → SUZUKI
「選手名列の6行目は?」→ SUZUKI
=INDEX( 選手名列, MATCH( LARGEの値, 打率列, 0 ) )
MATCHの結果(行番号)をそのままINDEXの第2引数に渡すだけです。「〇行目を調べて、その行を取り出す」が1つの式で完結します。
完成形の式:打率ランキングに選手名を表示する
ランキングシートのC3セルに打率1位の数値(LARGEの結果)が入っているとします。選手名列のB3セルに入れる式はこうなります。
1位の選手名(ランキングシートのB3セル)
=INDEX('年間(野手)'!B:B, MATCH(C3, '年間(野手)'!D:D, 0))
式の読み方
'年間(野手)'!B:B:取り出したいデータ(選手名列)MATCH(C3, '年間(野手)'!D:D, 0):C3の値(打率1位の数値)が、打率列の何行目にあるかを探す- その行番号をINDEXに渡して、選手名列の同じ行を返す
B3に入れたこの式をB4・B5・B6・B7にコピーするだけで2〜5位の選手名も自動表示されます(C列の参照先がC4・C5…と自動でずれるため)。
打点・本塁打ランキングへの応用
打点と本塁打も同じ構造で書けます。列番号だけが変わります。
=INDEX('年間(野手)'!B:B, MATCH(打点1位の値が入ったセル, '年間(野手)'!I:I, 0))
打点はI列。LARGEで取り出した打点1位の値が入るセルを第1引数(MATCH内)に渡します。
=INDEX('年間(野手)'!B:B, MATCH(本塁打1位の値が入ったセル, '年間(野手)'!H:H, 0))
本塁打はH列。構造はまったく同じで、参照する列(MATCH内の検索範囲)を変えるだけです。
| 指標 | MATCHで検索する列 | INDEXで取り出す列 |
|---|---|---|
| 打率 | D列(打率) | B列(選手名) |
| 打点 | I列(打点) | B列(選手名) |
| 本塁打 | H列(本塁打) | B列(選手名) |
取り出したい先(選手名列B列)はどの指標でも変わりません。MATCHで探す列だけを指標ごとに切り替えます。
実際のデータで結果を確認する
年間(野手)シートの実データで INDEX・MATCH の結果を確認します。
| 順位 | 選手名(INDEX・MATCH結果) | 打率 | 備考 |
|---|---|---|---|
| 1位 | SUZUKI | .636 | 22打数14安打で断トツ1位 |
| 2位 | TANAKA | .368 | 同率の2人のうち先に見つかった選手が表示される |
| 3位 | TANAKA | .368 | ⚠️ 同率の場合、同じ選手名が2回表示される(次々回で対処) |
| 4位 | SATO | .357 | 28打数10安打 |
| 5位 | YAMASAKI | .318 | 22打数7安打 |
1位のSUZUKIさん、4位のSATOさん、5位のYAMASAKIさんは問題なく表示されました。ただ、2位と3位が同率(.368)のため、どちらも「TANAKA」が表示されています。これは INDEX・MATCH の仕様で、同じ値が複数ある場合は最初に見つかった行の選手名を返すためです。
この同率問題の対処は次々回(第72回)で詳しく解説します。現時点では「同率があると同じ名前が出ることがある」と理解しておけば大丈夫です。
よくある失敗パターン:照合の型を省略してしまう
=MATCH(C3, '年間(野手)'!D:D) ← 照合の型が省略されている
省略すると「1(昇順ソート済みを前提とした近似一致)」とみなされます。成績表はソートされていないため、正しい行番号が返らず、まったく別の選手名が表示されることがあります。
=MATCH(C3, '年間(野手)'!D:D, 0) ← 完全一致を指定
「0」を付けると完全一致で検索するため、ソート順に関係なく正確な行番号が返ります。MATCH を使うときは「末尾に 0 を必ずつける」と覚えておきましょう。
LARGEとINDEX・MATCHの役割分担を整理する
ここで、前回のLARGEと今回のINDEX・MATCHの役割の違いを改めて整理しておきます。
| 関数 | 役割 | 返すもの |
|---|---|---|
| LARGE | 「〇位の値はいくつか」を取り出す | 数値(例:.636) |
| MATCH | 「その値は何行目にあるか」を調べる | 行番号(例:6) |
| INDEX | 「その行の選手名を取り出す」 | 選手名(例:SUZUKI) |
LARGE → MATCH → INDEX の順に処理が流れています。3つがバトンリレーのように連携して、「1位の打率は SUZUKI の .636」という出力を完成させます。
この回が終わった時点のランキングシートの状態
| 順位 | 選手名 | 打率 |
|---|---|---|
| 1 | SUZUKI ✅ | .636 ✅ |
| 2 | TANAKA ✅ | .368 ✅ |
| 3 | TANAKA ⚠️(同率問題) | .368 ✅ |
| 4 | SATO ✅ | .357 ✅ |
| 5 | YAMASAKI ✅ | .318 ✅ |
前回まで空欄だった選手名列が埋まりました。同率問題(3位がTANAKAになってしまう件)は第72回で対処します。
- INDEX は「範囲の〇行目のデータを取り出す」関数、MATCH は「値が範囲の何行目にあるかを返す」関数
- 2つを組み合わせると
=INDEX(選手名列, MATCH(〇位の値, 成績列, 0))という式で選手名が自動表示できる - MATCHの第3引数(照合の型)は必ず「0」を指定する——省略すると誤った行番号が返ることがある
- 指標が変わっても構造は同じで、MATCHで検索する列だけを変えれば打点・本塁打にも使える
- 同率の場合は最初に見つかった選手名が繰り返し表示される——この問題は第72回で対処する
- 次回は打率ランキングに規定打席条件を組み込む
次回予告
次回は「打率ランキング:規定打席条件を組み込む」。打率は未出場・打席数が少ない選手の数値(0や極端な値)がランキングに混入しやすい指標です。「試合数×1.8」という規定打席をクリアした選手だけを対象にする条件を、LARGE関数に組み込む方法を解説します。



コメント