前回はINDEX・MATCHで上位N件の数値に対応する選手名を自動表示できるようになりました。打点・本塁打・盗塁ランキングはこれで完成形に近いのですが、打率ランキングには1つ特有の問題があります。今回はその問題を解決する「規定打席条件の組み込み」を解説します。
「また新しい関数?」と思った方、ご安心ください。今回登場する考え方はすでに第51・52・53回で学んだ「規定打席」の話です。あのときの知識をランキングシートに応用するだけです。
打率ランキング特有の問題:未出場選手の「0」が混入する
打点・本塁打・盗塁なら「0点は0点」で正しい成績です。しかし打率は違います。
SASAKIさんやHARAさんなど、試合に出ていない選手の打率は 0 です。LARGEはこの 0 も数値として扱うため、上位5件を取り出そうとすると選手が10人以下のチームでは下位に 0 が並んでしまいます。
1打席で1安打なら打率は 1.000(10割)です。試合に1回しか出ていない選手が打率ランキングのトップに来るのは、チームの実情を正しく反映していません。
実際のデータで確認してみましょう。年間(野手)シートには打席数 0 の選手が複数います。
| 選手名 | 試合数 | 打席数 | 打率 | 問題 |
|---|---|---|---|---|
| SASAKI | 0 | 0 | 0 | 未出場なのに打率 0 としてリストに残る |
| HARA | 0 | 0 | 0 | 同上 |
| YAMADA | 2 | 5 | .400 | 打席数が少なく、規定打席(約18)に未達 |
| SUZUKI | 9 | 30 | .636 | 規定打席クリア → ランキング対象 ✅ |
このままLARGEを使うと、打席数5のYAMADAさん(打率.400)が規定打席をクリアした選手よりも上位に来てしまいます。これを防ぐのが「規定打席条件の組み込み」です。
規定打席の復習:試合数 × 1.8
第51・52回で解説した規定打席の考え方を確認しておきます。
チームの消化試合数 × 1.8 で計算した打席数以上を記録した選手のみを、打率などの規定が必要な指標のランキング対象とするルール。
たとえばチームが10試合を消化していれば、規定打席は 10 × 1.8 = 18打席。18打席以上の選手だけが打率ランキングの対象になります。
この「10」はチームシートの試合数から自動参照する設計にしておくと、試合が増えるたびに自動更新されます(第52回参照)。ここでは説明のため 10試合=規定打席18 を例として使います。
解決策:LARGE の範囲を「条件付きの列」に変える
アイデアはシンプルです。打率列をそのままLARGEに渡すのではなく、「規定打席を満たしていない選手の打率を無視した列」をLARGEに渡します。
この「条件を満たせば元の値、満たさなければ無視」を作るのにIF関数を使います。
=IF(条件, 条件が真のときの値, 条件が偽のときの値)
「打席数が規定打席以上なら打率を返す、そうでなければ空欄(””)を返す」と書けます。
配列数式で「条件付き打率列」をLARGEに渡す
通常のIF関数は1つのセルに対して判定します。しかし今回は「打率列全体」に対してまとめて条件判定し、その結果をLARGEに渡す必要があります。これを配列数式と呼びます。
書き方はこうなります。
打率1位(規定打席クリア選手のみ対象)
=IFERROR(LARGE(IF('年間(野手)'!E2:E50>=$H$1, '年間(野手)'!D2:D50), A3), "")
式の読み方を分解します。
'年間(野手)'!E2:E50:打席数の列(E列)の範囲>=$H$1:打席数が規定打席(H1セルに入力した値)以上かどうかを判定'年間(野手)'!D2:D50:条件を満たした行の打率(D列)だけをLARGEに渡すA3:順位番号(1位ならA3=1、2位ならA4=2…)IFERROR(…, ""):データが足りなくてエラーになった場合に空欄を返す
⚠️ Googleスプレッドシートでの入力方法
この式を入力したらCtrl+Shift+Enter(Macは Command+Shift+Enter)で確定してください。通常のEnterで確定すると配列として動作せず正しい結果が得られません。確定後、数式バーの式が {=IFERROR(…)} のように波括弧で囲まれれば成功です。
配列数式の中でIF関数を使う場合、D:D(列全体)ではなく D2:D50 のような有限の範囲を指定する必要があります。列全体を使うと処理が極端に重くなったり、エラーが出たりすることがあります。選手が増えてもカバーできるよう、余裕を持った行数(50行程度)を指定しておきましょう。
「規定打席」のセルをどこに置くか
式の中の $H$1 は「規定打席の値が入ったセル」です。2通りの管理方法があります。
=IFERROR(LARGE(IF('年間(野手)'!E2:E50>='チーム成績'!B2*1.8, '年間(野手)'!D2:D50), A3), "")
チーム成績シートのB2に試合数が入っているとして、B2*1.8 が規定打席になります。試合数が増えるたびに規定打席も自動更新されるので、メンテナンス不要です。
=IFERROR(LARGE(IF('年間(野手)'!E2:E50>=$H$1, '年間(野手)'!D2:D50), A3), "")
ランキングシートのH1セルに規定打席(例:18)を直接入力しておく方法です。試合が増えたら手動で更新する必要がありますが、式がシンプルで理解しやすくなります。$H$1 と絶対参照にしておくと、式を下にコピーしても参照先がずれません。
実際のデータで結果を確認する
チームの消化試合数は現時点で10試合なので、規定打席は 10 × 1.8 = 18打席 です。これで絞り込んだ結果を見てみましょう。
| 選手名 | 打席数 | 規定打席(18)クリア? | 打率 |
|---|---|---|---|
| SUZUKI | 30 | ✅ クリア | .636 |
| TANAKA | 24 | ✅ クリア | .368 |
| ITO | 23 | ✅ クリア | .368 |
| YAMAMOTO | 28 | ✅ クリア | .357 |
| YAMAOKA | 27 | ✅ クリア | .318 |
| YAMADA | 5 | ❌ 未達 | .400(除外) |
| SASAKI(未出場) | 0 | ❌ 未達 | 0(除外) |
規定打席(18打席)をクリアしたのは SUZUKI・TANAKA・ITO・YAMAMOTO・YAMAOKA の5選手です。YAMADAさんの打率.400(5打席)と未出場選手の 0 はIFの条件で除外されます。
| 順位 | 選手名 | 打率 | 打席数 |
|---|---|---|---|
| 1位 | SUZUKI | .636 | 30 |
| 2位 | TANAKA | .368 | 24 |
| 3位 | ITO | .368 | 23 |
| 4位 | YAMAMOTO | .357 | 28 |
| 5位 | YAMAOKA | .318 | 27 |
打席数5のYAMADAさん(.400)が除外され、実態に即したランキングになりました。2位・3位の同率問題(TANAKAとITO)は第72回で対処します。
選手名の取り出し方も同じ構造で書く
選手名列(INDEX・MATCH)の式も、MATCH の検索範囲を同じ配列で統一します。
打率1位の選手名(ランキングシートのB3セル)
=IFERROR(INDEX('年間(野手)'!B2:B50, MATCH(C3, IF('年間(野手)'!E2:E50>=$H$1, '年間(野手)'!D2:D50), 0)), "")
ポイントは MATCHの検索範囲にもIFで絞った配列を使うことです。C3に入っている「規定打席クリア選手の打率1位の値」を、IF配列の中から探して行番号を返します。この式も Ctrl+Shift+Enter で確定してください。
打点・本塁打との使い分けを整理する
打率と打点・本塁打でLARGEの書き方がどう違うかを並べて確認しておきましょう。
| 指標 | LARGEの書き方 | 理由 |
|---|---|---|
| 打率 | LARGE(IF(打席列>=規定, 打率列), 順位) | 未出場の0・少打席の極端値を除外するため規定打席条件が必要 |
| 打点 | LARGE(打点列, 順位) | 「0打点」は正しい実績。条件なしでそのままランキングしてよい |
| 本塁打 | LARGE(本塁打列, 順位) | 同上 |
| 盗塁 | LARGE(盗塁列, 順位) | 同上 |
規定打席条件が必要なのは打率(と後々対応するなら出塁率・長打率・OPS)だけ。数を積み上げていく指標(打点・本塁打・盗塁・安打)は条件なしでOKです。
- 打率ランキングには「未出場者の 0」と「少打席の極端値」が混入する問題がある——打点や本塁打にはない打率特有の問題
- 解決策は
LARGE(IF(打席列>=規定打席, 打率列), 順位)という配列数式で、規定打席をクリアした選手の打率だけをLARGEに渡すこと - Googleスプレッドシートでは Ctrl+Shift+Enter で確定する(波括弧
{}が付けば成功) - 配列数式では列全体(D:D)ではなく有限の範囲(D2:D50など)を指定する
- 規定打席の値はチーム成績シートの試合数から自動計算するか、ランキングシートに手入力して絶対参照(
$H$1)で参照する - 打点・本塁打・盗塁はこの条件が不要——規定打席条件が必要なのは打率(と関連指標)のみ
- 次回は本塁打・打点・安打・盗塁の各ランキングをまとめて作る
次回予告
次回は「本塁打・打点・安打・盗塁ランキングを作る」。打率ランキングで学んだ LARGE・INDEX・MATCH の構造をそのまま応用して、各部門のランキングシートを一気に仕上げます。打率と違って条件なしでOKな指標ばかりなので、思ったよりもスムーズに進みます。



コメント