第85回 #DIV/0!エラーの原因と直し方

運用・トラブル対応

今回から第11章「トラブルシューティング」に入ります。成績管理表を運用していると、ある日突然「セルがエラーだらけになっている」なんてことが起こるものです。そのなかでも真っ先に出会うことになるのが#DIV/0!エラーではないでしょうか。

「セルに #DIV/0! と表示されてしまった」「シーズン前に表を開いたらエラーだらけになっていた」——そんな経験に心当たりのある方もいるかもしれません。このエラーは、打率・防御率・勝率など割り算を使う計算では避けて通れないものです。ですが、仕組みさえ理解してしまえば対処はとても簡単です。順を追って整理していきましょう。

#DIV/0!エラーとは何か

一言でいうと「0で割り算しようとしたときに出るエラー」です。数学の世界と同じく、スプレッドシートでも0で割ることは定義されていません。

📝 #DIV/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列)に、こんな式を入れているとします。

✅ 年間(野手)シート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列)に入る式は少し複雑になります。例えば、次のような式を組んでいるとします。核心部分だけを取り出すと、構造はこうです。

✅ 年間(投手)シート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除算を防いでいます。投球回が0かどうかを直接チェックするほうが、意図がはっきりして安全だからです。

勝率の式:シンプルなIFだけ

チームシートの勝率列(F列)の式は、これまでの2つと比べるとぐっとシンプルです。第79回で作った式を思い出してみましょう。

✅ チームシートF列の勝率計算式
=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は「すべてのエラー」を拾ってしまう点に注意

IFERRORは#DIV/0!だけでなく、#REF!・#VALUE!・#NAME?など、あらゆるエラーを一律に0へ変換してしまいます。

例えば、参照先のシート名をうっかり変更してしまい#REF!エラーが発生したとしても、IFERRORがそれを0として隠してしまうため、ミスに気づきにくくなることがあります。打率のように「0除算しか起こりえない」とわかっている箇所に限定して使うのが安全です。

すでに#DIV/0!が出てしまっているセルを直す

ここからは「すでにエラーが表示されてしまっている」場合の直し方を見ていきます。

STEP 1
エラーが出ているセルをクリックして、今入っている式を確認する

数式バー(上部の入力欄)に、現在入っている式が表示されます。「=G2/F2」のようにIFやIFERRORのない生の割り算式になっていれば、それが原因です。

STEP 2
IFERRORで式を包む

例えば =G2/F2 となっていたら、=IFERROR(G2/F2, 0) に書き換えます。数式バーをクリックして編集し、Enterキーで確定すれば完了です。

STEP 3
修正したセルをコピーして、同じ列の他のセルに貼り付ける

修正したセルを選択して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!エラーの原因と直し方

コメント

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