SUMPRODUCT関数は、複数の範囲の対応する要素同士を掛け合わせてから、その結果をまとめて合計する関数です。草野球の成績管理表では、投球回のように「6.1」「5.2」といった特殊な表記を正しく合算したい場面で真価を発揮します。今回はその仕組みを、投球回の合計を例に解説します。
SUMPRODUCT関数とは
複数の配列(範囲)を用意し、同じ位置にある要素同士をすべて掛け算したうえで、その掛け算結果をまとめて合計する関数です。「掛け算してから合計する」という2段階の処理を、1つの式でまとめて行えるのが特徴です。
基本の書式はこうです。
=SUMPRODUCT(配列1, [配列2], [配列3], …)
配列は複数指定できますが、1つの配列だけを指定することもできます。その場合は掛け算の相手がいないため、単純にその範囲の合計を返す動作になり、結果だけを見るとSUM関数と同じに見えます。ただしSUMPRODUCTの内部では、範囲を1つの塊(配列)として一括処理しているという点がSUMとは異なります。この「範囲を配列として扱い、要素ごとに計算してから合計できる」という性質が、今回の投球回の合算で重要な役割を果たします。
成績管理表での実例:投球回を正しく合計する
大阪グーニーズの投手成績シートでは、登板ごとの投球回をE列に記録しているとします(以下、E列に投球回が入っている前提で解説します)。野球の投球回は、1イニングを3アウトで区切るという特殊なルールがあるため、「6回1/3」を「6.1」、「6回2/3」を「6.2」と表記する慣習があります。この「.1」「.2」は10進数の小数ではなく、あくまで端数のアウト数を表している点に注意が必要です。
| 試合日 | 対戦相手 | 投球回 |
|---|---|---|
| 4/6 | ○○ファイターズ | 6.1 |
| 4/13 | △△ベアーズ | 5.2 |
| 4/20 | □□イーグルス | 7.0 |
この3試合分の投球回をSUM関数でそのまま合計すると、6.1+5.2+7.0=18.3という結果になります。しかし実際のアウト数で考えると、6回1/3(19アウト)+5回2/3(17アウト)+7回0/3(21アウト)=合計57アウトとなり、57÷3=19回0/3、つまり本来は「19.0」が正しい合計値です。10進数として足し算するSUM関数では、この「.1」「.2」表記を正しく扱うことができません。
=SUMPRODUCT(INT(E2:E4)*3+MOD(E2:E4*10,10))
この式は、E列の各投球回を「整数部分(丸々投げたイニング数)×3」と「小数部分を10倍して求めた端数のアウト数」に分解し、それぞれを範囲全体に対して一括計算したうえで合計しています。結果として、投球回の合計をいったん「アウト数」という共通の単位に揃えてから足し算していることになります。
「6.1」を例にすると、整数部分の「6」は丸々投げたイニング数、小数部分の「.1」は端数のアウト1個を意味します。この2つを別々に数値化するのが、式の考え方の土台になります。
投球回の集計欄に「=SUMPRODUCT(INT(E2:E4)*3+MOD(E2:E4*10,10))」と入力してEnterキーで確定します。これで3試合分の合計アウト数(この例では57)が求まります。
合計アウト数が入ったセル(例:F5)の隣に「=INT(F5/3)&”.”&MOD(F5,3)」と入力すると、アウト数を3で割った商と余りから、見慣れた「19.0」のような投球回表記に自動で変換されます。
しくみを理解する:SUMPRODUCTは何をしているのか
SUMPRODUCT関数は、指定した範囲を1セルずつではなく「ひとかたまりの配列」として受け取り、対応する位置の要素同士を計算してから、その結果をすべて合計するという処理を行っています。
- 今回の式の「INT(E2:E4)*3」は、範囲内の各セルの整数部分に「3」という数を1つずつ掛ける処理を、範囲全体に対して一括で行っている
- 「MOD(E2:E4*10,10)」も同様に、範囲全体に対して「10倍して10で割った余りを求める」という計算が一度に行われている
- 本来こうした「範囲全体への計算の一括適用」は、配列数式(Ctrl+Shift+Enterで確定する特殊な入力方法)を使わないと難しい処理だが、SUMPRODUCTを使うと通常の入力方法のままこの一括計算ができる
よくあるミス
投球回のセルをそのままSUM関数で合計してしまうケースです。「.1」「.2」を10進数の小数として扱ってしまうため、端数のアウト数の合計が3つ以上(つまり1イニング分)になる場面で、合計値が実際より少なく表示されてしまいます。
アウト数を3で割った余りがちょうど0になる(端数がぴったり1イニング分に達している)ケースで、変換後の表記が「19.0」のように「.0」で終わるのは正しい動作です。「.1」や「.2」が付いていないと計算が間違っていると思いがちですが、余りが0の場合は端数なしの丸々投げたイニングとして扱って問題ありません。
- SUMPRODUCT関数は「配列同士を掛け合わせてから合計する」関数
- 投球回の「.1」「.2」表記は小数ではなく端数のアウト数を表しており、単純なSUMでは正しく合算できない
- SUMPRODUCTを使えば、範囲全体への一括計算を配列数式を使わずに行える
次回予告
次回のテーマは「ARRAYFORMULA関数」です。1つの式を範囲全体に一括適用するしくみを、全行の打率を自動計算する例を通して解説していきます。
▶︎ 次回:ARRAYFORMULA関数の使い方としくみ



コメント