第61回 防御率(ERA)の計算式を作る

関数・自動化

前回は投球回の実数(6.666…)を「6回2/3」のような読みやすい形式に変換する表示関数を作りました。今回はその実数の投球回を使って防御率(ERA)を自動計算する式を作ります。

防御率はピッチャーの成績を語るうえで打率と並ぶ最重要指標です。「数字は揃っているのに防御率だけ手計算している」という方も、今回の関数を入れれば完全自動化できます。ポイントは2つ——計算式そのものと、登板ゼロの選手で起きるエラーへの対処です。

防御率(ERA)とは何か

まず定義を確認しておきましょう。防御率とは「9イニング投げたとすると何点の自責点を与えるか」を示す指標です。

✅ 防御率の計算式

防御率(ERA) = 自責点 × 9 ÷ 投球回(実数)

「自責点」とは、エラーやパスボールなど守備のミスによらずに投手の責任で失った点のこと。失点とは別に管理します。

たとえば12回1/3(実数:12.333…)投げて8自責点なら、防御率は 8×9÷12.333… = 約5.84 になります。これは実際のシートのYAMADAさんの数値です。

📝 自責点と失点はどう違うの?

失点はエラーがらみの点も含むすべての失点。自責点はそこからエラーで出塁した走者の生還などを除いたもので、投手本人の責任分だけを切り出した数字です。草野球ではスコアブックをつける方が判断することが多いため、フォームでは「失点」と「自責点」を別々に入力できるようにしています。

完成形の関数

投球回の実数がI列、自責点がK列に入っているとして、防御率(ERA)を求める式はこうなります。

✅ 防御率(ERA)の完成式
=IFERROR(K2*9/I2, 0)

シンプルに見えますが、IFERROR で囲むことが非常に重要です。その理由は次のセクションで詳しく説明します。

なぜIFERRORが必要なのか

防御率の計算式は K2*9/I2 です。ところが登板のない選手は投球回が 0 になるため、0 で割り算が発生して #DIV/0! エラーが表示されてしまいます。

⚠️ 登板なしの選手で起きること
選手名(仮) 投球回(実数) 自責点 IFERROR なし IFERROR あり
NAKATA(登板なし)00#DIV/0!0
TANAKA(1回)1.00000.000.00
YAMADA(12回1/3)12.333…85.845.84

登板なしの選手でエラーが出ると、ランキング集計や条件付き書式が正しく動かなくなります。先手を打って IFERROR で 0 を返すようにしておきましょう。

IFERROR(計算式, エラー時の値) は「計算式がエラーになったら代わりにこの値を返す」という関数です。第47回で打率の計算に使ったものと同じ考え方ですね。防御率でも必ずセットで使う、と覚えておいてください。

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

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

外側の IFERROR は「中の計算式がエラーになったら 0 を表示する」ためのラッパーです。登板のない選手の行で投球回が 0 になったとき、 #DIV/0! の代わりに 0 を返します。

パーツ② 自責点を9倍する:K2*9
K2*9

K2 は自責点のセルです。防御率は「9イニング当たりの自責点」なので、まず自責点に 9 をかけます。YAMADAさんなら 8×9=72 になります。

パーツ③ 投球回(実数)で割る:/I2
/I2

I2 は前回・前々回で作った投球回の実数(6.666…や12.333…)が入っている列です。72÷12.333… = 約5.84 となります。ここで重要なのは「6回2/3」という文字列ではなく実数のI列を使うこと。前回、表示用と計算用の列を分けた理由がここで活きてきます。

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

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

選手名(仮) 投球回(実数) 自責点 計算式(自責×9÷回) 防御率
SUZUKI22.00044×9÷221.64
YAMAOKA9.00011×9÷91.00
SATO6.666…00×9÷6.666…0.00
YAMADA12.333…88×9÷12.333…5.84
SAKAI5.00022×9÷53.60
TANAKA1.00000×9÷10.00
OKADA2.00000×9÷20.00
NAKATA(登板なし)0.0000IFERRORで回避0

年間(投手)シートに表示されている防御率と完全に一致しています。NAKATAさんのように登板がない選手もエラーなく 0 が返ります。

防御率の表示形式を整える

防御率は一般に小数点以下2桁で表示するのがスタンダードです。セルの書式設定で「数値」→「小数点以下の桁数:2」に設定しておきましょう。

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

これで 1.636… が「1.64」、5.837… が「5.84」のようにきれいに表示されます。0の場合は「0.00」になります。

「計算できない」よくある原因チェックリスト

防御率がうまく計算されないときは、以下の3点を順番に確認してください。

⚠️ うまくいかないときの3つの確認ポイント
  1. I列が実数になっているか——「6回2/3」という文字列ではなく「6.666…」という数値が入っているか確認する。文字列だと #VALUE! エラーになる。
  2. K列が数値になっているか——自責点が文字列として入力されていると計算できない。セルの左寄りになっている場合は文字列の疑いがある。
  3. IFERRORが外側にあるか——IFERROR(K2*9/I2, 0) の順番が正しいか確認する。K2*9/IFERROR(I2, 0) のように内側に入れてしまうと0除算が回避できない。
✅ この記事のまとめ
  • 防御率の計算式は 自責点 × 9 ÷ 投球回(実数) で、スプレッドシートでは =IFERROR(K2*9/I2, 0) と書く
  • 登板なしの選手は投球回が 0 になり #DIV/0! エラー が発生するため、必ず IFERROR で囲んでエラーを 0 に変換する
  • 割り算の分母(投球回)には 文字列ではなく実数のI列 を使うこと——前回表示用と計算用の列を分けた理由がここで活きる
  • 表示形式は「数値・小数点以下2桁」に設定すると成績表らしく仕上がる
  • 次回は勝率の計算式を作る

次回予告

次回は「勝率の計算式を作る」。勝÷(勝+敗)という基本式に加えて、引分・勝敗なしの選手で起きる問題への対処も解説します。

▶︎ 次回:【第62回】勝率の計算式を作る

コメント

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