第71回 本塁打・打点・安打・盗塁ランキングを作る

関数・自動化

前回は打率ランキングに規定打席条件を組み込む、やや複雑な配列数式を解説しました。今回は本塁打・打点・安打・盗塁の4部門ランキングを一気に作ります。これらは打率と違って規定打席条件が不要なので、第68・69回で学んだ LARGE・INDEX・MATCH をそのまま使うだけです。

「4部門もあるのに大丈夫?」と思った方、ご安心ください。構造はすべて同じで、列番号を変えるだけで4部門全部完成します。1つ理解すれば残りは「コピーして列を変える」だけです。

4部門の列番号を先に確認する

式を書く前に、年間(野手)シートの列構成を確認しておきます。ランキングの式で使う列は次のとおりです。

📝 年間(野手)シートの列構成(ランキング関連)
内容 ランキングでの使い方
B列 選手名 INDEXで取り出す列(全部門共通)
G列 安打 安打ランキングでMATCHが探す列
H列 本塁打 本塁打ランキングでMATCHが探す列
I列 打点 打点ランキングでMATCHが探す列
J列 盗塁 盗塁ランキングでMATCHが探す列

選手名(B列)はどの部門でも変わりません。MATCHで探す列だけを部門ごとに切り替えます。実際のシートの列番号はご自身の設計に合わせてください。

完成式:4部門まとめて確認する

ランキングシートのA列に順位番号(A3=1、A4=2…)が入っているとします。各部門の数値列(C列)と選手名列(B列)の式はそれぞれ次のとおりです。

① 本塁打ランキング

数値列(例:C列)

=IFERROR(LARGE('年間(野手)'!H:H, A3), "")

選手名列(例:B列)

=IFERROR(INDEX('年間(野手)'!B:B, MATCH(C3, '年間(野手)'!H:H, 0)), "")

本塁打は打率と異なり配列数式不要。通常のEnterで確定できます。

② 打点ランキング

数値列

=IFERROR(LARGE('年間(野手)'!I:I, A3), "")

選手名列

=IFERROR(INDEX('年間(野手)'!B:B, MATCH(C3, '年間(野手)'!I:I, 0)), "")
③ 安打ランキング

数値列

=IFERROR(LARGE('年間(野手)'!G:G, A3), "")

選手名列

=IFERROR(INDEX('年間(野手)'!B:B, MATCH(C3, '年間(野手)'!G:G, 0)), "")
④ 盗塁ランキング

数値列

=IFERROR(LARGE('年間(野手)'!J:J, A3), "")

選手名列

=IFERROR(INDEX('年間(野手)'!B:B, MATCH(C3, '年間(野手)'!J:J, 0)), "")
📝 4部門すべてで変わる部分・変わらない部分
LARGE の範囲 MATCH の検索範囲 INDEX の範囲
本塁打 H:H H:H B:B(固定)
打点 I:I I:I B:B(固定)
安打 G:G G:G B:B(固定)
盗塁 J:J J:J B:B(固定)

INDEXが参照する選手名列(B:B)は4部門すべてで変わりません。LARGEとMATCHで使う列だけを部門ごとに変えます。しかも LARGEとMATCHで指定する列は必ず同じ——「本塁打ならどちらもH:H」と覚えておけば迷いません。

実際のデータでランキング結果を確認する

年間(野手)シートの実データをもとに、4部門の上位3〜5位を確認しましょう。

本塁打ランキング

順位 選手名 本塁打 備考
1位 ITO 1 同率3名のうちMATCHが最初に見つけた選手
2位 ITO 1 ⚠️ 同率のため同じ名前が繰り返し表示(第72回で対処)
3位 ITO 1 ⚠️ 同上(YAMASAKI・SATOも1本)

本塁打は今シーズンITO・YAMASAKI・SATOの3名がそれぞれ1本。全員同率のため数値取得(LARGE)は正しくできていますが、選手名の表示は同率対処(第72回)後に完成します。

打点ランキング

順位 選手名 打点 備考
1位 SUZUKI 6 単独1位、問題なし
2位 ITO 5 ⚠️ SATOも5打点で同率(第72回で対処)
3位 ITO 5 ⚠️ 同上
4位 NAKATA 4 T.KAMINO・M.IZUTSU・YAMAMOTOも4打点
5位 NAKATA 4 ⚠️ 同率複数名(第72回で対処)

安打ランキング

順位 選手名 安打 備考
1位 SUZUKI 14 断トツ1位、問題なし
2位 YAMAMOTO 10 単独2位、問題なし
3位 ITO 7 ⚠️ S.TANAKA・NAKATAも7安打で同率(第72回で対処)
4位 ITO 7 ⚠️ 同上
5位 ITO 7 ⚠️ 同上

