前回は投球回の小数表記(1.1・1.2)を正しい実数に変換する INT + MOD × 10 ÷ 3 のロジックを学びました。今回はそれを複数登板の合計に応用します。
「変換式はわかった。でも登板ごとにバラバラに入力された投球回を選手別にどうやって合計するの?」という疑問が今回のテーマです。ここで登場するのが SUMPRODUCT関数。少し見た目は複雑ですが、考え方を理解すれば必ず書けるようになります。
なぜSUMIFではなくSUMPRODUCTを使うのか
選手ごとの数値を合計するときはSUMIF関数を使うのが基本でした(第46回)。しかし投球回の合計でSUMIFを使うと問題が起きます。
SUMIFは「条件に合うセルの値をそのまま足す」関数です。投球回の入力値(1.1・0.2 など)をそのまま足してしまうため、前回説明した「小数部分の足し算ミス」が発生します。
NAKATAの投球回入力値:0.2 + 1.0 + 2.0 + 2.0 + 1.2 SUMIF結果:6.4 → 「6回4/3?」(存在しない数値) 正しくは:6回2/3 = 6.666…
SUMIFは「合計する前に変換する」ことができません。変換と合計を同時にこなせる関数が必要です。それがSUMPRODUCTです。
SUMPRODUCT関数の基本
SUMPRODUCTは「複数の配列を掛け合わせて合計する」関数ですが、今回は「条件に合う行だけを変換しながら合計する」という使い方をします。
=SUMPRODUCT(
('フォーム(投手)'!D:D=B2) *
(INT('フォーム(投手)'!H:H) + MOD('フォーム(投手)'!H:H, 1) * 10 / 3)
)
各部分の意味:
('フォーム(投手)'!D:D=B2):名前列が対象選手と一致する行を1(TRUE)、それ以外を0(FALSE)で返すINT(…) + MOD(…) * 10 / 3:前回の変換式をフォームの投球回列(H列)に適用する- 両者を
*で掛け合わせると、対象選手の行だけ変換後の値、それ以外は0になる - SUMPRODUCTがその全行を合計する
SUMPRODUCTの中で (条件) * (値) と書くと、条件がTRUEの行は「1×値=値」、条件がFALSEの行は「0×値=0」になります。つまり条件に合う行の値だけが残って合計される仕組みです。COUNTIFSやSUMIFSが「条件に合うセルをカウント・合計する」のと同じ発想を、より柔軟な計算に応用したものがSUMPRODUCTです。
実際のデータで計算過程を追う
NAKATAさんの投球回合計を例に、式の中で何が起きているかを一行ずつ追います。フォーム(投手)シートのNAKATA登板データは次の通りです。
| 登板 | 入力値(H列) | 選手一致? | 変換後の実数 | ×の結果 |
|---|---|---|---|---|
| 第1試合 | 0.2 | 1(TRUE) | 0.666… | 0.666… |
| 第3試合 | 1.0 | 1(TRUE) | 1.000 | 1.000 |
| 第4試合 | 2.0 | 1(TRUE) | 2.000 | 2.000 |
| 第5試合 | 2.0 | 1(TRUE) | 2.000 | 2.000 |
| 第7試合 | 1.2 | 1(TRUE) | 1.666… | 1.666… |
| 他選手の行 | (各値) | 0(FALSE) | (各変換値) | 0(消える) |
| SUMPRODUCT合計 | 6.666… | |||
6.666…=6回2/3。年間シートの「6回2/3」と一致しています。0.2(0回2/3)と 1.2(1回2/3)が正しく変換されて合算された結果です。SUMIFで足していたら 0.2+1.0+2.0+2.0+1.2=6.4 という誤った値になっていました。
式を年間(投手)シートに入力する手順
フォーム(投手)シートのH列が投球回の入力値です。年間(投手)シートの投球回列(例:I列)にSUMPRODUCT式を入力します。
B2に選手名が入っている前提で、I2セルに次の式を入力します。
=SUMPRODUCT(
('フォーム(投手)'!D:D=B2) *
(INT('フォーム(投手)'!H:H) + MOD('フォーム(投手)'!H:H, 1) * 10 / 3)
)
I2の式を全投手分の行にコピーします。B列の選手名(B2)が相対参照になっているため、各行に対応した選手の合計が自動で計算されます。フォームシートへの参照は列全体指定(D:D・H:H)のため絶対参照不要です。
NAKATAのセルが 6.666…、S.SADAが 12.333… になっていれば正しく動作しています。次の回(第60回)でこの実数を「6回2/3」形式の表示に変換します。
フォーム(投手)のようにシート名に括弧が含まれる場合、スプレッドシートの参照式では 'フォーム(投手)'!H:H のようにシート名をシングルクォート(’)で囲む必要があります。括弧やスペースのないシート名なら不要です。
- 投球回の合計にSUMIFを使うと小数部分の誤りが蓄積するためSUMPRODUCTを使う
- 式は
=SUMPRODUCT((名前列=選手名) * (INT(投球回列) + MOD(投球回列, 1) * 10 / 3)) (条件) * (変換値)の掛け算で「対象選手の行だけ変換後の値を残し、他は0にする」仕組み- NAKATAさん(6.666…=6回2/3)で年間シートの表示と一致を確認。SUMIFでは6.4という誤値になる
- 次回(第60回)でこの実数を「○回○/3」形式の見やすい表示に変換する
次回予告
次回は「投球回を『○回○/3』形式で表示する」。SUMPRODUCT式で求めた6.666…を「6回2/3」という読みやすい形式に変換する表示関数の作り方を解説します。
▶︎ 次回:【第60回】投球回を「○回○/3」形式で表示する



コメント