草野球の成績管理表でよく使われる「勝率」は、実はSUMやCOUNTのような単体の関数だけでは求められません。今回はIF関数とCOUNTIF関数を組み合わせて、引き分けを除いた勝率を0除算エラーなく計算する複合式の作り方を解説します。
勝率計算の複合式とは
COUNTIF関数で「勝ち数」と「敗け数」をそれぞれ数え、その合計(=引き分けを除いた対戦数)が0のときはIF関数で計算そのものをスキップし、0でないときだけ割り算を実行する式です。引き分けを分母に含めない点と、対戦数0の試合序盤でもエラーを出さない点がポイントになります。
基本の組み立てはこうです。
=IF(COUNTIF(範囲,"勝")+COUNTIF(範囲,"敗")=0,"-",COUNTIF(範囲,"勝")/(COUNTIF(範囲,"勝")+COUNTIF(範囲,"敗")))
成績管理表での実例:勝率を求める
大阪グーニーズの「シーズン成績」シートに、試合ごとの勝敗を記録する列があるとします。E列に「勝」「敗」「分」のいずれかを入力する運用です。
| 試合日 | 対戦相手 | 勝敗 |
|---|---|---|
| 4/6 | ○○ファイターズ | 勝 |
| 4/13 | △△ベアーズ | 分 |
| 4/20 | □□イーグルス | 敗 |
| … | … | … |
このE列(E2:E30)をもとに、シーズン通算の勝率を求める式は次のようになります。
=IF(COUNTIF(E2:E30,"勝")+COUNTIF(E2:E30,"敗")=0,"-",COUNTIF(E2:E30,"勝")/(COUNTIF(E2:E30,"勝")+COUNTIF(E2:E30,"敗")))
「分」(引き分け)はCOUNTIFの数え上げ対象に含めていないため、自動的に分母から除外されます。シーズン序盤でまだ1試合も終わっていない場合や、勝敗が全て引き分けの場合でも、この式ならエラーにならず「-」が表示されます。
「シーズン成績」シートのE列など、各試合の結果を「勝」「敗」「分」のいずれかで入力する列を用意します。表記が揺れないよう、プルダウンリストで選択式にしておくと安心です。
集計欄のセルに「=IF(COUNTIF(」から式を入力していきます。範囲部分はE2:E30のようにドラッグで指定するか、直接タイプします。
式を確定すると、対戦数が0の間は「-」、1試合でも勝敗がつくとその時点での勝率が表示されます。以降は試合を入力するたびに自動で更新されていきます。
しくみを理解する:何が起きているのか
この式は、内部で次の順番に処理が進んでいます。
- まずCOUNTIF(範囲,”勝”)とCOUNTIF(範囲,”敗”)が、それぞれ独立に範囲内を数え上げる
- その2つを足し算し、「引き分けを除いた対戦数」を求める
- IF関数がその合計が0かどうかを先に判定する(=ここで割り算を実行する前にチェックが入る)
- 0であれば代替値(“-“など)を返し、割り算そのものを行わない
- 0でなければ、はじめて勝ち数÷(勝ち数+敗け数)の割り算を実行する
ポイントは、IFERROR関数のように「エラーが起きてから拾う」のではなく、エラーが起きる条件を先に見抜いて、そもそも危険な計算を実行させないという考え方です。分母が0になるかどうかをCOUNTIFの結果で事前に判定できるため、この設計が可能になっています。
よくあるミス
COUNTIFではなくCOUNTAやCOUNTで範囲全体(勝・敗・分すべて)を数えてしまうと、引き分けの試合まで分母に含まれ、正しい勝率より低い数値が出てしまいます。分母には「勝」と「敗」だけを足すことを忘れないようにしてください。
「勝」のつもりで「勝ち」「Win」など表記が混在すると、COUNTIFはそれらを別の文字列として扱うため、数え漏れが発生します。入力規則(プルダウン)で選択肢を固定し、表記を統一しておくと安全です。
- 勝率の複合式は「COUNTIFで勝ち数・敗け数を数える → IFで分母0を事前に判定する」という2段構えの設計
- 引き分けは分母に含めないのが正しい勝率の考え方(COUNTIFの対象を「勝」「敗」のみに絞る)
- IFERRORのようにエラーを後から拾うのではなく、IFで危険な条件を先に判定するのもエラー対策の一つの型
次回予告
次回のテーマは「関数の組み合わせ方・選び方」です。ここまで見てきたように、同じ「エラーを防ぐ」という目的でもIFERROR型とIF事前判定型のように複数のアプローチがあります。どんな場面でどの関数の組み合わせを選ぶべきか、判断基準を総括します。
▶︎ 次回:関数の組み合わせ方・選び方



コメント