第53回 規定打席未満の選手をランキングから除外する

関数・自動化

前回は「試合数×1.8」の規定打席を関数で自動計算する仕組みを作りました。今回はその規定打席の値を使って、打席数が足りない選手をランキングの集計対象から自動で除外する条件分岐を作ります。

「IFとANDを組み合わせる」と聞くと難しそうに感じるかもしれませんが、考え方はシンプルです。「打席数が規定以上なら打率を表示、そうでなければ除外する」という2択を関数で書くだけです。一緒に手順を追っていきましょう。

なぜ「除外する」仕組みが必要なのか

前々回(第51回)でも触れましたが、改めて確認しておきましょう。規定打席の除外ロジックがないと、こんな問題が起きます。

規定打席なしでの打率ランキング(問題あり)

1位:YOSHIDA  打率.400 (5打席のみ)
2位:SUZUKI   打率.636 (30打席)
3位:TANAKA   打率.368 (24打席)
…

YOSHIDAさんは5打席だけの出場で打率.400を記録していますが、試合数が少ない中での数字です。これがランキングトップに出てしまうのは公平ではありません。規定打席(18打席)でフィルタをかけると、この選手は自動的に除外されます。

IFとANDの役割を整理する

今回使う関数は2つです。それぞれの役割を先に確認しておきましょう。

関数 役割 書き方のイメージ
IF条件を満たすかどうかで、表示する値を切り替える=IF(条件, 真の値, 偽の値)
AND複数の条件がすべて満たされているかを判定する=AND(条件1, 条件2, …)
📝 今回ANDが必要な理由

打率ランキングに載せるには「打席数が規定以上」という条件だけでよさそうですが、実際には「打数が1以上(0除算を防ぐ)」かつ「打席数が規定以上」の2条件を同時に満たす必要があります。この「かつ」を表現するのがAND関数です。IFの条件部分にANDを入れ子にして使います。

関数の完成形

年間シートの打率列(例:D列)には、すでに =IFERROR(安打/打数, 0) のような式が入っています。これをランキング用に「規定打席未満なら除外」の条件付きに書き換えます。

✅ 規定打席チェック付きの打率計算式
=IF(AND(E2>=規定打席セル, F2>=1), IFERROR(G2/F2, 0), "")

各引数の意味は次の通りです。

  • E2:打席数(規定打席と比較する列)
  • 規定打席セル:第52回で作った規定打席の自動計算セル(絶対参照で固定)
  • F2:打数(0除算防止のため1以上かチェック)
  • G2:安打数
  • 条件を満たさない場合は ""(空白)を返す→ランキング対象外になる
📝 除外のときに「0」ではなく「””(空白)」を返す理由

打率ランキングをLARGE関数で自動生成するとき(第68回で解説予定)、除外した選手の値が「0」だと「打率0.000の選手」としてランキングに混入してしまいます。「””(空白)」を返しておくと、LARGE関数は空白を無視してくれるので、規定外の選手がランキングに出てくることを防げます。

実際のデータで動作を確認する

現在のデータ(10試合・規定打席18)で各選手がどう処理されるか確認します。打席数(E列)が18以上かどうかが判定のポイントです。

選手名 打席数 規定(18)クリア 打率の表示 ランキング対象
SUZUKI30.636
YAMAMOTO30.222
YAMASAKI29.286
YAMAOKA29.240
OKADA28.357
SATO27.318
TANAKA24.368
ITO23.227
MORI23.368
OKADA19.200
YAMADA13(空白)
SAITO10(空白)
KANEKO9(空白)
YOSHIDA5(空白)
打席0の選手(複数)0(空白)

打率.400のYOSHIDAさん(5打席)はきちんと除外され、実際の打率ランキングはSUZUKI(.636)→助っ人(.368)またはTANAKA(.368)→H.OKITA(.357)の順になります。

関数の読み方をゆっくり解説する

完成式をもう一度見ながら、何をしているかを一行ずつ追いかけましょう。

① IFの「条件」部分
AND(E2>=規定打席セル, F2>=1)

「打席数(E2)が規定打席以上」かつ「打数(F2)が1以上」の両方を満たすかチェックします。どちらか一方でも満たさなければ、ANDはFALSEを返します。

② IFの「真の値」部分(条件を満たした場合)
IFERROR(G2/F2, 0)

条件を満たした選手には打率(安打÷打数)を計算して表示します。IFERRORは念のための0除算対策ですが、F2>=1の条件をANDで確認済みなのでエラーは実質起きません。

③ IFの「偽の値」部分(条件を満たさない場合)
""

条件を満たさない選手のセルは空白になります。ランキング用のLARGE関数は空白を無視するため、除外した選手がランキングに紛れ込む心配がありません。

OPSランキングにも同じロジックを使う

打率と同様に、OPSのランキング用の列にも同じ考え方の除外ロジックを適用できます。打率のセル参照をOPSのセルに変えるだけです。

✅ OPS用の除外ロジック
=IF(E2>=規定打席セル, M2, "")

OPSはすでにIFERRORで0が返るよう設定済みのため、打数>=1の条件は省略できます。「打席数が規定以上ならOPSの値を表示、そうでなければ空白」というシンプルな1条件で十分です。

⚠️ 規定打席セルは必ず絶対参照にする

IF式を2行目から全選手分(30行目など)コピーするとき、規定打席セルへの参照がずれると「規定なし」と同じ状態になってしまいます。必ず $P$1 のように絶対参照($マーク)で固定してからコピーしてください。

=IF(AND(E2>=$P$1, F2>=1), IFERROR(G2/F2, 0), "")
✅ この記事のまとめ
  • 規定打席未満の選手を除外する式は =IF(AND(打席数>=規定打席, 打数>=1), IFERROR(打率計算, 0), "")
  • 除外した選手のセルは 0 ではなく 空白(””) にする→LARGE関数がスキップしてくれる
  • AND関数で「打席数が規定以上」かつ「打数が1以上」の2条件を同時チェックする
  • OPS用は打席数1条件のシンプルなIFで十分(OPSはIFERROR設定済みのため)
  • 全選手にコピーするときは規定打席セルを絶対参照($マーク)で固定する

次回予告

次回は「表示形式を整える:打率を3桁で表示する方法」。計算式が完成した打率やOPSを、見やすい表示形式(.000や0.000)に整える書式設定のテクニックを解説します。

▶︎ 次回:【第54回】表示形式を整える:打率を3桁で表示する方法

コメント

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