SUM関数の使い方|合計が合わないときの原因も解説

執筆者:

カテゴリ:

SUMは、指定した範囲の数値を合計する関数です。最も基本的で、最もよく使われる関数です。

書き方は単純ですが、「合計が合わない」という相談が最も多い関数でもあります。この記事では基本に加えて、その原因の見つけ方まで扱います。

書式

=SUM(範囲1, [範囲2], ...)

範囲はいくつでも並べられます。

基本の使い方

A
1 120
2 340
3 250
=SUM(A1:A3)   → 710

飛び飛びのセルを足すには、カンマで区切ります。

=SUM(A1, A3, A5)

範囲と個別セルを混ぜることもできます。

=SUM(A1:A10, C1, E5:E8)

列全体を指定すれば、行が増えても数式を直す必要がありません。

=SUM(A:A)

文字列や空欄は無視されるので、見出し行を含めても問題ありません。ただし、合計を出しているセル自身を範囲に含めると循環参照になります。 列全体を使うときは、合計を別の列か別のシートに置いてください。

数値を直接足すこともできる

=SUM(100, 200, 300)   → 600

ただしこの用途なら =100+200+300 で十分です。SUMの利点は範囲を扱えることにあります。

「合計が合わない」4つの原因

これが実務で最も多い問題です。原因はほぼこの4つに絞られます。

1. 数値が文字列になっている

最も多い原因です。 他システムからコピーしたデータ、CSVから読み込んだデータでよく起きます。

見分け方: セルの中身が左寄せになっていたら文字列です。数値は既定で右寄せになります。

確認する:

=COUNT(A1:A100)

COUNT は数値だけを数えます。行数より少なければ、文字列が混ざっています。

直す:

=SUM(VALUE(A1:A100))

または元データ側で「データ → 数値に変換」を行うか、*1 を掛けた作業列を作ります。

2. 範囲が足りていない

行を追加したのに、数式の範囲が古いまま。=SUM(A2:A50) のままで51行目以降が入っていない、というケースです。

対策は列全体で指定することです。=SUM(A:A) にしておけば、行を追加しても自動で含まれます。

3. 非表示の行・フィルタで隠れた行も合計されている

SUMは見えていない行も足します。フィルタで絞り込んだ状態の合計を出したいなら SUBTOTAL を使ってください。

=SUBTOTAL(109, A2:A100)

109 は「合計、非表示の行を除く」という意味です。フィルタと合計を併用する場面では、SUMではなくSUBTOTALが正解です。

4. 小数の丸め誤差

見た目は 100 なのに、実際には 100.004 が入っている、というケース。表示桁数を減らしていると気づけません。

確認する: 桁数の表示を増やすか、

=A1 - ROUND(A1, 0)

で差を見ます。

直す: 元の値を ROUND で丸めるか、合計側で =ROUND(SUM(A:A), 0) とします。表示だけ丸めても内部の値は変わらないので、計算に使うなら値そのものを丸めてください。

条件を付けて合計したいとき

「東京の分だけ」のように条件を付けるなら、SUMIF または SUMIFS を使います。

=SUMIF(A:A, "東京", C:C)
=SUMIFS(C:C, A:A, "東京", B:B, "商品A")

エラーが混ざっているとき

範囲内に #N/A#DIV/0! が1つでもあると、SUMもエラーになります。

対策は2つあります。

元のエラーを潰す(推奨)

=IFERROR(VLOOKUP(...), 0)

合計側で無視する

=SUMIF(A2:A100, "<>#N/A")

または AGGREGATE(Excel)や QUERY(スプレッドシート)を使う方法もあります。

ただし、エラーを隠す前に原因を確認してください。 #N/A はマスタに無いデータがあるという重要な情報です。詳しくは IFERROR で扱っています。

複数シートをまたいで合計する

同じ形のシートが並んでいる場合、Excelでは次の書き方ができます。

=SUM(4月:6月!B10)

Googleスプレッドシートではこの書き方(3D参照)が使えません。 素直に足すか、{} で範囲を縦に結合します。

='4月'!B10 + '5月'!B10 + '6月'!B10

シート数が多いなら、集計用シートに IMPORTRANGE や参照をまとめる方法が確実です。

Excelとの違い

基本の書式・挙動は同じです。 違いは次の点です。

Excel スプレッドシート
3D参照 SUM(Sheet1:Sheet3!A1) 使える 使えない
AGGREGATE(エラー無視の集計) ある ない
QUERY による集計 ない ある
列全体指定 SUM(A:A) 使える 使える

スプレッドシートでは AGGREGATE の代わりに QUERYFILTER を使います。

まとめ

  • – 書式は =SUM(範囲)。飛び飛びはカンマ区切り
  • 列全体 A:A で指定すると、行が増えても壊れない
  • – 合計が合わない原因は「文字列・範囲不足・非表示行・丸め誤差」の4つ
  • – フィルタ中の合計は SUBTOTAL
  • – 条件付きなら SUMIF / SUMIFS

関連する関数

  • SUMIF — 条件に合うものだけ合計
  • SUMIFS — 複数条件での合計
  • SUBTOTAL — フィルタで隠れた行を除く集計
  • COUNT — 数値の入ったセルを数える(文字列化の検出に)
  • 関数一覧に戻る

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です