概要
「月次集計」は、日別や明細レベルのデータから、「月ごとの合計」を取り出す作業です。
Excel では、条件付き合計の SUMIFS 関数を使うことで、「この月の分だけを合計する」という処理を、数式だけでスマートに書けます。
ここでは、
「日付の入った明細表」から「月別の売上集計表」を作る、という典型パターンを題材に、SUMIFS を使った月次集計の考え方とコード例を、初心者向けにかみ砕いて説明します。
SUMIFS の基本
SUMIFS の書式
SUMIFS は「複数条件で合計する」関数です。
=SUMIFS(合計範囲, 条件範囲1, 条件1, 条件範囲2, 条件2, …)
意味としては、
- 「合計範囲」の中から
- 「条件範囲1 が 条件1 を満たし」
- かつ「条件範囲2 が 条件2 を満たし」…
- ものだけを合計する
という動きになります。
月次集計では、
「日付がこの月の範囲に入っている行だけを合計する」
という条件を SUMIFS で表現します。
日付を使った月次集計の基本パターン
データの前提
よくある形はこんな表です。
- A 列:日付(例:2025/1/1, 2025/1/2, …)
- B 列:売上金額
別シート、または同じシートの別の場所に、月別集計表を作ります。
- D 列:月(例:2025/1/1, 2025/2/1 のように「その月の1日」を代表として入力)
- E 列:その月の売上合計(ここを
SUMIFSで計算)
「その月の1日」と「翌月の1日」を使う考え方
日付で月を判定するときの定番は、
- 「その月の1日以上」かつ「翌月の1日未満」
という条件で絞り込む方法です。
たとえば、D2 に「2025/1/1」が入っているとき、
「2025年1月分の売上」は、
- 日付が 2025/1/1 以上
- 日付が 2025/2/1 未満
の行だけを合計すればよい、という考え方になります。
コード例:SUMIFS で月次集計
1 月の売上合計を求める式
前提:
- 明細表
- A 列:日付
- B 列:売上
- 集計表
- D2:2025/1/1(1 月の代表日)
- E2:1 月の売上合計を出したいセル
このとき、E2 には次のように書けます。
=SUMIFS($B:$B, $A:$A, ">="&$D2, $A:$A, "<"&EDATE($D2,1))
意味を分解すると、
- 合計範囲:
$B:$B(売上金額) - 条件1:
$A:$A >= D2(日付がその月の1日以上) - 条件2:
$A:$A < EDATE(D2,1)(日付が翌月の1日より前)
EDATE(D2,1) は「D2 の1ヶ月後(翌月の同日)」を返す関数です。
これで、「D2 の月に属する日付だけを合計する」式になります。
月ごとにコピーして使う
D3 に 2025/2/1、D4 に 2025/3/1…と「各月の1日」を入れておけば、
E2 の式を下にコピーするだけで、2 月・3 月…の月次集計も自動で計算されます。
D 列の「月」を変えるだけで、SUMIFS の条件も自動で変わる、という設計です。
「年」と「月」を分けて管理するパターン
年と月を別セルに持つ場合
「年」と「月」を別々の列に持っている場合もあります。
- A 列:日付
- B 列:売上
- D 列:年(例:2025)
- E 列:月(例:1, 2, 3 …)
- F 列:その年・月の売上合計
この場合は、日付から「年」と「月」を取り出して条件に使う方法があります。
YEAR・MONTH 関数と組み合わせる
F2 に、次のように書きます。
=SUMIFS($B:$B, YEAR($A:$A), $D2, MONTH($A:$A), $E2)
…と書きたいところですが、SUMIFS の条件範囲には「関数を直接配列的に書く」ことができません。
そのため、この形はそのままでは使えません。
現実的には、
- 明細表の別列に「年」列、「月」列を作っておく
- その列を条件範囲として
SUMIFSを使う
という設計にするのが扱いやすいです。
年列・月列を追加した設計
たとえば、明細表に次の列を追加します。
- C 列:年(
=YEAR(A2)を下にコピー) - D 列:月(
=MONTH(A2)を下にコピー)
集計表側では、
- G 列:年
- H 列:月
- I 列:月次売上合計
として、I2 にこう書きます。
=SUMIFS($B:$B, $C:$C, $G2, $D:$D, $H2)
これで、「年=G2 かつ 月=H2 の行の売上だけを合計する」月次集計ができます。
月次集計の設計のコツ
「日付の範囲」で考えるか、「年・月の列」で考えるか
月次集計の設計は、大きく 2 パターンあります。
- 日付の範囲(>=その月の1日、<翌月の1日)で絞る
- 年列・月列を作って、その値で絞る
どちらも正解ですが、
- 日付の範囲:列が増えずシンプル、EDATE を使う
- 年・月列:条件が直感的で、ピボットテーブル的な集計にも応用しやすい
という特徴があります。
シートの構造や、あとからの拡張性を考えて、どちらかに統一しておくと迷いません。
例題
問題1
A 列に日付、B 列に売上が入っている明細表があります。
別の場所に、D2 に「2025/1/1」、E2 に「2025年1月の売上合計」を出したいとします。
SUMIFS と EDATE を使って、E2 に書くべき式を完成させてください。
(ヒント:日付が「D2 以上」かつ「EDATE(D2,1) 未満」の行を合計します)
問題2
前問の E2 の式を、E3・E4 にコピーして「2 月」「3 月」の月次集計を出したいとします。
D3 に「2025/2/1」、D4 に「2025/3/1」が入っているとき、
E2 の式をそのままコピーするだけで正しく動く理由を、自分の言葉で説明してください。
問題3
明細表に、A 列:日付、B 列:売上、C 列:年、D 列:月 という列を用意しました。
C 列には =YEAR(A2)、D 列には =MONTH(A2) を入れて下にコピーしてあります。
集計表側で、G 列に年、H 列に月を入力し、I 列に「その年・月の売上合計」を出したいとき、
I2 に書くべき SUMIFS の式を答えてください。
問題4
次の 2 つの月次集計の書き方があります。
- 日付の範囲で絞る:
=SUMIFS($B:$B, $A:$A, ">="&D2, $A:$A, "<"&EDATE(D2,1)) - 年・月列で絞る:
=SUMIFS($B:$B, $C:$C, $G2, $D:$D, $H2)
それぞれのメリット・デメリットを、「列の数」「式の読みやすさ」「あとからの拡張性」という観点から整理して説明してください。
問題5
月次集計をするとき、「日付のセルの表示形式だけを“yyyy/mm”にして、見た目の月で集計しようとする」と、どのような問題が起こるでしょうか。
「表示形式」と「実際の値(シリアル値)」の違いを踏まえて、なぜ SUMIFS の条件には“見た目の表示”ではなく“実際の値や列”を使うべきなのか、自分の言葉で説明してみてください。
