第62回 勝率の計算式を作る

関数・自動化

前回は防御率(ERA)の計算式を作り、登板なしの選手で起きる0除算エラーをIFERRORで防ぐ方法を解説しました。今回は投手ごとの勝率を自動計算する式を作ります。

「勝率なんて割り算するだけでは?」と思った方、そのとおりです。基本の式はとてもシンプルです。ただし、勝ち星も負け星もない選手や引分しかない選手で同じ0除算問題が起きるため、そこをどう対処するかが今回のポイントになります。

勝率とは何か:投手の勝率はチームの勝率と計算式が違う

まず定義を確認しておきましょう。投手の勝率とチームの勝率は、計算式が異なります。

✅ 勝率の計算式:2種類の違い
対象 計算式 引分の扱い
投手の勝率(今回) 勝 ÷(勝 + 負) 計算に含めない
チームの勝率(第79回で解説) 勝 ÷(試合数 − 引分) 試合数から除外

投手の勝率は「勝ちがついた試合のうち何割を勝ったか」ではなく、「勝ち・負けがついた試合の中で何割を勝ったか」です。引分は投手に勝ち・負けがつかないため、分母に含めません。

📝 「投手に勝ち・負けがつく」とはどういうこと?

野球のルール上、先発投手が5イニング以上投げてチームが勝ち越した時点でマウンドを降りると「勝利投手」になります。逆に自分が投げている間にリードを失い、そのまま逆転されると「敗戦投手」になります。引分や登板してもこれらの条件を満たさない場合は「勝ち・負けなし」として記録されます。草野球では簡略化した記録をつけるチームも多いですが、この連載では勝・負・セーブを個別に管理しています。

完成形の関数

勝がD列、負がE列に入っているとして、勝率を求める式はこうなります。

✅ 勝率の完成式
=IFERROR(D2/(D2+E2), 0)

防御率と同様に、IFERROR で0除算エラーを防ぐのがポイントです。

なぜIFERRORが必要なのか

勝率の分母は「勝+負」です。勝ち星も負け星もついていない選手(登板なし、または勝敗のつかない登板のみ)はこの分母が 0 になり、#DIV/0! エラーが発生します。

⚠️ 勝敗がつかない選手で起きること
選手名(仮) 勝+負 IFERRORなし IFERRORあり
TANAKA(勝敗なし) 0 0 0 #DIV/0! 0
OKADA(2勝0敗) 2 0 2 1.000 1.000
YAMADA(0勝2敗) 0 2 2 0.000 0.000
SUZUKI(2勝0敗) 2 0 2 1.000 1.000

シートのTANAKAさん・YAMAMOTOさん・OKADAさんのように勝敗のつかない登板しかない選手がいると分母が 0 になります。防御率のときと同様に IFERROR で先手を打っておきましょう。

関数を3つのパーツに分解して理解する

パーツ① エラーのラッパー:IFERROR
IFERROR( … , 0)

外側の IFERROR は「中の計算式がエラーになったら 0 を返す」ためのラッパーです。防御率・打率と同じ構造で、勝敗がともに 0 の選手で発生する #DIV/0! をまるごと受け止めます。

パーツ② 分子:勝ち数(D2)
D2

D列は勝ち数です。OKADAさんなら 2、YAMADAさんなら 0 が入っています。

パーツ③ 分母:勝+負(D2+E2)
D2+E2

D列(勝)とE列(負)を足したものが分母です。引分は含めません。OKADAさんなら 2+0=2 なので、2÷2=1.000(全勝)になります。YAMADAさんなら 0÷2=0.000 です。

実際のデータで計算結果を確認する

年間(投手)シートの全選手で勝率を確認します。選手名は仮名に置き換えています。

選手名(仮) 勝+負 勝率 備考
TANAKA 0 0 0 0 IFERRORで回避
OKADA 2 0 2 1.000 全勝
SUZUKI 2 0 2 1.000 全勝
ENDO 0 0 0 0 IFERRORで回避
YAMAMOTO 0 0 0 0 IFERRORで回避
OKADA(登板なし) 0 0 0 0 IFERRORで回避
OKITA 1 0 1 1.000 全勝
AKASAKA 1 0 1 1.000 全勝
YAMADA(SADA) 0 2 2 0.000 全敗

年間(投手)シートに表示されている勝率と完全に一致しています。勝敗のつかない選手は IFERRORで 0 が返り、エラーなく整然と並びます。

勝率の表示形式を整える

勝率は一般に小数点以下3桁(例:0.750、1.000)で表示するのが標準です。打率と同じ形式ですね。

📝 表示形式の設定手順(Googleスプレッドシート)
  1. 勝率の列(たとえばG列)を選択する
  2. メニューの「表示形式」→「数値」→「数値」を選ぶ
  3. 小数点以下の桁数を「3」に設定する

これで 1 が「1.000」、0 が「0.000」と表示されます。勝敗なしで IFERROR が返す 0 も「0.000」と表示されますが、実質的に「該当なし」の意味になります。気になる場合は後述の方法で空白表示に切り替えることもできます。

「0.000」ではなく空白にしたい場合

勝敗のつかない選手のセルに「0.000」ではなく何も表示したくない場合は、IFERROR の第2引数を ""(空文字)に変えるだけです。

✅ 勝敗なしのとき空白にする場合
=IFERROR(D2/(D2+E2), "")

ただし、この列をランキングや条件付き書式で参照する場合、空文字だとエラーが出ることがあります。シンプルに管理したい場合は 0 のままにしておくのが無難です。

⚠️ 「勝率 0.000」と「勝敗なし」は意味が違う

「勝率 0.000」は勝ち星なし・負け星あり(たとえば0勝2敗)の選手を指します。勝敗のつかない登板しかしていない選手とは本来意味が異なります。厳密に管理したい場合は "" で空白にして区別しておくと、あとでランキング等を作るときに迷わずに済みます。チームの運用ルールに合わせて決めてください。

チームの勝率はどう計算する?(補足)

チームシートの勝率は投手の勝率とは式が異なります。今回は投手の勝率に絞った解説ですが、チームの勝率については第79回で詳しく扱います。参考までに式の違いだけ確認しておきましょう。

📝 チームの勝率(参考)
=IFERROR(勝÷(試合数-引分), 0)

今シーズンのチームデータでは 6勝2敗2引分(試合数10)なので、6÷(10−2)=0.750 が正しい値です。投手の勝率の式(勝÷(勝+負))と混同しないよう注意してください。

✅ この記事のまとめ
  • 投手の勝率は 勝 ÷(勝 + 負) で計算し、スプレッドシートでは =IFERROR(D2/(D2+E2), 0) と書く
  • 引分は投手に勝ち・負けがつかないため、分母に含めない(チームの勝率とは計算式が異なる)
  • 勝ち星も負け星もない選手は分母が 0 になるため、必ず IFERROR で囲む
  • 表示形式は「小数点以下3桁」に設定するのがスタンダード
  • 「0.000(全敗)」と「空白(勝敗なし)」を区別したい場合は IFERROR( … , "") に変更する
  • 次回は奪三振・与四死球・被安打のカウント方法を解説する

次回予告

次回は「奪三振・与四死球・被安打をカウントする」。打者成績で使ってきた COUNTIF の考え方を投手版にアレンジする方法を解説します。選手ごとの条件絞り込みが今回も鍵になります。

▶︎ 次回:【第63回】奪三振・与四死球・被安打をカウントする

コメント

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