スプレッドシートのYEAR関数の使い方|日付から年だけを取り出す方法

スポンサーリンク

「日付データから年だけを取り出して、年度ごとに集計したい」。こんな場面はありませんか?

手作業で年を書き写していると、データが増えたときに大変ですよね。入力ミスも起きやすいです。

GoogleスプレッドシートのYEAR関数を使えば、日付から年(西暦4桁)を一発で取り出せます。

この記事では、YEAR関数の基本から年度判定・年ごとの集計まで、実務で使えるテクニックをまとめて紹介します。

YEAR関数とは?スプレッドシートで日付から年を取り出す関数

YEAR関数(読み方: イヤー関数)は、日付データから「年」の部分だけを数値として取り出す関数です。

名前は英語の「year(年)」がそのまま関数名になっています。

たとえばセルに「2026/3/19」という日付が入っていれば、YEAR関数は「2026」を返します。とてもシンプルですね。

YEAR関数でできることをまとめると、次のとおりです。

  • 日付から年(西暦4桁)を数値で取り出す
  • TODAY関数と組み合わせて「今年の西暦」を動的に取得する
  • IF関数と組み合わせて年度(4月始まり等)を判定する
  • SUMPRODUCT関数と組み合わせて年ごとの集計を行う

NOTE

YEAR関数はGoogleスプレッドシートの全バージョンで使えます。Excelでも同じ構文で動作するので、ファイル共有時も安心です。

YEAR関数の基本の書き方

構文と引数

=YEAR(日付)
引数必須/省略可説明
日付必須年を取り出したい日付データ。セル参照、DATE関数の戻り値、日付として認識される文字列を指定できます

引数はたった1つだけです。覚えやすいですよね。

戻り値

YEAR関数は1900〜9999の範囲の整数を返します。「2026/3/19」なら「2026」、「1990/1/1」なら「1990」です。

返すのは数値です。文字列ではありません。そのため、取り出した年をそのまま計算に使えますよ。

入力例

=YEAR(A2)           … セルA2の日付から年を取得
=YEAR(TODAY())       … 今日の日付から年を取得(今年の西暦)
=YEAR("2026/3/19")  … 日付文字列から年を取得 → 2026

基本的な使い方|日付から年だけを取り出す

実際の使い方を見てみましょう。受注日の一覧から年を取り出すケースです。

 A列(受注日)B列(年)
2行目2024/8/15=YEAR(A2) → 2024
3行目2025/3/1=YEAR(A3) → 2025
4行目2026/12/20=YEAR(A4) → 2026

B2セルに =YEAR(A2) と入力するだけです。あとは下方向にコピーすれば、すべての行の年を取り出せます。

YEAR関数の結果は数値なので、フィルタで「2025」だけに絞り込んだり、ピボットテーブルの行に配置したりできます。

TIP

「今年の西暦」を取得するなら =YEAR(TODAY()) が便利です。TODAY関数が今日の日付を返し、YEAR関数がそこから年を取り出します。ファイルを開くたびに自動更新されますよ。

実務で使えるYEAR関数の活用例

年度を判定する(YEAR + IF)

日本の会社では4月始まりの「年度」を使うことが多いですよね。YEAR関数とIF関数を組み合わせれば、日付から年度を自動判定できます。

=IF(MONTH(A2)>=4, YEAR(A2), YEAR(A2)-1)

この数式のポイントは次のとおりです。

  • MONTH関数で月を取り出す(1〜12の数値)
  • 4月以降(4〜12月)なら、その年がそのまま年度
  • 1〜3月なら、前年が年度(YEAR(A2)-1)

具体例で確認してみましょう。

日付年度の計算結果
2026/6/156(4月以降)2026年度
2026/2/102(3月以前)2025年度
2025/4/14(4月以降)2025年度
2025/3/313(3月以前)2024年度

4月1日と3月31日で年度が変わるのがわかりますね。

TIP

年度の開始月が4月以外の場合は、数式の「4」を変更してください。たとえば10月始まりなら =IF(MONTH(A2)>=10, YEAR(A2), YEAR(A2)-1) です。

年ごとに集計する(SUMPRODUCT + YEAR)

「年ごとの売上合計を出したい」という場面では、SUMPRODUCT関数とYEAR関数を組み合わせます。

=SUMPRODUCT((YEAR(A2:A100)=2026)*B2:B100)

