今回から第11章「トラブルシューティング」に入ります。実際に成績管理表を運用していると、思いがけないエラーに遭遇することがあります。まず最初に扱うのが#DIV/0!エラーです。
「セルに #DIV/0! と表示されてしまった」「シーズン前に表を開いたらエラーだらけになっていた」——そういった経験をした方もいるかもしれません。このエラーは打率・防御率・勝率など、割り算を使う計算で必ず直面します。仕組みを理解すれば対処は簡単です。一緒に整理していきましょう。
#DIV/0!エラーとは何か
一言でいうと「0で割り算しようとしたときに出るエラー」です。数学と同じで、スプレッドシートでも0での割り算は定義されていません。
| 場面 | 式 | 0になる理由 |
|---|---|---|
| 打率 | =安打/打数 |
シーズン前・欠場が続くと打数が0になる |
| 防御率 | =自責点×9÷投球回 |
登板がない投手の投球回が0になる |
| 勝率 | =勝÷(勝+負) |
シーズン開始前は勝も負も0なので分母が0 |
| 出塁率 | =(安打+四死球)÷(打数+四死球+犠飛) |
全打席が犠打のみなどで分母が0になりうる |
シーズン開始直後や、出場していない選手の行に特に発生しやすいのが特徴です。
対処法は2種類:IFERRORとIF
対処の関数は2つあります。「エラーが出てから対処するIFERROR」と「エラーが出る前に防ぐIF」です。どちらを使うかは状況で使い分けます。
| 関数 | 仕組み | 向いている場面 |
|---|---|---|
IFERROR |
計算を試みて、エラーになったら代わりの値を返す | 打率のように「打数が0=データなし」が明確な場合 |
IF |
条件を先にチェックして、0なら計算せずに直接0を返す | 勝率のように「分母が0かどうか」が明確に判断できる場合 |
実用上はどちらを使っても#DIV/0!エラーを防げます。ただしIFERRORは「何かエラーが起きたら全部0にする」のに対し、IFは「この条件のときだけ0にする」と意図が明確です。
本連載の成績管理表では、打率にはIFとIFERRORを組み合わせ、勝率にはIFだけを使っています。実際の式を見ながら確認していきます。
打率の実際の式:IFとIFERRORの二重構造
年間(野手)シートの打率列(D列)に入っている実際の式はこうなっています。
=IF($B2="", "", IFERROR(G2/F2, 0))
式を外側から順に読み解きます。
| パーツ | 意味 |
|---|---|
IF($B2="", "", …) |
B列(選手名)が空欄なら空欄を返す。選手がいない行には何も表示しない |
IFERROR(G2/F2, 0) |
安打(G2)÷打数(F2)を計算し、エラー(打数が0)なら0を返す |
二重構造になっているのは理由があります。IFだけだと「選手はいるが打数が0(試合に出たが全打席が四球など)」の場合にエラーになります。IFERRORだけだと選手がいない空欄行にも0が表示されてしまいます。両方を組み合わせることで、「選手がいる行だけ計算し、計算できなければ0にする」という動作を実現しています。
防御率の実際の式:IFで投球回の0をチェック
年間(投手)シートの防御率列(H列)に入っている実際の式は少し複雑です。核心部分に絞ると構造はこうなっています。
=IF($B2="", "",
LET(
total_outs, SUMPRODUCT(…投球回をアウト数に変換…),
IF(total_outs=0, 0, ROUND($K2*9/(total_outs/3), 2))
)
)
外側のIF・内側のIFの役割を整理します。
| パーツ | 役割 |
|---|---|
IF($B2="", "", …) |
選手名が空欄の行は空欄のまま表示——打率と同じ考え方 |
LET(total_outs, …) |
投球回を変換したアウト数合計を「total_outs」という名前で計算・保存する(LETは値に名前をつけて使いまわす関数) |
IF(total_outs=0, 0, ROUND(…)) |
アウト数(=投球回)が0なら0を返す——登板がない投手の0除算を防ぐ |
防御率ではIFERRORではなくIF(total_outs=0)で防いでいます。投球回が0かどうかを直接チェックするほうが、意図が明確で安全だからです。
勝率の実際の式:シンプルなIFだけ
チームシートの勝率列(F列)の式は最もシンプルです。第79回で作った式です。
=IF(C2+D2=0, 0, C2/(C2+D2))
「勝(C2)+負(D2)がゼロなら0を返す、そうでなければ勝÷(勝+負)を計算する」というシンプルな構造です。
チームシートはA列に年度(2026・2027…)が手入力で入っているため、「行が空欄かどうか」ではなく「勝+負が0かどうか」だけをチェックすれば十分です。打率や防御率のような「選手がいない行の処理」は必要ありません。
3つの式を並べて比較する
ここまで見てきた3つの式の構造を横に並べて整理します。
| 指標 | エラー防止の方法 | 理由 |
|---|---|---|
| 打率 | IF(選手名="","", IFERROR(安打/打数, 0)) |
選手がいない行は空欄、打数0は0を返す——2つの条件を別々に対処 |
| 防御率 | IF(選手名="","", IF(投球回=0, 0, 自責点×9÷投球回)) |
投球回が0かを明示的にチェック——IFERRORより意図が明確 |
| 勝率 | IF(勝+負=0, 0, 勝÷(勝+負)) |
分母が0かを先にチェック——シンプルに1段のIFだけで完結 |
IFERRORは#DIV/0!だけでなく、#REF!・#VALUE!・#NAME?など、あらゆるエラーを同じように0に変換してしまいます。
たとえば参照先のシート名を誤って変更してしまったとき(#REF!エラー)が発生しても、IFERRORが0として隠してしまうため、ミスに気づきにくくなる場合があります。打率のように「0除算しか起きない」とわかっている箇所に使うのが安全です。
すでに#DIV/0!が出てしまっているセルを直す
「すでにエラーが表示されてしまっている」という場合の直し方です。
数式バー(上部の入力欄)に今入っている式が表示されます。「=G2/F2」のようにIFやIFERRORがない生の割り算式が入っていれば、それが原因です。
例えば =G2/F2 になっていたら =IFERROR(G2/F2, 0) に書き換えます。数式バーをクリックして編集し、Enterキーで確定します。
修正したセルを選択してCtrl+C(コピー)、同じ列の残りのセル範囲を選択してCtrl+V(貼り付け)すれば、全行に修正式が適用されます。
実際のデータで確認する
年間(野手)シートの実データで、IFとIFERRORが正しく機能しているかを確認します。
| 選手名 | 打数(F列) | 安打(G列) | 打率(D列) | 動作 |
|---|---|---|---|---|
| SUZUKI | 22 | 14 | .636 | 通常計算(14÷22) |
| NAKATA | 0 | 0 | 0 | 打数0 → IFERRORが0を返す(エラーなし) |
| (空欄行) | — | — | (空欄) | 選手名なし → 外側のIFが空欄を返す |
NAKATAさんはまだ出場がなく打数0ですが、エラーではなく「0」と表示されています。空欄行には何も表示されていません。IFとIFERRORの二重構造が正しく機能している状態です。
- #DIV/0!は「0で割り算しようとしたとき」に出るエラー——打率・防御率・勝率など割り算を使う指標で必ず意識が必要
- 対処の関数はIFERROR(エラーが出たら0に変換)とIF(分母が0かを先にチェック)の2つ
- 打率は
IF(選手名="","", IFERROR(安打/打数, 0))——「空欄行は空欄、打数0は0」を二重構造で実現 - 防御率は
IF(投球回=0, 0, 計算式)——投球回が0かを明示的に確認するIFが適切 - 勝率は
IF(勝+負=0, 0, 勝/(勝+負))——シンプルに1段のIFだけで完結 - IFERRORは#DIV/0!以外のエラーも隠してしまう——参照ミスなどを見逃さないよう、使う箇所は限定するのが安全
次回予告
次回は「#REF!エラーの原因と直し方」。#REF!は「参照先が見つからない」エラーです。列・行・シートを削除したあとに突然セルが #REF! になることがあります。原因のパターンと修正手順を解説します。
▶︎ 次回:【第86回】#REF!エラーの原因と直し方



コメント