• 作成日 : 2025年12月2日

スプレッドシートで月ごとに集計するには?効率的なデータ分析と自動集計の実践方法

Googleスプレッドシートで月別集計を行うと、売上や経費、工数などの推移を時系列で把握できます。

基本は「日付から月(年‐月)を抽出し、月単位で集約する」こと。用途に応じて ピボットテーブル、SUMIFS、QUERY を使い分けるのが実務的です。

本記事では、Googleスプレッドシートやエクセルでピボットテーブル、SUMIFS関数、QUERY関数を使った月別集計の方法から、自動化テクニックまで詳しく解説します。

目次

スプレッドシートで月ごとに集計する基本的な考え方とは?

スプレッドシートで月ごとの集計を行うには、日付データから月を抽出し、その月単位でデータを集約する必要があります。 この処理には、関数やピボットテーブルなど複数の方法があり、用途に応じて使い分けることが重要です。

月別集計に必要なデータ構造の理解

効率的な月別集計を行うためには、適切なデータ構造が不可欠です。基本的には、A列に日付、B列以降に集計対象のデータ(売上、数量、カテゴリなど)を配置します。

日付は統一されたフォーマット(YYYY/MM/DD)で入力し、空白や文字列が混在しないようにします。この構造により、どの集計方法を使っても正確な結果が得られます。

エクセルとGoogleスプレッドシートの月別集計機能の違い

エクセル(Excel)では、ピボットテーブルの日付グループ化機能が充実しており、ワンクリックで月別集計が可能です。一方、Googleスプレッドシート(スプシ)では、QUERY関数という強力な集計機能が利用でき、SQLライクな記述で柔軟な集計ができます。

また、クラウドベースの利点を活かし、リアルタイムでの共有やコラボレーションが可能です。

月別集計の3つの主要な方法とその選び方

月別集計には主に3つの方法があります。第一にピボットテーブルは、ドラッグ&ドロップで簡単に集計でき、初心者にも扱いやすい方法です。第二にSUMIFS関数は、複雑な条件を組み合わせた集計に適しています。第三にQUERY関数は、大量データの高速処理と複雑な分析に優れています。データ量、更新頻度、分析の複雑さに応じて最適な方法を選択します。

ピボットテーブルを使った月ごと集計の設定方法は?

ピボットテーブルを使用すれば、プログラミング知識なしで簡単に月別集計表を作成でき、視覚的な操作で集計条件を変更できます。 具体的な設定手順を解説します。

STEP1:データ範囲の選択とピボットテーブルの作成

まず、集計したいデータ全体を選択します。ヘッダー行を含めて、空白行がないことを確認します。Googleスプレッドシートでは「データ」→「ピボットテーブル」を選択し、新しいシートまたは既存のシートを選んで作成します。エクセルでは「挿入」→「ピボットテーブル」から同様の操作を行います。

STEP2:日付フィールドの月別グループ化設定

ピボットテーブルエディタで、「行」に日付フィールドをドラッグします。Googleスプレッドシートでは、日付フィールドの右側にある設定アイコンをクリックし、「日付のグループ化」→「月」を選択します。これにより、自動的に月単位でデータがグループ化されます。年をまたぐデータの場合は、「年-月」でグループ化することも可能です。

STEP3:集計値の設定とカスタマイズ

「値」エリアに集計したいフィールド(売上金額など)をドラッグします。デフォルトでは合計(SUM)が適用されますが、平均、最大値、最小値、件数なども選択できます。複数の値を同時に表示することも可能で、例えば売上合計と取引件数を並べて表示できます。さらに、フィルター機能を使って特定の期間や条件でデータを絞り込むこともできます。

ピボットテーブルの便利な活用テクニック

ピボットテーブルには、前月比や累計を自動計算する機能もあります。「値の表示方法」から「前の値との差分」や「累計」を選択することで、トレンド分析が容易になります。また、条件付き書式と組み合わせることで、増減を色分けして視覚的に把握できます。グラフ機能と連携させれば、月別推移グラフも自動生成されます。

