業務効率化

DATEDIFで契約期間・勤続年数を自動計算する|締結日から「○年○ヶ月」を出す

ExcelMate編集部7分

この記事の要点

  • 締結日から今日までの契約期間・勤続年数は DATEDIF で「○年○ヶ月」と自動計算できる
  • 数式は =DATEDIF(開始日, 基準日, "Y")。第3引数を Y(年)/ YM(端数の月)/ M(通算の月)で使い分ける
  • 基準日を TODAY() にすれば毎日自動更新され、更新期限が近い契約をIFやアラートで知らせることもできる

賃貸契約の経過期間、顧問契約の継続年数、従業員の勤続年数——「締結日から今で何年何ヶ月か」を、毎回手で数えていませんか。件数が増えると計算ミスも起きやすく、更新時期の見落としにもつながります。

この計算は DATEDIF 関数で自動化できます。開始日と基準日を渡すだけで「○年○ヶ月」が出て、基準日を今日にすれば毎日勝手に更新されます。実際の画面で見ていきましょう。

完成イメージ

物件・契約ごとに締結日から基準日(2026/6/1)までの経過を、「経過年数」と「年数+月数」で自動計算しています。

DATEDIF関数で締結日から基準日までの契約期間を年と月で自動計算したExcel画面。E2セルにDATEDIFを使った数式を入力し、駅前テナントAが6年10ヶ月と表示されている
E2 に入力した数式と結果(締結日から基準日までを「○年○ヶ月」で自動算出)

数式の意味

「年数+月数」のセルに入れているのは、次の数式です。

=DATEDIF(B2, C2, "Y")&"年"&DATEDIF(B2, C2, "YM")&"ヶ月"

DATEDIF は「2つの日付の差を、年・月・日の単位で返す」関数です。引数は3つです。

  1. 開始日(B2)… 締結日・入社日など、数え始める日
  2. 基準日(C2)… 数え終わる日。今日にしたいなら TODAY()
  3. 単位("Y")… 何の単位で返すか。下表で使い分けます

上の数式は「満年数(Y)」と「年数を引いた残りの月数(YM)」を別々に出し、文字でつないで「6年10ヶ月」と表示しています。

単位(第3引数)の使い分け

  • "Y" … 満何年(例:6年)
  • "M" … 通算で満何ヶ月(例:82ヶ月)。月額の更新回数などに便利
  • "YM" … 満年数を引いた残りの月数(例:10ヶ月)。「○年○ヶ月」の月の部分

「○年○ヶ月」と出したいときは Y と YM をつなぐ、通算の月数だけ欲しいときは M を単体で使う、と覚えておくと迷いません。

つまずきやすいポイント①:関数候補に出てこない

DATEDIF は =DA まで打っても入力候補に表示されません。古い表計算ソフトとの互換のために残された関数で、候補には出ない仕様です。手で =DATEDIF( と打てば正常に動きます。「壊れている」わけではないので、そのまま入力してください。

つまずきやすいポイント②:基準日を TODAY() にして自動更新

基準日のセルに =TODAY() を入れる、または数式内で =DATEDIF(B2, TODAY(), "Y") とすると、ファイルを開くたびに今日の日付で計算し直され、年数・月数が毎日自動更新されます。さらに「更新が近い契約を知らせたい」なら、IF関数と組み合わせます。

=IF(DATEDIF(TODAY(), 更新日, "M")<=2, "更新間近", "")

更新日まで2ヶ月を切った契約に「更新間近」を自動表示でき、契約更新の見落としを防げます。

よくあるエラーと対処

  • #NUM! や変な値が出る … 開始日が基準日よりになっています。開始日と基準日の前後関係を確認します。
  • 計算されず日付がそのまま出る … 日付が文字列として入っている可能性があります。セルが日付形式(既定で右寄せ)になっているか確認します。
  • "MD" を使うと値がおかしい … 日数の端数を出す "MD" はうるう年などで不正確になることが知られています。日数まで厳密に出したい場合は 基準日 - 開始日 の引き算を使う方が安全です。

まとめ

DATEDIF を使えば、契約期間や勤続年数の「○年○ヶ月」は自動で出て、基準日を TODAY() にすれば毎日更新されます。IF と組み合わせれば、更新間近の契約を自動で知らせる管理表にもできます。

「契約・物件・従業員のデータをまとめて管理する表を作りたい」「更新アラートや帳票出力まで自動化したい」という場合は、ExcelMate のチャット相談でそのままご相談いただけます。

よくある質問

DATEDIFが関数一覧に出てこないのはなぜ?
DATEDIFは古い表計算ソフトとの互換のために残された関数で、入力候補(オートコンプリート)には表示されません。手で =DATEDIF( と打てば正常に使えます。表示されないだけで機能はします。
DATEDIFのYとYMとMの違いは?
Yは満何年、Mは通算の満何ヶ月、YMは満年数を引いた残りの月数です。「○年○ヶ月」と出したいときは、Yで年を、YMで端数の月を出して文字でつなぎます。
勤続年数や契約期間を今日時点で自動更新するには?
基準日のセルにTODAY()を使うか、数式内で =DATEDIF(開始日, TODAY(), "Y") とします。TODAY()はファイルを開くたびに今日の日付になるため、年数・月数も自動で更新されます。
DATEDIFでエラーや変な値が出るのはなぜ?
開始日が基準日より後になっているとエラーになります。また、日付が文字列として入力されていると正しく計算できません。開始日と基準日が日付形式(右寄せで表示される)になっているかを確認します。

監修・運営者

株式会社KOPS 代表取締役 馬込 浩

馬込 浩株式会社KOPS 代表取締役

業務システムの要件定義〜設計〜実装を一気通貫で手がけ、経営者として自社のバックオフィスも運営。Excel・VBA・Power Query/スプレッドシート自動化の実務経験にもとづき、ExcelMateの記事を監修しています。

運営者情報・監修者プロフィールを見る