賃貸契約の経過期間、顧問契約の継続年数、従業員の勤続年数——「締結日から今で何年何ヶ月か」を、毎回手で数えていませんか。件数が増えると計算ミスも起きやすく、更新時期の見落としにもつながります。
この計算は DATEDIF 関数で自動化できます。開始日と基準日を渡すだけで「○年○ヶ月」が出て、基準日を今日にすれば毎日勝手に更新されます。実際の画面で見ていきましょう。
完成イメージ
物件・契約ごとに締結日から基準日(2026/6/1)までの経過を、「経過年数」と「年数+月数」で自動計算しています。
数式の意味
「年数+月数」のセルに入れているのは、次の数式です。
=DATEDIF(B2, C2, "Y")&"年"&DATEDIF(B2, C2, "YM")&"ヶ月"
DATEDIF は「2つの日付の差を、年・月・日の単位で返す」関数です。引数は3つです。
- 開始日(B2)… 締結日・入社日など、数え始める日
- 基準日(C2)… 数え終わる日。今日にしたいなら
TODAY() - 単位("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 のチャット相談でそのままご相談いただけます。

