「この売上データ、月ごとに集計してほしいんだけど」。こんな依頼、急に飛んでくると地味に焦りますよね。日付から月だけを取り出す作業を手作業でやると、コピペミスや並び替えミスが必ず混ざります。件数が増えれば増えるほど、リスクは高くなります。
スプレッドシートのMONTH関数を使えば、ここは一発で解決できます。日付から月の数字を自動で取り出せるので、月別集計や四半期判定、今月データの自動抽出まで応用がききます。この記事では、MONTH関数の基本から、SUMIFS・ARRAYFORMULA・EOMONTHとの組み合わせまで、実務でそのまま使えるパターンをまるごと紹介していきます。
スプレッドシートのMONTH関数とは?基本構文と戻り値
MONTH関数は、日付データから「月」だけを取り出す関数です。読み方はそのまま「マンス」。戻り値は1〜12の整数で返ってきます。たとえば7月20日なら 7 が返ります。
=MONTH(日付) の引数
=MONTH(日付)
引数はひとつだけ。とてもシンプルです。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 日付 | 必須 | 月を取り出したい日付。セル参照、DATE関数の結果、シリアル値が使える |
文字列で渡すと #VALUE! エラーになるので、必ず日付値で渡してください。ここはあとで詳しく触れます。
日付セルから月を取り出す基本例
セルA2に 2026/07/20 と入っている場合を見てみましょう。
=MONTH(A2)
結果は 7 です。
DATE関数の使い方と組み合わせることもできます。
=MONTH(DATE(2026,12,25))
結果は 12 。DATE関数(年・月・日から日付を作る関数)で作った日付でも問題なく使えます。
シリアル値を直接渡しても動きます。
=MONTH(46022) → 12(2026/12/25)
ただし、シリアル値を覚える必要はありません。実務ではセル参照かDATE関数で十分ですよ。
月別集計をSUMIF+MONTHで自動化する
実務で最もよく使うのが、月別の合計を出すパターンです。MONTH関数で補助列を作る方法が一番わかりやすいので、そこから紹介します。
補助列にMONTHで月番号を抽出する
まず、日付が入ったA列の横に補助列を作ります。
| A列(日付) | B列(売上) | C列(月) | |
|---|---|---|---|
| 2行目 | 2026/01/15 | 30,000 | 1 |
| 3行目 | 2026/01/28 | 45,000 | 1 |
| 4行目 | 2026/02/10 | 20,000 | 2 |
| 5行目 | 2026/03/05 | 55,000 | 3 |
| 6行目 | 2026/01/20 | 10,000 | 1 |
C2に入れる数式はこれだけです。
=MONTH(A2)
あとはC6までコピーすればOKです。
SUMIFで月ごとに合計する
補助列ができたら、SUMIF関数(条件に合うセルを合計する関数)で月ごとに集計できます。
=SUMIF(C2:C6, 1, B2:B6)
1月の売上合計は 85,000 です。30,000 + 45,000 + 10,000 ですね。手動で計算しても一致します。
月の数字を変えるだけで、2月なら 20,000、3月なら 55,000 と出せます。データが増えても数式を変える必要がないのが便利です。
実務では、別の表に「1月・2月・3月…」と縦に並べておいて、SUMIFの条件部分にセル参照を入れるのが定番パターンです。
=SUMIF($C$2:$C$100, E2, $B$2:$B$100)
E2に「1」、E3に「2」と入れておけば、コピーするだけで12ヶ月分の集計表ができあがります。
SUMIFSで「月+カテゴリ」の複合集計
「商品カテゴリ別×月別」のような複合集計には、SUMIFS関数(複数条件で合計する関数)が便利です。
D列に「カテゴリ」を追加した表を想定します。
| A列(日付) | B列(売上) | C列(月) | D列(カテゴリ) | |
|---|---|---|---|---|
| 2行目 | 2026/01/15 | 30,000 | 1 | 文具 |
| 3行目 | 2026/01/28 | 45,000 | 1 | 雑貨 |
| 4行目 | 2026/02/10 | 20,000 | 2 | 文具 |
「1月の文具の売上」を求める数式はこうです。
=SUMIFS(B2:B100, C2:C100, 1, D2:D100, "文具")
結果は 30,000 。SUMIF(条件1つ)と違い、SUMIFSは合計範囲が先頭、条件は後ろにペアで並びます。書き順が違うので、ここは混同しやすいポイントですよ。
今月のデータだけを抽出する(MONTH+TODAY)
「今月分だけ見たい」という場面も多いですよね。MONTH関数とTODAY関数の使い方を組み合わせれば、自動で今月を判定できます。
MONTH(TODAY())で今月番号を取得
=MONTH(TODAY())
TODAY関数(今日の日付を返す関数)は再計算時に更新されます。なので、この数式は常に現在の月番号を返してくれます。2026年5月なら 5 です。
IFと組み合わせた条件抽出
「今月のデータなら売上を表示、それ以外は空白」という条件分岐もできます。
=IF(MONTH(A2)=MONTH(TODAY()), B2, "")
ただし、これだと「年」をチェックしていないので、去年の同じ月も拾ってしまいます。実務では年も合わせてチェックするのが安全です。
=IF(AND(MONTH(A2)=MONTH(TODAY()), YEAR(A2)=YEAR(TODAY())), B2, "")
自動更新される今月集計の作り方
SUMIFと組み合わせると、月が変わるたびに集計対象が自動で切り替わる仕組みが作れます。
=SUMIF(C2:C100, MONTH(TODAY()), B2:B100)
C列が補助列(MONTH関数で月番号を入れた列)です。ただし複数年データを扱う場合は、SUMIFSで年もチェックしてください。
=SUMIFS(B2:B100, C2:C100, MONTH(TODAY()), F2:F100, YEAR(TODAY()))
F列に =YEAR(A2) で年の補助列を作っておくのがコツです。月が変わると自動で集計対象が切り替わるので、月初にダッシュボードを開くだけで最新数字が見られます。
四半期を自動判定する2つの方式
月番号がわかれば、四半期の判定も簡単です。MONTH関数の結果を少し加工するだけで実現できます。
ROUNDUP(MONTH()/3,0) で暦年Q1〜Q4
=ROUNDUP(MONTH(A2)/3, 0)
ROUNDUP関数(切り上げを行う関数)で、月を3で割って切り上げます。仕組みはこうです。
- 1〜3月: 1/3〜3/3 → 切り上げで
1(Q1) - 4〜6月: 4/3〜6/3 → 切り上げで
2(Q2) - 7〜9月: 7/3〜9/3 → 切り上げで
3(Q3) - 10〜12月: 10/3〜12/3 → 切り上げで
4(Q4)
「Q1」のように表示したい場合は、文字列連結で対応できます。
="Q" & ROUNDUP(MONTH(A2)/3, 0)
7月なら Q3 と表示されます。
4月始まりの会計年度に対応する数式
日本企業に多い4月始まりの会計年度には、こちらの数式が対応します。
=INT(MOD(MONTH(A2)-4, 12)/3) + 1
ちょっとむずかしく見えますが、やっていることはシンプルです。MOD関数(余りを求める関数)で4月を起点にずらし、3で割って四半期番号にしています。
- 4〜6月 → Q1
- 7〜9月 → Q2
- 10〜12月 → Q3
- 1〜3月 → Q4
経理部門で決算資料を作るときに、ここはよく使うパターンです。社内の会計年度に合わせて使い分けてみてください。
ARRAYFORMULAで補助列を使わずに集計する
補助列を作るのが面倒、というケースもありますよね。ARRAYFORMULA(配列処理を一括で行う関数)を使えば、補助列なしで月番号を一気に処理できます。
補助列を1セルで生成する
C2に次の数式を入れます。
=ARRAYFORMULA(IF(A2:A="","",MONTH(A2:A)))
これだけで、A列のデータがある行すべてに月番号が自動で入ります。データを追加しても、数式のコピーが不要なのが大きなメリットです。
SUMPRODUCTで補助列なし集計
補助列そのものをなくしたい場合は、SUMPRODUCT関数(配列同士の積和を求める関数)と組み合わせます。
=SUMPRODUCT((MONTH(A2:A100)=1)*(B2:B100))
これで「1月の売上合計」が一発で出せます。MONTH関数を配列にそのまま渡せるのがSUMPRODUCTの強みです。SUMIFSより少し重くなりますが、データ件数が数千件レベルまでなら体感差はほぼありません。
ただしARRAYFORMULAで作った列の真下にデータを手入力すると #REF! エラーになるので、ARRAYFORMULA列は他のデータと混ぜないようにしてくださいね。
DATE関数・EOMONTH関数で月初・月末を求める
MONTH関数は、DATE関数の使い方と組み合わせると月初・月末の日付も求められます。
月初日を求める数式
=DATE(YEAR(A2), MONTH(A2), 1)
YEAR関数の使い方で年を、MONTH関数で月を取り出します。日を 1 に固定すれば月初日の完成です。
A2が 2026/07/20 なら、結果は 2026/07/01 になります。
月末日を求める2つの方法
月末日の求め方は2つあります。
=DATE(YEAR(A2), MONTH(A2)+1, 0)
この数式は「翌月の0日」を指定しています。0日目は前月の最終日になるんです。なので、7月の翌月8月の0日は 2026/07/31 です。
もっとシンプルに書くなら、EOMONTH関数(月末日を返す関数)が便利です。
=EOMONTH(A2, 0)
結果は同じ 2026/07/31 です。第2引数の数字を変えると、翌月末や先月末も求められます。
=EOMONTH(A2, 1) → 翌月末
=EOMONTH(A2, -1) → 先月末
請求書の支払期限計算(請求月の翌月末払いなど)にもよく使うので、EOMONTHはセットで覚えておくと便利ですよ。
YEAR・MONTH・DAYの違いと使い分け
日付から特定の要素を取り出す関数は、3つセットで覚えると便利です。
| 関数 | 戻り値 | 範囲 | 例(2026/07/20) |
|---|---|---|---|
| YEAR関数 | 年 | 1900〜9999 | 2026 |
| MONTH | 月 | 1〜12 | 7 |
| DAY | 日 | 1〜31 | 20 |
3つとも構文は同じ形式です。DAY関数(日を返す関数)も同様で、引数に日付を渡すだけ。使い方に迷うことはないですよね。
=YEAR(A2) → 2026
=MONTH(A2) → 7
=DAY(A2) → 20
どの関数も、セル参照やDATE関数の結果を渡して使います。数式内に 7/20/2026 のように直接書くと、割り算として計算されてしまうので注意してください。
よくあるエラーと対処法
MONTH関数で出やすいエラーは2つです。
| エラー | 原因 | 対処法 |
|---|---|---|
#VALUE! | 日付として認識できない文字列を渡した | セル参照またはDATE関数を使う。文字列ならDATEVALUEで変換 |
#NUM! | シリアル値が大きすぎる/負の値 | 入力値を確認する |
よくあるのは #VALUE! エラーです。たとえば、次の数式はエラーになります。
=MONTH("2026年7月20日")
日本語の日付文字列は認識できません。この場合はDATE関数で書き直してください。
=MONTH(DATE(2026,7,20))
CSVから読み込んだデータで日付が文字列扱いになっている場合は、DATEVALUE関数(文字列を日付値に変換する関数)を挟むと解決します。
=MONTH(DATEVALUE(A2))
もうひとつ注意したいのが、数式内での日付の直接入力です。
=MONTH(7/20/2026)
これは 7÷20÷2026 という割り算になってしまいます。必ずセル参照かDATE関数を使ってみてください。
ピボットテーブルとMONTH関数の使い分け
「ピボットテーブルを使えば、MONTH関数いらないのでは?」と思った方もいるかもしれません。実は両方とも使い所が違います。
| 用途 | おすすめ |
|---|---|
| 探索的に色々な切り口で見たい | ピボットテーブル |
| 帳票として固定化・自動更新したい | MONTH関数+SUMIF/SUMIFS |
| ダッシュボードで他関数と組み合わせたい | MONTH関数 |
| データ件数が万件超で集計が重い | ピボットテーブル |
ピボットは強力ですが、レイアウトを固定したり、別シートの数値と連動させたりするのは苦手です。一方MONTH関数は、自分で作った集計表に好きなようにレイアウトを組めます。
両方使えるようになると、用途に応じて選べるのでぐっと作業がはかどりますよ。
まとめ
MONTH関数は、日付から月を取り出すシンプルな関数です。構文は =MONTH(日付) のひとつだけ。でも組み合わせ次第で、月別集計から四半期判定、月初月末の算出まで幅広く使えます。
この記事で紹介した活用パターンをおさらいしましょう。
- 月別集計: 補助列にMONTH関数 → SUMIF/SUMIFSで合計
- 複合集計: SUMIFSで「月+カテゴリ」など複数条件
- 今月データの抽出: MONTH(TODAY())で自動判定。年もセットでチェック
- 四半期判定: 暦年は ROUNDUP(MONTH()/3,0)、4月始まりは MOD式
- 補助列なし: ARRAYFORMULAやSUMPRODUCTで一括処理
- 月初・月末: DATE関数やEOMONTH関数と組み合わせ
まずは補助列を使った月別集計から試してみてください。一度作れば、毎月の集計作業がグッと楽になりますよ。
