【Excel】フィルタをかけても「合計が変わらない」!表示中の行だけを計算するSUBTOTAL関数

【Excel】フィルタをかけても「合計が変わらない」!表示中の行だけを計算するSUBTOTAL関数
🛡️ 超解決

ADVERTISEMENT

>フィルタ後の「合計の不整合」を解消する技術的最適解

Excelで大量のデータを管理する際、オートフィルタを使って特定の項目だけを抽出し、その結果を確認する作業は頻繁に発生します。しかし、表の下部にSUM関数で合計を出している場合、フィルタでデータを絞り込んでも合計値が全く変わらず、画面から消えているはずのデータの数値まで合算され続けてしまうという現象に直面します。
これはSUM関数の「指定された参照範囲内の全セルを、表示状態に関わらず無条件に合計する」という極めて忠実な仕様によるものです。ビジネスの現場で『今、画面に見えている分だけの合計』を即座に算出するには、セルの表示・非表示の状態を判別して計算対象を動的に制御する「SUBTOTAL(サブトータル)関数」の導入が必須となります。本記事では、SUBTOTAL関数の構文から、集計方法を指定する「機能番号」の技術的差異、そして集計ミスを防ぐための運用のコツを詳説します。

結論:表示データのみを計算するための3つの鉄則

  1. SUMの代わりにSUBTOTALを使う:フィルタをかける可能性のある表では、最初からSUBTOTAL関数で集計しておく。
  2. 機能番号「9」または「109」を使い分ける:フィルタによる非表示を無視するなら「9」、手動の非表示も無視するなら「109」を指定する。
  3. テーブル機能を併用する:「テーブル」の集計行機能を使えば、Excelが自動的にSUBTOTAL関数を組み込んでくれる。
>1. 技術仕様:SUBTOTAL関数の基本構文と「機能番号」

SUBTOTAL関数は、合計だけでなく平均や個数など、11種類の集計を一つの関数でこなす多機能な集計用関数です。最大の特徴は、引数によって「非表示の行を計算に含めるか、除外するか」を細かく制御できる点にあります。

基本の構文

=SUBTOTAL(集計方法, 参照1, [参照2], …)

集計方法:どのような計算を行うかを指定する1〜11、または101〜111の番号(必須)。
参照:集計対象となるセル範囲(必須)。

よく使われる集計方法(番号)

9:SUM(合計)。フィルタで隠れた行を除外します。
1:AVERAGE(平均)。フィルタで隠れた行を除外します。
3:COUNTA(個数)。空白以外のセルを数え、隠れた行を除外します。

ADVERTISEMENT

2. 重要な分岐点:番号「9」と「109」の決定的な違い

SUBTOTAL関数には、同じ合計計算でも「9」で始まる番号と「109」で始まる番号の2種類が用意されています。これらは「手動で隠した行」をどう扱うかという技術的仕様が異なります。

機能番号「1〜11」の挙動

フィルタによる非表示:計算から除外します。
手動による非表示(行を右クリックして非表示):計算に含めます

「フィルタの結果だけを反映させたいが、一時的に手動で隠した行の数値は保持したい」という場合に適しています。

機能番号「101〜111」の挙動

フィルタによる非表示:計算から除外します。
手動による非表示:計算からも除外します

「とにかく今、画面に見えているセルの数字だけを合算したい」という、より厳密な視覚的整合性を求める場合は、こちらの100番台を使用するのが実務上の正解です。

>3. 実践:フィルタに連動する集計行を作成する手順

例えば、A列からE列までデータがあり、E列の売上合計をフィルタに連動させたい場合の設定手順です。

設定のステップ

  1. 合計を表示したいセル(通常はデータの最下部よりさらに下)を選択します。
  2. 数式バーに「=SUBTOTAL(9, E2:E100)」と入力します。
    (※100はデータの末尾に合わせて調整してください)
  3. Enterキーで確定します。

これで準備は完了です。オートフィルタで店舗名や担当者を絞り込むと、それに応じてこのセルの数値がリアルタイムで増減するようになります。SUM関数では決して実現できない、動的なレポート機能がこれだけで手に入ります。

>4. 技術的アドバイス:テーブル機能との親和性

SUBTOTAL関数を自力で入力するのが面倒な場合は、Excelの「テーブル」機能を活用するのが最もスマートな方法です。

テーブルの集計行による自動化

  1. データ範囲のどこかを選択し、Ctrl + T でテーブル化します。
  2. 「テーブルデザイン」タブの「集計行」にチェックを入れます。
  3. 表の最下部に出現したセルをクリックするとプルダウンが現れ、「合計」や「平均」を選択できます。

この時、Excelは内部で自動的に「=SUBTOTAL(109, [列名])」を生成しています。100番台の番号が採用されているため、手動で隠した行も計算から除外される、最も安全な集計環境が自動的に構築されます。

>5. 注意点:列の非表示とパフォーマンスへの影響

SUBTOTAL関数を運用する上で、理解しておくべき技術的な制約が2点あります。

列の非表示には対応していない

SUBTOTAL関数が計算から除外できるのは、あくまで「行」の非表示です。列を非表示にしても、その列の数値は依然として計算に含まれます。横方向に集計したい場合は、別のロジック(AGGREGATE関数など)が必要になることを覚えておいてください。

計算負荷の問題

SUBTOTAL関数は、セルの表示状態を逐一チェックするため、SUM関数よりも計算負荷が高くなります。数十万行におよぶ巨大なシートで大量のSUBTOTAL関数を使用すると、フィルタを切り替えるたびに再計算によるフリーズが発生しやすくなります。大規模データでは、必要な集計箇所を絞るなどの配慮が必要です。

>まとめ:集計関数の使い分け特性マップ
比較項目 SUM関数 SUBTOTAL(9,…) SUBTOTAL(109,…)
フィルタ非表示 計算に含める 除外する 除外する
手動非表示 計算に含める 計算に含める 除外する
主な用途 全データの絶対的な合計 フィルタ結果の集計 視覚的な数値の完全一致

ExcelのSUBTOTAL関数は、静的な集計を動的な分析へと変える強力なツールです。フィルタをかけているのに合計が変わらないという現象は、仕様への無理解が招くミスですが、この関数の仕組み(特に9と109の差異)を知っていれば、逆に状況に合わせて緻密な集計をコントロールできるようになります。データの「見え方」と「計算」を一致させ、常に正確で信頼されるアウトプットを維持しましょう。

📊
Excelトラブル完全解決データベース この記事以外にも、100項目以上のエラー解決策をまとめています。困った時の逆引きに活用してください。

この記事の監修者

📈

超解決 Excel研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。