前回は投球回の実数(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)を求める式はこうなります。
=IFERROR(K2*9/I2, 0)
シンプルに見えますが、IFERROR で囲むことが非常に重要です。その理由は次のセクションで詳しく説明します。
なぜIFERRORが必要なのか
防御率の計算式は K2*9/I2 です。ところが登板のない選手は投球回が 0 になるため、0 で割り算が発生して #DIV/0! エラーが表示されてしまいます。
| 選手名(仮) | 投球回(実数) | 自責点 | IFERROR なし | IFERROR あり |
|---|---|---|---|---|
| NAKATA(登板なし) | 0 | 0 | #DIV/0! | 0 |
| TANAKA(1回) | 1.000 | 0 | 0.00 | 0.00 |
| YAMADA(12回1/3) | 12.333… | 8 | 5.84 | 5.84 |
登板なしの選手でエラーが出ると、ランキング集計や条件付き書式が正しく動かなくなります。先手を打って IFERROR で 0 を返すようにしておきましょう。
IFERROR(計算式, エラー時の値) は「計算式がエラーになったら代わりにこの値を返す」という関数です。第47回で打率の計算に使ったものと同じ考え方ですね。防御率でも必ずセットで使う、と覚えておいてください。
関数を3つのパーツに分解して理解する
IFERROR( … , 0)
外側の IFERROR は「中の計算式がエラーになったら 0 を表示する」ためのラッパーです。登板のない選手の行で投球回が 0 になったとき、 #DIV/0! の代わりに 0 を返します。
K2*9
K2 は自責点のセルです。防御率は「9イニング当たりの自責点」なので、まず自責点に 9 をかけます。YAMADAさんなら 8×9=72 になります。
/I2
I2 は前回・前々回で作った投球回の実数(6.666…や12.333…)が入っている列です。72÷12.333… = 約5.84 となります。ここで重要なのは「6回2/3」という文字列ではなく実数のI列を使うこと。前回、表示用と計算用の列を分けた理由がここで活きてきます。
実際のデータで計算結果を確認する
年間(投手)シートの全選手で防御率を確認します。選手名は仮名に置き換えています。
| 選手名(仮) | 投球回(実数) | 自責点 | 計算式(自責×9÷回) | 防御率 |
|---|---|---|---|---|
| SUZUKI | 22.000 | 4 | 4×9÷22 | 1.64 |
| YAMAOKA | 9.000 | 1 | 1×9÷9 | 1.00 |
| SATO | 6.666… | 0 | 0×9÷6.666… | 0.00 |
| YAMADA | 12.333… | 8 | 8×9÷12.333… | 5.84 |
| SAKAI | 5.000 | 2 | 2×9÷5 | 3.60 |
| TANAKA | 1.000 | 0 | 0×9÷1 | 0.00 |
| OKADA | 2.000 | 0 | 0×9÷2 | 0.00 |
| NAKATA(登板なし) | 0.000 | 0 | IFERRORで回避 | 0 |
年間(投手)シートに表示されている防御率と完全に一致しています。NAKATAさんのように登板がない選手もエラーなく 0 が返ります。
防御率の表示形式を整える
防御率は一般に小数点以下2桁で表示するのがスタンダードです。セルの書式設定で「数値」→「小数点以下の桁数:2」に設定しておきましょう。
- 防御率の列(たとえばH列)を選択する
- メニューの「表示形式」→「数値」→「数値」を選ぶ
- 小数点以下の桁数を「2」に設定する
これで 1.636… が「1.64」、5.837… が「5.84」のようにきれいに表示されます。0の場合は「0.00」になります。
「計算できない」よくある原因チェックリスト
防御率がうまく計算されないときは、以下の3点を順番に確認してください。
- I列が実数になっているか——「6回2/3」という文字列ではなく「6.666…」という数値が入っているか確認する。文字列だと #VALUE! エラーになる。
- K列が数値になっているか——自責点が文字列として入力されていると計算できない。セルの左寄りになっている場合は文字列の疑いがある。
- 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回】勝率の計算式を作る



コメント