この数式は、A列の日付が2026年の行だけを対象に、B列の金額を合計します。

数式の仕組みを分解すると、次のとおりです。

  1. YEAR(A2:A100) で各行の年を取り出す
  2. =2026 で2026年かどうかを判定(TRUE/FALSE)
  3. TRUEは1、FALSEは0として金額と掛け算される
  4. SUMPRODUCTが合計を返す

ちょっとむずかしく見えますが、やっていることはシンプルです。「年が一致する行だけ合計する」という意味ですよ。

NOTE

SUMIF関数で =SUMIF(A2:A100, "2026", B2:B100) のように年を文字列で指定しても、日付と年は型が違うため正しく集計できません。SUMPRODUCT+YEAR関数の組み合わせを使いましょう。

今年の売上を動的に集計したい場合は、「2026」の部分をYEAR(TODAY())に置き換えます。

=SUMPRODUCT((YEAR(A2:A100)=YEAR(TODAY()))*B2:B100)

年ごとの件数を数える(SUMPRODUCT + YEAR)

「年ごとの売上合計」だけでなく、「年ごとに何件あったか」を数えたい場面も多いですよね。契約件数や問い合わせ件数の集計です。

これもSUMPRODUCT関数とYEAR関数で実現できます。合計のときの「金額範囲」を「1」に置き換えるだけです。

=SUMPRODUCT((YEAR(A2:A100)=2026)*1)

A列の日付が2026年の行だけを「1」として数え上げます。最後の *1 がTRUE/FALSEを数値の1/0に変換する役割です。

仕組みは合計のときと同じで、次のように動きます。

  1. YEAR(A2:A100) で各行の年を取り出す
  2. =2026 で2026年かどうかを判定(TRUE/FALSE)
  3. *1 でTRUEを1、FALSEを0に変換する
  4. SUMPRODUCTが1の個数(=件数)を合計する

今年の件数を動的に数えたいなら、2026YEAR(TODAY()) に置き換えてください。ファイルを開くたびに自動更新されますよ。

=SUMPRODUCT((YEAR(A2:A100)=YEAR(TODAY()))*1)

TIP

日付範囲で数える方法もあります。=COUNTIFS(A2:A100, ">="&DATE(2026,1,1), A2:A100, "<="&DATE(2026,12,31)) のようにDATE関数で年初と年末を指定する書き方です。YEAR関数を使わずに範囲指定したいときはこちらが便利ですが、年が増えるたびに条件を書き換える手間があります。複数年をまとめて扱うならSUMPRODUCT+YEAR関数のほうが応用しやすいですよ。

ARRAYFORMULA と組み合わせる(補助列を使わない方法)

=YEAR(A2) を下方向にコピーするのが基本ですが、データが日々増える表だと、コピー範囲が足りなくなることがありますよね。

そんなときはARRAYFORMULA関数と組み合わせると、1か所の入力だけで全行に年を展開できます。

=ARRAYFORMULA(YEAR(A2:A100))

B2セルにこの1行を入れるだけで、A2からA100までの年が一括で表示されます。新しい行を追加しても範囲内なら自動で計算されますよ。

ただし、空白セルがあると YEAR("") がエラーになる点に注意してください。空白行を含む範囲では、IF関数でガードを入れます。

=ARRAYFORMULA(IF(A2:A100<>"", YEAR(A2:A100), ""))

これで「A列が空でない行だけ年を表示し、空白行は何も表示しない」という挙動になります。年度判定をARRAYFORMULA化したい場合も、同じ考え方でIF関数を組み合わせればOKです。

=ARRAYFORMULA(IF(A2:A100<>"", IF(MONTH(A2:A100)>=4, YEAR(A2:A100), YEAR(A2:A100)-1), ""))

補助列を毎回コピーする手間がなくなるので、フォーム回答やインポートデータのように行数が変動する表で重宝します。

生年月日から生まれ年・年代を取り出す

YEAR関数は受注日や売上日だけでなく、人事や会員管理でも活躍します。社員台帳や顧客リストで「生まれ年」を列に追加したいケースですね。

生年月日から生まれ年を取り出すのは、いつもどおりYEAR関数だけです。

=YEAR(A2)   … 生年月日のセルから生まれ年を取得

さらに「1980年代」「1990年代」のように年代で分類したいときは、INT関数を組み合わせます。

