カテゴリー: 集計

  • 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 — 数値の入ったセルを数える(文字列化の検出に)
    • 関数一覧に戻る