経理担当者が月次レポートを作るとき、総務担当者が年度ごとの人事データを集計するとき、営業事務担当者が受注日から締め月を判定するとき――いずれの場面でも「日付から年・月・日だけを取り出したい」というニーズが出てきます。この作業を1つの関数で済ませてくれるのがYEAR・MONTH・DAY関数です。書き方自体は非常にシンプルですが、実務で使うと「文字列扱いの日付でエラーになる」「西暦年と会計年度がずれる」といった、関数の構文だけでは分からないつまずきに必ずと言っていいほど遭遇します。

YEAR・MONTH・DAYの基本の書き方

YEAR・MONTH・DAYはいずれも引数を1つだけ取り、指定した日付から年・月・日に対応する数値を返します。

=YEAR(日付) =MONTH(日付) =DAY(日付)

例:A1セルに「2026/9/20」が入っている場合
=YEAR(A1) → 2026  =MONTH(A1) → 9  =DAY(A1) → 20

返ってくるのは日付ではなく「数値」である点が重要です。この数値をそのままCOUNTIFSやSUMIFSの条件に使えるため、「9月のデータだけ集計する」「特定の日だけ抽出する」といった月次・日次の集計作業に応用できます。

実務でのよくある使用シーン

経理担当者であれば、取引データの日付列からMONTH関数で作業列を作り、COUNTIFSやSUMIFSと組み合わせて「9月に発生した経費だけ」「今月の売上合計」といった月次レポートを自動集計する場面が典型的です。手作業でフィルタをかけて集計するよりも、月が変わるたびに数式が自動で対象を切り替えてくれるため、月次締め作業の手間が大きく減ります。総務担当者であれば、社員の入社日や異動日を集計する際に「4月始まりの年度」で人事データをまとめるケースが頻出します。この場合は単純なYEAR関数だけでは正しく集計できず、後述するMONTH関数を使った年度調整の数式が必須になります。営業事務担当者であれば、受注日のDAY関数の値から「20日締め」「月末締め」のどちらの請求サイクルに乗せるかを判定する場面でも使われます。

暦年と「年度」がずれる問題と調整の考え方

日本企業の多くは4月始まり3月終わりの「年度(会計年度)」で予算や実績を管理していますが、YEAR関数が返すのはあくまで暦の上での西暦年です。この2つの基準の違いが、年度集計のズレという実務でつまずきやすいポイントになります。

例:2026年1月20日の売上を「2025年度」として集計したいのに、単純に=YEAR(A1)とすると「2026」が返ってきてしまう

4月始まりの年度では、1月〜3月は前年度扱いになります。この調整をMONTH関数で行うのが実務での定石です。

=IF(MONTH(A1)<=3,YEAR(A1)-1,YEAR(A1))

A1の月が1〜3月であれば西暦年から1を引き、4月以降であればそのままの西暦年を返す数式です。この結果を作業列にしておけば、年度単位のCOUNTIFS・SUMIFS集計にそのまま条件として使えます。

YEAR・MONTH・DAYでよくあるエラー・トラブルと対処法

#VALUE! エラー

参照している日付が、Excel上で「日付」ではなく「文字列」として入力されている場合に発生します。

  • 他のシステムやCSVから取り込んだ日付データが、文字列のまま貼り付けられている
  • 「2026.9.20」のように、スラッシュやハイフンではなくピリオドで区切られている
例:A1に文字列としての「2026.9.20」が入っている状態で=YEAR(A1)とすると#VALUE!

対処法として、まずセルの表示が左寄せになっていないか確認してください(日付が左寄せなら文字列扱いのサインです)。区切り文字をスラッシュに置換するか、=YEAR(DATEVALUE(A1))のようにDATEVALUE関数で一度日付値に変換してからYEAR・MONTH・DAYに渡すとエラーを回避できます。

年度集計がずれる(西暦年と会計年度の違い)

エラーメッセージは出ないため気づきにくいですが、実務上もっとも起こりやすいトラブルです。

例:=SUMIFS(売上,日付,">="&DATE(YEAR(A1),4,1)) のように単純にYEARだけを基準にすると、1〜3月のデータが翌年度側に混入する