SUMIFS関数で柔軟な月別集計を実現する方法は?

SUMIFS関数を使用すると、複数の条件を組み合わせた高度な月別集計が可能で、動的な集計表を作成できます。 実践的な使用方法を詳しく説明します。

基本的なSUMIFS関数の構文と月別集計への応用

SUMIFS関数の基本構文は以下の通りです。

=SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, …)

月別集計では、日付範囲に対して月の開始日と終了日を条件として設定します。例えば、2024年1月の売上を集計する場合:

=SUMIFS(売上列, 日付列, “>=2024/1/1”, 日付列, “<=2024/1/31”)

動的な月指定を可能にする日付関数の活用

毎月手動で日付を変更するのは非効率なため、DATE関数やEOMONTH関数を組み合わせて動的に月を指定します。

=SUMIFS(C:C, A:A, “>=”&DATE(2024,1,1), A:A, “<=”&EOMONTH(DATE(2024,1,1),0))

さらに、セル参照を使って年月を可変にすることも可能です。

=SUMIFS(C:C, A:A, “>=”&DATE($E$1,$F$1,1), A:A, “<=”&EOMONTH(DATE($E$1,$F$1,1),0))

ここで、E1に年、F1に月を入力すると、自動的にその月の集計が行われます。

カテゴリ別・月別のクロス集計表の作成

SUMIFS関数を使って、カテゴリ別かつ月別の集計表を作成できます。行に月、列にカテゴリを配置し、交差するセルに以下のような数式を入力します。

=SUMIFS($D:$D, $A:$A, “>=”&DATE(YEAR($G2),MONTH($G2),1), $A:$A, “<=”&EOMONTH($G2,0), $B:$B, H$1)

この数式をコピーすることで、全体のクロス集計表が自動的に完成します。

SUMIFS関数の処理速度最適化テクニック

大量データでSUMIFS関数を使用する際は、処理速度に注意が必要です。範囲指定を必要最小限にし、列全体(A:A)ではなく具体的な範囲(A2:A1000)を指定します。また、頻繁に参照されるデータは、別シートに月別集計結果を保存し、VLOOKUP関数で参照する方法も効果的です。

QUERY関数による高度な月別集計とデータ分析は?

QUERY関数は、SQLライクな記述で複雑な月別集計を実現でき、大規模データの分析に最適なGoogleスプレッドシート独自の機能です。 その強力な集計機能を解説します。

QUERY関数の基本構文と月別集計への適用

QUERY関数の基本的な月別集計の記述例は以下の通りです。

=QUERY(A:C, “SELECT MONTH(A)+1, SUM(C) WHERE A IS NOT NULL GROUP BY MONTH(A)+1 ORDER BY MONTH(A)+1”, 1)

この例では、A列の日付から月を抽出し、C列の値を月ごとに合計しています。MONTH関数は0から始まるため、+1を追加して実際の月番号にしています。

年月での集計とフォーマット整形

年をまたぐデータを正確に集計するには、年月の組み合わせでグループ化します。