盗塁ランキング

順位 選手名 盗塁 備考
1位 S.TANAKA 7 ⚠️ YAMAMOTOも7盗塁で同率(第72回で対処)
2位 S.TANAKA 7 ⚠️ 同上
3位 YAMASAKI 2 SUZUKI・M.IZUTSU・S.SADAも2盗塁
4位 YAMASAKI 2 ⚠️ 同率複数名(第72回で対処)
5位 YAMASAKI 2 ⚠️ 同上

数値(LARGE)は正しく取れています。同率が複数いる場合に選手名が繰り返し表示される問題は、次回(第72回)で解決します。

IFERRORを必ず付ける理由

すべての式に IFERROR(…, "") を付けています。なぜ必要かを確認しておきましょう。

⚠️ IFERRORなしで起きる問題
LARGE がエラーになるケース

たとえば本塁打を打った選手が3人しかいないのに4位・5位の式を書くと、#NUM! エラーが表示されます。本塁打ランキングを5位まで表示したい場合でも、実績が3人しかいなければ4位・5位は空欄であるべきです。

IFERROR でエラーを空欄に変える
=IFERROR(LARGE('年間(野手)'!H:H, A3), "")

エラーが出たときに空欄(””)を返すようにしておくと、シーズン序盤でデータが少ない時期でも見た目がきれいに保たれます。

入力の手順:1部門を完成させてから横にコピーする

4部門を一度に作ろうとすると混乱しやすいです。次の順序で進めると確実です。

STEP 1:打点ランキングを1位〜5位まで完成させる

打点の数値式(LARGE)と選手名式(INDEX・MATCH)をそれぞれ1位分だけ入力し、下に4行コピーします。打点を選んだのは、列番号(I列)が覚えやすく、1位がSUZUKIの6打点で単独なのでデバッグしやすいためです。

STEP 2:打点の式を隣のブロックにコピーし、列番号だけ書き換える

打点(I:I)の式を安打用ブロックにコピーし、I:IG:G に変えます。本塁打・盗塁も同様に H:H・J:J に変えます。

STEP 3:各ブロックの1位の結果が実データと一致するか確認する

安打1位が SUZUKI(14)、打点1位が SUZUKI(6)、盗塁1位が S.TANAKA か YAMAMOTO(7)になっていれば正しく動いています。数値と選手名が噛み合っているか1位だけ確認すれば、2〜5位は式のコピーなので問題ありません。

4部門完成後のランキングシートの状態

✅ 第71回終了時点のランキングシートの状態
部門 数値列(LARGE) 選手名列(INDEX・MATCH) 残課題
打率 ✅ 完成 ✅ 完成 同率の表示(第72回)
本塁打 ✅ 完成 ✅ 完成 同率の表示(第72回)
打点 ✅ 完成 ✅ 完成 同率の表示(第72回)
安打 ✅ 完成 ✅ 完成 同率の表示(第72回)
盗塁 ✅ 完成 ✅ 完成 同率の表示(第72回)

全5部門の骨格が揃いました。同率が出たときに同じ選手名が繰り返し表示される問題だけが残っています。これを次回(第72回)で解消すれば、ランキングシートが実用レベルで完成します。

✅ この記事のまとめ
  • 本塁打・打点・安打・盗塁は打率と違い規定打席条件が不要——LARGE・INDEX・MATCHをシンプルにそのまま使う
  • 4部門すべてでINDEXが参照する選手名列(B:B)は共通、LARGEとMATCHで指定する列だけを部門ごとに切り替える
  • LARGEとMATCHで使う列は必ず同じ——打点ならどちらもI:I、安打ならどちらもG:G
  • IFERROR(…, "") を必ず付けておくと、データが少ない時期のエラー表示を防げる
  • 作業は「1部門を1位〜5位まで完成 → 隣にコピーして列名だけ変える」の順が確実
  • 数値は正しく取れているが同率のとき同じ選手名が繰り返し表示される問題が残っている——次回(第72回)で対処する

次回予告

次回は「同率タイの処理:同じ数値が複数いる場合の対応」。今シーズンは本塁打・盗塁・安打でそれぞれ同率が出ており、このままでは同じ選手名が繰り返し表示されてしまいます。COUNTIFを使った重複チェックと、表示の工夫でこの問題をスマートに解消する方法を解説します。

▶︎ 次回:【第72回】同率タイの処理:同じ数値が複数いる場合の対応

コメント

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