対処法は前述の通り、MONTH関数で1〜3月かどうかを判定し、該当する場合は年を1つ差し引いた「年度列」を作業列として用意することです。集計の条件範囲にはこの年度列を使うようにしてください。

COUNTIFS・SUMIFSの条件範囲にMONTHを直接書いてエラーになる

「9月のデータだけ集計したい」という発想から、条件範囲に直接MONTH関数を書いてしまうミスもよく見られます。

例:=COUNTIFS(MONTH(日付範囲),9,担当者,"山田") のように条件範囲へ直接関数を書くと正しく機能しない

COUNTIFS・SUMIFSの条件範囲には、実際のセル範囲を指定する必要があります。日付データの隣に「=MONTH(日付セル)」の作業列を追加し、その作業列全体を条件範囲として指定してください。

似た関数との使い分け

YEAR・MONTH・DAYは日付から数値を取り出す関数ですが、目的によっては別の関数の方が適しています。

YEAR・MONTH・DAY

  • 年・月・日を「数値」で取得
  • COUNTIFS/SUMIFSの条件作成や年度計算に向く

TEXT関数

  • 日付を「文字列」に整形
  • 「2026年9月」のような表示用ラベル作成に向く

EDATE・EOMONTH

  • 日付そのものを月単位でずらす
  • 支払期日・契約更新日の計算に向く

「集計の条件として使いたい」ならYEAR・MONTH・DAY、「見た目のラベルとして表示したい」ならTEXT関数、「日付そのものを○ヶ月後にずらしたい」ならEDATE・EOMONTHというように、欲しい結果が数値か・文字列か・日付かで使い分けるのがコツです。

初心者がつまずきやすいポイントとコツ

まとめ

YEAR・MONTH・DAYは構文自体はシンプルですが、実務で使いこなすには「文字列扱いの日付でエラーになる」ことと「暦年と会計年度は別物である」ことの2点を理解しておく必要があります。文字列日付にはDATEVALUE関数での変換、年度集計にはMONTH関数を使った調整式を組み合わせれば、月次レポートや年度別の人事集計もぐっと組みやすくなります。数式を一から組み立てるのが不安な方は、下のツールで日本語の空欄を埋めるだけで数式を作成できます。

よくある質問

YEAR関数で日付から年を取り出したのに、なぜか#VALUE!エラーになります。原因は何ですか?
参照しているセルの日付が、Excelが日付として認識できない「文字列」になっているのが原因です。他システムから取り込んだデータや、「2026.9.20」のようにピリオドで区切られた日付は、見た目は日付でも実際は文字列として扱われ、YEAR・MONTH・DAY関数に渡すと#VALUE!エラーになります。対処法として、セルが左寄せ表示になっていないか確認し、区切り文字をスラッシュに統一するか、DATEVALUE関数で日付値に変換してから使用してください。
YEAR関数で年度別に集計すると、1月〜3月のデータが前年の実績としてカウントされてしまいます。なぜですか?
YEAR関数はあくまで「西暦年」をそのまま返す関数であり、日本企業に多い4月始まりの「年度(会計年度)」とは基準が異なるためです。たとえば2026年1月〜3月のデータは、多くの企業では「2025年度」に属しますが、YEAR関数だけで集計すると「2026年」として扱われてしまい、年度集計がずれます。年度を正しく求めるには、IF(MONTH(日付)<=3,YEAR(日付)-1,YEAR(日付))のように、1月〜3月かどうかをMONTH関数で判定し、年を1つ差し引く調整が必要です。
「〇月のデータだけ集計したい」場合、MONTH関数とCOUNTIFS・SUMIFSはどう組み合わせればよいですか?
MONTH関数で月を取り出した作業列(補助列)を用意し、その列を条件にCOUNTIFS・SUMIFSを使うのが基本です。ただしCOUNTIFS・SUMIFSの条件範囲に直接MONTH関数の数式を書くことはできないため、日付データの横に「=MONTH(日付セル)」の列を追加してから、その列を条件範囲として指定してください。年をまたいで「毎年9月の合計」を求めたい場合にも、この作業列方式が確実です。

関連記事

→ YEAR・MONTH・DAYの数式を作ってみる ← 記事一覧に戻る