=QUERY(

A:C,

“SELECT YEAR(A), MONTH(A)+1, SUM(C)

WHERE A IS NOT NULL

GROUP BY YEAR(A), MONTH(A)+1

ORDER BY YEAR(A), MONTH(A)+1

LABEL YEAR(A) ‘年’, MONTH(A)+1 ‘月’, SUM(C) ‘売上合計'”,1)

さらに、「yyyy-MM」形式の文字列でまとめて表示したい場合は、FORMAT() 関数ではなく、TEXT 関数であらかじめ年月文字列を作った列を QUERY に渡します。

=QUERY(

{A:C, TEXT(A:A, “yyyy-MM”)},

“SELECT Col4, SUM(Col3)

WHERE Col1 IS NOT NULL

GROUP BY Col4

ORDER BY Col4

LABEL Col4 ‘年月’, SUM(Col3) ‘合計'”,1)

ここでは、

  • {A:C, TEXT(A:A, “yyyy-MM”)} で元データに「年月(yyyy-MM)」列(Col4)を追加
  • QUERY 内ではその Col4 をグループ化・ラベル付けして、月別の合計を集計

という構成にすることで、エラーなく「年月」単位の月別集計とフォーマット整形を実現できます。

複雑な条件を組み合わせた月別分析

QUERY関数では、WHERE句で複雑な条件を指定できます。

例えば、特定のカテゴリかつ金額が一定以上の取引のみを月別集計する場合:

=QUERY(A:D, “SELECT FORMAT(A, ‘yyyy-MM’), B, SUM(C), COUNT(C) WHERE A IS NOT NULL AND B = ‘営業部’ AND C > 10000 GROUP BY FORMAT(A, ‘yyyy-MM’), B ORDER BY FORMAT(A, ‘yyyy-MM’)”, 1)

QUERY関数とIMPORTRANGE関数の組み合わせ

複数のスプレッドシートからデータを集めて月別集計する場合、IMPORTRANGE関数と組み合わせます。

=QUERY({IMPORTRANGE(“シート1のURL”, “A:C”); IMPORTRANGE(“シート2のURL”, “A:C”)}, “SELECT Col1, SUM(Col3) WHERE Col1 IS NOT NULL GROUP BY Col1 ORDER BY Col1”, 1)

この方法により、部門別のデータを統合して全社の月別集計を行うことができます。

月別集計を自動化する実践的なテクニックは?

月別集計の自動化により、定期的なレポート作成の工数を大幅に削減し、リアルタイムでの経営状況把握が可能になります。 実用的な自動化手法を紹介します。

Google Apps Script(GAS)による月次集計の完全自動化

GASを使用して、月初に自動的に前月の集計を行い、レポートを作成する仕組みを構築できます。

タイムゾーンずれを防ぐように修正したコード例です(スクリプトのタイムゾーンに合わせる):

function monthlyAggregation() {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var dataSheet = ss.getSheetByName(“データ”);

var reportSheet = ss.getSheetByName(“月次レポート”);

// 前月の範囲を計算(ローカルタイムゾーンで OK)

var today = new Date();

var lastMonthStart = new Date(today.getFullYear(), today.getMonth() – 1, 1); // 前月1日

var lastMonthEnd = new Date(today.getFullYear(), today.getMonth(), 0);      // 前月末

// スクリプトのタイムゾーンを使用(スプレッドシート設定と揃えておく)

var tz = Session.getScriptTimeZone();

var startStr = Utilities.formatDate(lastMonthStart, tz, “yyyy-MM-dd”);

var endStr   = Utilities.formatDate(lastMonthEnd,   tz, “yyyy-MM-dd”);

// QUERY関数で前月分を集計

var formula =

‘=QUERY(データ!A:D,’ +

‘”SELECT B, SUM(C), AVG(C), COUNT(C) ‘ +

“WHERE A >= date ”'” + startStr + “”’ ” +

“AND A <= date ”'” + endStr + “”’ ” +

‘GROUP BY B”,’ +’1)’;

reportSheet.getRange(“A1”).setFormula(formula);}

※ ポイント
  • Session.getScriptTimeZone() を使い、スクリプトのタイムゾーンで「yyyy-MM-dd」を生成
  • QUERY 内のリテラルは date ‘YYYY-MM-DD’ 形式で指定
  • これにより、前月1日〜前月末までを正しく集計でき、日付のずれが発生しません。

ダッシュボード作成による可視化

月別集計データを基に、自動更新されるダッシュボードを作成します。スパークラインやデータバーを使って、トレンドを視覚的に表現します。

=SPARKLINE(QUERY(A:C, “SELECT SUM(C) WHERE A >= DATE ‘”&TEXT(TODAY()-365,”yyyy-mm-dd”)&”‘ GROUP BY MONTH(A)+1 ORDER BY MONTH(A)+1″, 0))

アラート機能の実装

前月比で大きな変動があった場合に、自動的にアラートメールを送信する機能も実装できます。

javascript

function checkMonthlyVariance() {

var sheet = SpreadsheetApp.getActiveSheet();

var thisMonth = sheet.getRange(“E2”).getValue();

var lastMonth = sheet.getRange(“E3”).getValue();

var variance = (thisMonth – lastMonth) / lastMonth * 100;

if (Math.abs(variance) > 20) {

GmailApp.sendEmail(

[email protected]”,

“月次売上アラート”,

`前月比${variance.toFixed(1)}%の変動がありました。確認をお願いします。`);}}

月別集計でよくあるトラブルと解決方法は?

月別集計では、日付形式の不統一、タイムゾーンの問題、データ型の不一致などのトラブルが発生しやすいです。 これらの対処法を解説します。

日付認識エラーの原因と対処法

最も多いトラブルは、日付が文字列として認識されることです。DATEVALUE関数を使って文字列を日付に変換します。

=DATEVALUE(A2)

また、異なる日付形式が混在している場合は、TEXT関数で統一します。

=TEXT(A2, “yyyy/mm/dd”)

タイムゾーンによる集計ズレの解決

Googleスプレッドシートでは、タイムゾーンの違いにより、日付がずれることがあります。「ファイル」→「設定」でタイムゾーンを確認し、必要に応じて調整します。また、QUERY関数では明示的にタイムゾーンを指定することも可能です。

空白セルや異常値の処理方法

集計対象に空白セルや異常値が含まれる場合、エラーや不正確な結果の原因となります。IFERROR関数やIF関数を使って適切に処理します。

=SUMIFS(C:C, A:A, “>=”&DATE(2024,1,1), A:A, “<=”&EOMONTH(DATE(2024,1,1),0), C:C, “>0”)

データ量増大時のパフォーマンス改善

月別集計のデータが増大すると、処理速度が低下します。以下の対策が効果的です。

  • 集計結果を値として別シートに保存し、参照のみ行う
  • 不要な計算式を削除し、必要最小限の範囲で集計する
  • アーカイブシートを作成し、古いデータを分離する
  • インデックス列を作成し、検索を高速化する

実践的な月別集計の活用事例とテンプレート

業種や用途に応じた月別集計の活用例を参考にすることで、自社に最適な分析手法を構築できます。 代表的な活用パターンを紹介します。

売上分析ダッシュボードの構築

小売業での月別売上分析では、以下の要素を組み合わせたダッシュボードが効果的です。

  • 月別売上推移グラフ(前年同月比較付き)
  • カテゴリ別月次売上構成比
  • 店舗別・月別売上ヒートマップ
  • 月別の新規・リピート顧客分析

これらを1つのシートにまとめ、フィルター機能で期間や店舗を絞り込めるようにします。

プロジェクト管理での月別工数集計

IT企業やコンサルティング会社では、プロジェクト別・月別の工数集計が重要です。

=QUERY(A:E, “SELECT D, FORMAT(A, ‘yyyy-MM’), SUM(E) WHERE A IS NOT NULL GROUP BY D, FORMAT(A, ‘yyyy-MM’) PIVOT FORMAT(A, ‘yyyy-MM’)”, 1)

この集計により、プロジェクトごとの月別工数を横並びで確認でき、リソース配分の最適化に活用できます。

経費管理での月別予実分析

経理部門では、予算と実績の月別比較が必須です。予算シートと実績シートを作成し、VLOOKUP関数やINDEX/MATCH関数で突合します。

=IFERROR(実績値/予算値-1, “”)

差異率を条件付き書式で色分けすることで、予算超過項目を即座に把握できます。


※ 掲載している情報は記事更新時点のものです。

※本サイトは、法律的またはその他のアドバイスの提供を目的としたものではありません。当社は本サイトの記載内容(テンプレートを含む)の正確性、妥当性の確保に努めておりますが、ご利用にあたっては、個別の事情を適宜専門家にご相談いただくなど、ご自身の判断でご利用ください。

関連記事