=INT(YEAR(A2)/10)*10

この数式は、生まれ年を10で割って小数点以下を切り捨て、また10を掛けることで「下1桁を0にする」処理です。

生年月日生まれ年年代の計算結果
1985/7/319851980
1992/12/119921990
2001/4/2020012000

="("&INT(YEAR(A2)/10)*10&"年代)" のように文字列と結合すれば、「1980年代」という表示も作れます。

NOTE

「年齢」を計算したい場合はYEAR関数ではなく、DATEDIF関数が向いています。YEAR関数で年だけを引き算すると誕生日前後で1歳ずれることがあるためです。「生まれ年だけ欲しい」「年代で分類したい」という用途ならYEAR関数が最適ですよ。

N年後の日付を求める(DATE + YEAR)

契約更新日や資格の有効期限など、「N年後の日付」が必要な場面もありますよね。DATE関数とYEAR関数を組み合わせれば計算できます。

=DATE(YEAR(A2)+N, MONTH(A2), DAY(A2))

たとえば3年後の日付を求めるなら、次のように書きます。

=DATE(YEAR(A2)+3, MONTH(A2), DAY(A2))
基準日3年後
2026/3/192029/3/19
2024/2/292027/3/1(うるう年の調整)

2月29日の3年後は2月29日が存在しないため、自動的に3月1日に繰り上がります。DATE関数のロールオーバー機能のおかげです。

今年・去年を動的に判定する(TODAY + YEAR)

「今年のデータだけを色付けしたい」「去年と今年で分けたい」という場面では、TODAY関数との組み合わせが便利です。

=YEAR(A2)=YEAR(TODAY())       … 今年のデータかどうか(TRUE/FALSE)
=YEAR(A2)=YEAR(TODAY())-1     … 去年のデータかどうか

条件付き書式のカスタム数式にも使えます。「今年のデータだけ背景色を変える」といった設定が簡単にできますよ。

YEAR・MONTH・DAY関数の違いと使い分け

YEAR関数には姉妹関数としてMONTH関数DAY関数があります。3つセットで覚えておくと便利です。

関数読み方取り出す要素戻り値の範囲入力例(2026/3/19)結果
YEARイヤー1900〜9999=YEAR(A2)2026
MONTHマンス1〜12=MONTH(A2)3
DAYデイ1〜31=DAY(A2)19

3関数とも構文は同じで =関数名(日付) です。引数も1つだけなので、迷うことはありません。

この3関数を組み合わせると、日付の分解と再構築が自由にできます。

=DATE(YEAR(A2), MONTH(A2), DAY(A2))

上の数式はA2の日付をいったんYEAR・MONTH・DAYで分解し、DATE関数で再構築しています。このパターンは「年だけ変える」「月だけずらす」といった加工の基本形です。

TIP

日付を「2026年3月」のようにテキスト表示したい場合は、TEXT関数を使ってください。=TEXT(A2, "yyyy年m月") で書式付きの文字列に変換できます。

ピボットテーブルで年ごとに集計する方法との違い

「SUMPRODUCT+YEAR関数の数式がむずかしい」と感じたら、ピボットテーブルという選択肢もあります。マウス操作で年ごとの集計ができる機能です。

ピボットテーブルでは、日付の列を「行」に配置し、右クリックから「年でグループ化」を選ぶと、年単位の集計表が作れます。数式を一切書かずに、年ごとの売上や件数を出せるのが魅力です。

数式とピボットテーブル、それぞれの向き不向きを整理すると次のとおりです。

比較項目YEAR関数による数式ピボットテーブル
更新データが増えると自動更新手動で更新が必要なことがある
操作数式の理解が必要マウス操作で直感的
結果の活用別シート・別の数式に組み込める表として独立しやすい
条件の細かさ年度・複数条件を自由に設定グループ化の単位に依存

ざっくり言うと、「集計結果を別の計算に使いたい」「自動で更新したい」なら数式、「とりあえず手早く眺めたい」ならピボットテーブル、という使い分けです。

YEAR関数を覚えておけば、ピボットテーブルでは作りにくい「4月始まり年度での集計」なども柔軟に対応できます。両方を場面で使い分けられると、集計作業がぐっと楽になりますよ。

よくあるエラーと対処法

#VALUE! エラー

