「入社してから何年何ヶ月か、ざっくり年数で出せないかな?」。勤続年数や契約期間を管理していると、こんな場面が出てきますよね。
DATEDIF関数を使えば「6年」のような整数は出せます。でも「6.46年」のように端数まで含めた正確な年数がほしい場面もあります。
GoogleスプレッドシートのYEARFRAC関数なら、2つの日付の間隔を年単位の小数で一発計算できます。
この記事では基本の書き方から、勤続年数や契約残期間の計算、DATEDIFとの使い分けまで、実務で使えるテクニックをまとめて紹介します。
YEARFRAC関数とは?スプレッドシートで年単位の期間を計算する関数
YEARFRAC関数(読み方: イヤーフラック関数)は、2つの日付の間隔が年単位で何年にあたるかを小数で返す関数です。
名前は「year(年)」と「fraction(端数・割合)」を組み合わせた造語です。
たとえば「2020/4/1」から「2026/9/15」までの期間をYEARFRAC関数で求めると「6.4583…」のような値が返ります。つまり約6年5ヶ月半ということです。
DATEDIF関数の「Y」単位だと「6」(整数)しか返りませんが、YEARFRAC関数なら端数まで含めた正確な年数がわかります。年齢のような「満何歳」ではなく、勤続年数や契約期間のように「端数も含めた年数」がほしいときに重宝しますよ。
NOTE
YEARFRAC関数はGoogleスプレッドシートとExcel(全バージョン)の両方で使えます。構文も同じなので、ファイルを変換しても数式はそのまま動きますよ。
YEARFRAC関数の書き方|構文と引数
基本構文
=YEARFRAC(開始日, 終了日, [基準])
カッコの中に「開始日」「終了日」の2つを入れます。3つ目の「基準」は省略できます。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 開始日 | 必須 | 期間の開始となる日付 |
| 終了日 | 必須 | 期間の終了となる日付 |
| 基準 | 任意 | 日数の計算方法を指定する数値(0〜4、省略時は0) |
開始日が終了日より後でもエラーにはなりません。ただし結果がマイナスになるので、通常は開始日を終了日より前に指定してください。
基準(日数計算方法)の種類
第3引数の「基準」は、1年の日数をどう計算するかを指定します。金融計算で使われるオプションですが、一般的な実務では省略して問題ありません。
| 基準 | 計算方法 | 1年の日数 |
|---|---|---|
| 0(省略時) | 米国方式(NASD 30/360) | 各月30日 / 年360日 |
| 1 | 実日数 / 実日数 | うるう年は366日、それ以外は365日 |
| 2 | 実日数 / 360日 | 年360日として計算 |
| 3 | 実日数 / 365日 | 年365日として計算(うるう年も同じ) |
| 4 | ヨーロッパ方式(30/360) | 各月30日 / 年360日 |
TIP
勤続年数や契約期間など「正確な暦日ベース」で計算したい場合は、基準を「1」に指定するのがおすすめです。省略時(0)は各月を30日とみなす金融向けの計算方法なので、実日数とわずかにズレることがあります。
YEARFRAC関数の基本的な使い方
セル参照で年数を求める
A2に開始日「2020/4/1」、B2に終了日「2026/9/15」が入っているとします。
=YEARFRAC(A2, B2)
結果は「6.458333…」です。約6.46年、つまり6年5ヶ月半の期間があるとわかります。
引数はセル参照で指定するのが基本です。日付データを変更するだけで結果が自動更新されますよ。
基準を指定して実日数ベースで計算する
デフォルト(基準0)は各月を30日とみなす計算です。実際の暦日に基づいて正確に計算したい場合は、基準に「1」を指定します。
=YEARFRAC(A2, B2, 1)
結果は「6.460…」です。基準0のときと値がわずかに異なります。これは、基準0が「すべての月を30日」と仮定するのに対し、基準1は実際の日数(31日の月は31日、うるう年は366日)で計算するためです。
DATE関数と組み合わせる
年・月・日がバラバラのセルに入っている場合は、DATE関数(年・月・日から日付を作る関数)を組み合わせます。
=YEARFRAC(DATE(2020,4,1), DATE(2026,9,15), 1)
DATE関数で日付データを作ってからYEARFRACに渡す形です。
実務で使えるYEARFRAC関数の活用例
勤続年数を小数で自動計算する
人事名簿で入社日がA2に入っているとします。勤続年数を小数で表示してみましょう。
=YEARFRAC(A2, TODAY(), 1)
TODAY関数は今日の日付を返す関数です。入社日と今日の差を年単位で求めています。
A2が「2020/4/1」で今日が「2026/3/21」なら、結果は「5.971…」です。約5年11ヶ月半ということですね。
整数部分だけ取り出したい場合は、INT関数で囲みます。
=INT(YEARFRAC(A2, TODAY(), 1))
結果は「5」です。端数を切り捨てた「満何年」が返ります。
TIP
「X年Yヶ月」形式で表示したいなら、DATEDIF関数のほうが向いています。YEARFRACは「6.46年」のような小数値、DATEDIFは「6年5ヶ月」のような整数値と、用途に応じて使い分けてください。
契約の残り期間を年単位で求める
契約終了日がB2に入っているとして、残り期間を年単位で計算してみましょう。
=YEARFRAC(TODAY(), B2, 1)
B2が「2028/3/31」なら、結果は「2.027…」です。残り約2.0年とわかります。
「残り1年未満になったら更新手続きを始める」といった判定にも使えます。
=IF(YEARFRAC(TODAY(), B2, 1) < 1, "更新手続き必要", "")
年齢に端数を含めて計算する
保険の年齢計算のように、端数を含めた年齢が必要な場面もあります。
=YEARFRAC(A2, TODAY(), 1)
A2が「1990/5/20」で今日が「2026/3/21」なら、結果は「35.838…」です。35歳と約10ヶ月ということですね。
満年齢(整数)だけでよければDATEDIF関数の「Y」単位を使いましょう。端数まで必要なケースでYEARFRAC関数が活躍します。
YEARFRAC関数のエラーと対処法
#VALUE!エラー(日付が不正な場合)
YEARFRAC関数に渡した値が正しい日付データになっていないと、#VALUE!エラーが発生します。
よくある原因は次の3つです。
- セルに日付が「文字列」として入力されている
- 全角数字が混じっている(例: 「2020/4/1」)
- 存在しない日付を指定している(例: 「2020/2/30」)
対処法は、セルの表示形式を「日付」に変更するか、DATE関数で日付データを作り直すことです。
=YEARFRAC(DATE(2020,4,1), DATE(2026,9,15), 1)
DATE関数を経由すれば、確実に正しい日付データとして処理されます。
#NUM!エラー(基準の値が不正な場合)
第3引数の「基準」に0〜4以外の値を指定すると、#NUM!エラーが発生します。
=YEARFRAC(A2, B2, 5) → #NUM!
基準は0・1・2・3・4の5種類だけです。それ以外の数値を指定していないか確認してください。
IFERRORで安全にエラーを回避する
データに不備がある行でもエラー表示を防ぎたい場合は、IFERROR関数(エラーのとき代替値を返す関数)で囲みます。
=IFERROR(YEARFRAC(A2, TODAY(), 1), "")
A2が空欄だったり不正な日付だったりしても、エラーの代わりに空白が表示されます。名簿のように大量の行がある場面ではIFERROR関数との組み合わせがおすすめです。
DATEDIF関数との違い・使い分け
YEARFRAC関数とDATEDIF関数は、どちらも2つの日付の間隔を求める関数です。大きな違いは「戻り値の形式」です。
| 項目 | YEARFRAC関数 | DATEDIF関数 |
|---|---|---|
| 戻り値 | 年数の小数(例: 6.46) | 整数(例: 6) |
| 端数の扱い | 小数で含まれる | 切り捨てられる |
| 単位の指定 | 年のみ(自動) | Y/M/D/YM/MD/YDの6種類 |
| 基準の指定 | あり(0〜4) | なし |
| 引数の順序 | 開始日, 終了日 | 開始日, 終了日 |
| 逆順のとき | マイナスの値を返す | #NUM!エラー |
| 主な用途 | 期間の小数表示、金融計算 | 年齢計算、X年Yヶ月表示 |
使い分けの判断基準
「結局どちらを使えばいいの?」と迷ったときは、次の表で判断してみてください。
| やりたいこと | おすすめの関数 | 数式の例 |
|---|---|---|
| 勤続年数を「6.5年」のように小数で表示 | YEARFRAC | =YEARFRAC(A2, TODAY(), 1) |
| 勤続年数を「6年5ヶ月」のように表示 | DATEDIF | Y + YMの組み合わせ |
| 年齢を満年齢(整数)で求める | DATEDIF | =DATEDIF(A2, TODAY(), "Y") |
| 契約残期間が1年未満かどうか判定する | YEARFRAC | =YEARFRAC(TODAY(), B2, 1) < 1 |
| 2つの日付の日数だけ知りたい | DAYS関数 | =DAYS(B2, A2) |
小数の年数がほしいならYEARFRAC、整数の年・月・日で分解したいならDATEDIF、日数だけならDAYSと覚えておけば迷いません。
まとめ
YEARFRAC関数は、2つの日付の間隔を年単位の小数で返す関数です。
ポイントを整理します。
- 構文は
=YEARFRAC(開始日, 終了日, [基準])の2〜3引数 - 戻り値は小数(例: 6.46年)。端数まで含めた正確な年数がわかる
- 基準は省略可。実日数ベースで計算したいなら「1」を指定
- 勤続年数は
=YEARFRAC(入社日, TODAY(), 1)で自動計算できる - 整数の年数がほしいならINT関数で囲む
- 「X年Yヶ月」形式で表示したい場合はDATEDIF関数を使う
まずは =YEARFRAC(A2, TODAY(), 1) で勤続年数の計算から試してみてください。
