第65回 年間(投手)シートの列構成を完成させる

関数・自動化

前回は完投・完封・セーブをフラグ管理とCOUNTIFSで集計する方法を解説しました。今回はいよいよ年間(投手)シートの列構成を完成させます。第58回から7回にわたって作ってきた投球回・防御率・勝率・奪三振・完投・完封・セーブを1枚のシートにまとめ、投手成績表として仕上げます。

「これまでの回で関数はひと通り作ったけれど、シート全体の見通しが今ひとつ」という方も多いと思います。この回でパズルのピースが全部そろって、一枚の絵になるイメージで読んでみてください。

年間(投手)シートに並べる列の全体像

まず、完成後のシートにどんな列が並ぶかを確認しましょう。実際の成績管理表では次のような列構成になっています。

✅ 年間(投手)シートの完成列一覧
項目名 使う関数・しくみ 解説回
A #(背番号) 設定一覧シートから手入力または参照
B 選手名 設定一覧シートから手入力または参照
C 試合数 COUNTIF(登板した試合を数える)
D COUNTIFS(名前+勝敗「勝」) 第62回
E COUNTIFS(名前+勝敗「負」) 第62回
F セーブ COUNTIFS(名前+勝敗「S」) 第64回
G 勝率 IFERROR(勝÷(勝+負), 0) 第62回
H 防御率 IFERROR(自責点×9÷投球回, 0) 第61回
I 投球回(表示用) 「○回○/3」形式の表示変換 第60回
J 失点 SUMIF(名前で絞って失点を合計)
K 自責点 SUMIF(名前で絞って自責点を合計)
L 完投 SUMIF(完投フラグ 0/1 を合計) 第64回
M 完封 SUMIF(完封フラグ 0/1 を合計) 第64回
N 被安打 SUMIF(名前で絞って被安打を合計) 第63回
O 被本塁打 SUMIF(名前で絞って被本塁打を合計)
P 奪三振 SUMIF(名前で絞って奪三振を合計) 第63回
Q 与四死球 SUMIF(名前で絞って与四死球を合計) 第63回

A・B列(背番号・選手名)は手入力。C列以降はすべて関数で自動集計されます。

選手名(B列)の入れ方がすべての基点になる

年間(投手)シートで最も大切なのはB列の選手名の書き方です。ここに入力した文字列が、すべての関数の「条件」として使われるからです。

📝 B列の選手名はフォーム(投手)シートと一字一句同じにする

たとえばフォーム(投手)シートに「K.SUZUKI」と入力されている選手の名前を、年間(投手)シートのB列に「K. SUZUKI」(スペースあり)や「k.suzuki」(小文字)と書くと、SUMIFやCOUNTIFSが「条件に一致する行がない」と判定してしまい、すべて 0 になります。

B列の入力例 集計結果 理由
K.SUZUKI 正しく集計される ✅ フォームと完全一致
T. MIZUKO(スペースあり) すべて 0 になる ❌ 半角スペースが1文字違いとして扱われる
k.suzuki(小文字) 正しく集計される ✅ スプレッドシートは大文字・小文字を区別しない

大文字・小文字は問いませんが、スペースの有無は要注意です。設定一覧シートからコピー&ペーストで貼ると確実です。

全関数を列順に並べる

B2に選手名(例:K.SUZUKI)が入っているとして、各列に入れる関数を順番に確認します。フォーム(投手)シートの列構成は次のとおりです:D列=名前、E列=勝敗、F列=完投、G列=完封、H列=投球回(小数表記)、I列=失点、J列=自責点、K列=被安打、L列=被本塁打、M列=奪三振、N列=与四死球。

C列:試合数
=COUNTIF('フォーム(投手)'!D:D, B2)

フォーム(投手)のD列(名前)に B2 と一致する行が何行あるかを数えます。1試合に1行記録されるので、そのまま登板試合数になります。

D列:勝・E列:負
=COUNTIFS('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!E:E, "勝")  ← 勝
=COUNTIFS('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!E:E, "負")  ← 負

E列(勝敗)が「勝」または「負」と一致する行をそれぞれCOUNTIFSで数えます。

F列:セーブ
=COUNTIFS('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!E:E, "S")

E列(勝敗)が「S」の行を数えます(第64回で詳しく解説)。

G列:勝率
=IFERROR(D2/(D2+E2), 0)

勝÷(勝+負)で勝率を計算します。勝も負も 0 のとき(0÷0)になるのをIFERRORで防いで 0 を返します。

H列:防御率
=IFERROR(K2*9/投球回の計算値, 0)

自責点×9÷投球回(実数値)です。投球回は「表示用」(I列)ではなく、第58〜59回で作った実数変換後の値を参照してください(第61回で詳しく解説)。

I列:投球回(表示用)
例)=INT(投球回実数)&"回"&IF(MOD(投球回実数*3,3)=0,"",MOD(投球回実数*3,3)&"/3")

数値の投球回を「22回」「6回2/3」のように読みやすく変換する列です(第60回で詳しく解説)。

J列:失点・K列:自責点
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!I:I)  ← 失点
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!J:J)  ← 自責点

名前で絞ってそれぞれの数値列を合計します。

L列:完投・M列:完封
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!F:F)  ← 完投
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!G:G)  ← 完封