YEAR関数で最もよくあるエラーです。原因は引数が日付として認識できないことです。

原因入力例対処法
文字列の日付=YEAR("令和8年")西暦の日付形式に変換する
数値の文字列=YEAR("2026")=YEAR(DATEVALUE("2026/1/1")) に変更
空白セル=YEAR("")IF関数で空白チェックを追加

「2026/3/19」のような形式の文字列ならYEAR関数で認識できます。ただし「令和8年」や「R8」のような和暦は認識できませんので注意してください。

意図しない年が返る

日付に見えて実は文字列になっているセルがあります。セルの左上に小さな緑の三角マークが出ていたら要注意です。

「表示形式」→「数字」→「日付」で日付型に変換するか、DATEVALUE関数で文字列を日付に変換してからYEAR関数を使ってください。

YEAR関数 よくある質問

YEAR関数を使っていてつまずきやすいポイントを、Q&A形式でまとめました。

Q1. 「2026/3/19」と入力したのに、年が「1905」など変な値になります

セルの表示形式が「数値」になっていて、日付が日付シリアル値(数値)として扱われている可能性があります。この場合、YEAR関数はその数値を別の日付として解釈してしまいます。

対処法は2つあります。1つはセルの表示形式を「日付」に変更すること。「表示形式」→「数字」→「日付」で切り替えられます。

もう1つは、数式内で直接DATE関数を使う方法です。=YEAR(DATE(2026,3,19)) のように書けば、確実に日付として認識されますよ。

Q2. YEAR関数で「1900」や「1899」が返ってきます

参照先のセルが空白になっていないか確認してください。空白セルは「0」として扱われ、シリアル値の0は1899年12月30日を指すため、YEAR関数が1899や1900を返してしまいます。

対処法はIF関数で空白チェックを入れることです。

=IF(A2<>"", YEAR(A2), "")

これで「A2が空白なら何も表示せず、日付が入っていれば年を返す」という動きになります。集計表で空白行が混ざるときに特に有効です。

Q3. テキスト形式の「2026年3月19日」から年を取り出したいです

「年」「月」「日」を含む和暦風のテキストは、そのままではYEAR関数で認識できません。=YEAR("2026年3月19日") は#VALUE!エラーになります。

一番おすすめなのは、最初から「2026/3/19」という日付形式で入力することです。これがいちばん手間がかかりません。

すでにテキストで入力済みの場合は、SUBSTITUTE関数で「年」「月」をスラッシュに置き換え、DATEVALUE関数で日付に変換してからYEAR関数に渡します。

=YEAR(DATEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"年","/"),"月","/"),"日","")))

ただし数式が複雑になるので、データが大量にある場合は入力ルール自体を「日付形式」に統一するのが現実的ですよ。

Q4. インポートしたデータが「2026-03-19T00:00:00Z」のような形式で年が取り出せません

外部システムからのデータはISO 8601形式(2026-03-19T00:00:00Z)になっていることがあります。後半の時刻部分が邪魔をして、YEAR関数が認識できないケースです。

LEFT関数で先頭10文字(日付部分)だけを取り出し、DATEVALUE関数で日付に変換すれば解決できます。

=YEAR(DATEVALUE(LEFT(A2,10)))

LEFT(A2,10) で「2026-03-19」だけを抜き出し、DATEVALUE関数が日付型に変換、最後にYEAR関数が年を取り出す、という流れです。インポートデータの加工で覚えておくと便利ですよ。

まとめ

この記事では、スプレッドシートのYEAR関数の使い方を解説しました。

項目内容
構文=YEAR(日付)
できること日付から年(西暦4桁)を数値で取り出す
姉妹関数MONTH(月)・DAY(日)
年度判定=IF(MONTH(A2)>=4, YEAR(A2), YEAR(A2)-1)
年ごと集計=SUMPRODUCT((YEAR(範囲)=年)*金額範囲)
N年後の日付=DATE(YEAR(A2)+N, MONTH(A2), DAY(A2))

YEAR関数は単体でも便利ですが、IF関数やSUMPRODUCT関数と組み合わせると活用の幅がぐっと広がります。まずは =YEAR(A2) で年を取り出すところから試してみてくださいね。

日付操作をもっと知りたい方は、DATE関数の使い方TODAY関数の使い方もあわせてチェックしてみてください。

タイトルとURLをコピーしました