第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をコピーしました