フラグ(0か1)を合計するだけで完投数・完封数が出ます(第64回で詳しく解説)。

N列:被安打・O列:被本塁打・P列:奪三振・Q列:与四死球
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!K:K)  ← 被安打
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!L:L)  ← 被本塁打
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!M:M)  ← 奪三振
=SUMIF('フォーム(投手)'!D:D, B2, 'フォーム(投手)'!N:N)  ← 与四死球

いずれも「名前で絞って、対応する列の数値を合計」という同じ構造です(第63回で詳しく解説)。

実際の集計結果で完成形を確認する

フォーム(投手)シートに記録された実データから集計した結果が下の表です。年間(投手)シートはこの状態が完成形になります。

# 選手名 試合数 S 勝率 防御率 投球回 失点 自責点 完投 完封
30 S.TANAKA 1 0 0 0 0 0 1回 0 0 0 0
10 T.NAKATA 3 2 0 0 1 1 9回 2 1 0 0
1 K.SUZUKI 6 2 0 0 1 1.64 22回 5 4 2 2
18 H.YAMAMOTO 5 1 0 1 1 0 6回2/3 2 0 0 0
51 S.YAMAOKA 4 0 2 0 0 5.84 12回1/3 11 8 0 0
14 T.OKADA(未登板) 0 0 0 0 0 0 0回 0 0 0 0

K.SUZUKIさんの完投2・完封2、H.OKITAさんのセーブ1がきちんと表示されています。未登板のD.MIWAさんはフォームに1行も登場しないため、すべての関数が自動で 0 を返しています。

2行目に入れた関数を3行目以降にコピーするだけで完成する

シートへの入力手順をSTEP形式で確認しましょう。

🔵 年間(投手)シートの作成手順
STEP 1:1行目にヘッダーを入力する

A1に「#」、B1に「選手名」、C1に「試合数」…と列名を横に並べます。前述の列一覧表をそのまま使ってください。

STEP 2:A2・B2に最初の選手の背番号と名前を入力する

A2に背番号(例:1)、B2に選手名(例:K.SUZUKI)を手入力します。フォーム(投手)シートの表記と完全一致させてください。

STEP 3:C2〜Q2に関数を1つずつ入れる

この記事で紹介した関数を1列ずつ入力します。最初の選手(B2)でしっかり動作確認してから次のステップへ進みましょう。

STEP 4:C2〜Q2を全選択してコピーする

C2からQ2まで横に選択し、コピーします(Ctrl+C または ⌘+C)。

STEP 5:3行目以降に貼り付ける

A列・B列に2人目以降の背番号と名前を入力し、C列〜Q列は STEP 4 でコピーした関数をそのまま貼り付けます。スプレッドシートが行番号を自動でずらしてくれるので、B3・B4…を参照する形に自動調整されます。

📝 関数コピー時の「$(ドル記号)」に注意

SUMIFやCOUNTIFSの範囲(例:'フォーム(投手)'!D:D)はシートの列全体を指定しているため、行方向にコピーしてもずれません。一方、条件(例:B2)は行ごとに変わってほしいので $ はつけないままにしておきます。

記述例 コピー時の動作
B2($なし) 3行目にコピーすると自動でB3に変わる ✅
‘フォーム(投手)’!D:D 列全体なので何行にコピーしてもそのまま ✅

「0回」の選手はどう表示されるか

未登板の選手(フォームに1行も登場しない選手)は、試合数・勝・負・セーブ・失点・自責点・完投・完封・被安打・奪三振・与四死球がすべて 0 になります。投球回の表示用セルは「0回」と表示されます。防御率・勝率はIFERRORで 0 を返すよう設計しているので、エラー(#DIV/0!)は出ません。

⚠️ 防御率の計算に使う「投球回」は表示用ではなく実数値を参照する

I列には「22回」「6回2/3」のような文字列が入っています。防御率の計算(H列)でこの文字列を参照すると、文字列÷数値になってしまい正しく計算できません。

防御率の分母には、第58〜59回で別途作成した実数変換後の投球回(数値)を使ってください。年間(投手)シートに非表示列として実数投球回を持たせておくのが、実際の成績管理表での運用方法です。

✅ この記事のまとめ
  • 年間(投手)シートはA〜Q列の17列で構成。A・B列(背番号・選手名)は手入力、C列以降はすべて関数で自動集計
  • B列の選手名はフォーム(投手)シートと一字一句同じ表記にする——スペースの有無がずれると全列が 0 になる
  • 2行目に全関数を入れたら3行目以降はコピー&ペーストするだけ。スプレッドシートが行番号を自動でずらしてくれる
  • 防御率の計算では表示用の文字列(「○回」)ではなく実数値の投球回を参照すること
  • 未登板選手はフォームに行がないためすべて自動で 0 になる——IFERRORのおかげでエラーも出ない
  • 次回は投手成績をグラフで可視化する

次回予告

次回は「投手成績をグラフで可視化する」。防御率の推移や奪三振の積み上げを折れ線グラフ・棒グラフで表示し、シーズンを通した投手陣の変化を一目で把握できるようにします。

▶︎ 次回:【第66回】投手成績をグラフで可視化する

コメント

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