ExcelのDATEDIF関数を使えば、生年月日から満年齢を1つの式で自動計算できます。基本式は =DATEDIF(生年月日セル,TODAY(),”Y”) で、Excelを開くたびに年齢が自動更新されます。この記事では基本式から「○歳○か月」表示、エラー対処まで5ステップで解説します。

目次

この記事でわかること

年齢を自動更新する基本式1つをそのままコピペして使える。「○歳○か月」表示など3種類の単位を使い分けられる。エラーが出たときに原因を4パターンで即座に特定できる。

この記事の結論

DATEDIF関数で年齢を自動計算するには、=DATEDIF(A2,TODAY(),”Y”) の1式を入力するだけです。TODAY()を終了日に使うことで、Excelを開くたびに今日時点の満年齢へ自動更新されます。顧客台帳や名簿管理でそのままコピペして使える式を、この記事で全パターン網羅しています。

今日やるべき1つ

まず =DATEDIF(A2,TODAY(),”Y”) をB列に入力して動作確認してください(所要時間:約3分)。

状況別ショートカット

状況読むべきセクション所要時間
基本式を今すぐコピペしたいDATEDIF年齢計算は基本式1つで完結3分
“Y”/”YM”/”MD”の使い分けを知りたいDATEDIF単位は用途で3種類から選ぶ5分
複数人を一括処理したいDATEDIF年齢計算は複数行に3手順で展開5分
エラーが出て動かないDATEDIF使えない原因は4パターン5分
特定日時点の年齢を求めたいDATEDIF基準日は1セルで一括管理4分

DATEDIF年齢計算は基本式1つで完結

DATEDIF関数の基本書式は DATEDIF(開始日,終了日,単位) です。3つの引数の役割を整理すると、全体像をすぐに把握できます。

引数は開始日・終了日・単位の3つ

DATEDIF関数は3つの引数で構成されます。第1引数の開始日には生年月日セル(例:A2)を、第2引数の終了日にはTODAY()または任意の基準日セルを、第3引数の単位には計算したい期間の種類を文字列で指定します。

Microsoftの公式サポートでは「2つの日付の間の日数、月数、または年数を計算する」と説明されており、年齢計算以外にも勤続年数や期間計算に幅広く使える関数です。1つの関数をマスターするだけで、フリーランスの顧客台帳や名簿管理を効率化するスプレッドシート活用術と組み合わせれば、請求漏れゼロの事務環境を整えられます。

満年齢の基本式は=DATEDIF(A2,TODAY(),”Y”)

現在の満年齢を求める式は =DATEDIF(A2,TODAY(),”Y”) です。A2に生年月日(例:1990/4/15)が入っていれば、Excelを開いた日の満年齢が整数で返ります。

TODAY()はExcelを開いた瞬間に当日の日付を自動取得するため、年齢を手動で更新する必要がありません。単位 “Y” は「満年数」を意味し、誕生日を迎えた瞬間にカウントが1増える実際の年齢計算と完全に一致します。誕生日前日は前の年齢、誕生日当日から新しい年齢が表示される、法的な満年齢の考え方と同じ動作をします。

式は生年月日セルが日付形式でないと機能しない

DATEDIF関数が正常に動作するには、A2セルが「日付形式」で入力されている必要があります。セルを選択してリボンの「ホーム」タブのセル形式を確認し、「標準」や「文字列」になっている場合は「短い日付形式」に変更してください(所要時間:約1分)。

数値に見えても内部的に文字列として保存されているケースが多く、これがDATEDIF使えない問題の最多原因です。対処は後述のセクションで詳しく説明しますが、入力段階で日付形式を徹底することがすべての前提になります。

CHECK

▶ 今すぐやること: B2セルに =DATEDIF(A2,TODAY(),”Y”) と入力し、正しい年齢が表示されるか確認する(3分)

Q: DATEDIF関数はExcelのどのバージョンでも使えますか?

A: Excel 2007以降のWindows版およびMac版で使用できます。ただしMicrosoftの公式ドキュメントでは「文書化されていない関数」として扱われているため、Microsoftサポートページで最新の対応状況を確認してください。

Q: TODAY()の代わりに特定の日付を直接入力しても動きますか?

A: 動きます。=DATEDIF(A2,”2024/4/1″,”Y”) のように終了日を固定すれば、その日付時点の年齢が返ります。ただし式の中に日付を直書きすると管理しにくくなるため、基準日用のセルを別に用意する方法を後述セクションで解説します。

DATEDIF単位は用途で3種類から選ぶ

“Y”“YM”“MD” の3つの違いを把握すると、表示のバリエーションが一気に広がります。

“Y”は満年数、”YM”は端数月数、”MD”は端数日数

3つの単位はそれぞれ異なる粒度の期間を返します。

単位返す値使用例具体例(1990/4/15→2025/6/3)
“Y”満年数満年齢の表示35
“YM”年を除いた端数月数「○歳○か月」の月の部分1
“MD”年月を除いた端数日数「○か月○日」の日の部分19

“YM” は「全体の月数」ではなく「年を引いた後の端数月数」という点が重要です。上記の例でいえば35年と1か月と19日という内訳になり、それぞれ “Y” で35、“YM” で1、“MD” で19が返ります。この端数の概念を理解していないと、“YM” 単独で使って誤った数字を出力する操作ミスが発生します。

「○歳○か月」表示は2つのDATEDIFを連結する

「35歳1ヶ月」のような表示にするには、“Y” と “YM” の2つを文字列結合します。式は以下のとおりです。

=DATEDIF(A2,TODAY(),”Y”)&”歳”&DATEDIF(A2,TODAY(),”YM”)&”ヶ月”

この式をコピーしてB2に貼り付け、A2に生年月日が入っていれば即座に動作します(東京経済大学 Excel活用Tips)。顧客管理表で年齢を一覧表示したいフリーランスは、この式をそのまま流用してください。また売掛金管理Excelの自動化と組み合わせれば、顧客台帳の管理精度がさらに向上します。

年数だけでなく月数・日数の合計も取得できる

“M” 単位を使うと開始日から終了日までの「総月数」が返り、“D” では「総日数」が返ります。年齢計算というよりも契約残日数や支払いサイクルの管理に活用できます。たとえば =DATEDIF(A2,TODAY(),”M”) は生まれてから今日までの月数(約420ヶ月など)を返すため、年齢よりも細かい期間管理が必要な場面で有効です。フリーランスの場合は請求書の支払期日管理やプロジェクト期間の可視化にそのまま転用できます。

CHECK

▶ 今すぐやること: =DATEDIF(A2,TODAY(),”Y”)&”歳”&DATEDIF(A2,TODAY(),”YM”)&”ヶ月” をコピーしてC2セルに貼り付ける(2分)

Q: “YM”と”M”の違いは何ですか?

A: “M” は開始日から終了日までの総月数(例:420ヶ月)を返します。“YM” は年を引いた後の端数月数(例:1ヶ月)を返します。「○歳○か月」の表示を作るときは “YM” を使用してください。

Q: 「○歳○か月○日」まで表示させることはできますか?

A: できます。上記の式の末尾に &DATEDIF(A2,TODAY(),”MD”)&”日” を追加すれば「35歳1ヶ月19日」という表示が可能です。ただし日常的な年齢管理では「○歳」か「○歳○か月」までの粒度が実用的です。

DATEDIF年齢計算は複数行に3手順で展開

オートフィルの挙動を理解すれば、何百行でも数十秒で処理できます。

手順1:生年月日列と年齢計算列を分離して設計する

まず生年月日の入力列(例:A列)と年齢の計算列(例:B列)を必ず分けてください。同一セルに混在させると式が上書きされるリスクがあり、データ更新時に修正コストが跳ね上がります。A列に氏名、B列に生年月日、C列に年齢計算式という3列構成が最もシンプルで管理しやすいレイアウトです(所要時間:設計5分)。

手順2:C2に基本式を入力して動作確認する

C2セルに =DATEDIF(B2,TODAY(),”Y”) を入力し、正しい年齢が返ることを確認します。B2が日付形式になっているかをこのタイミングで必ず確認してください。数値が返らずエラーが出た場合は次セクションのトラブル対処を参照してください(所要時間:確認3分)。

手順3:C2をオートフィルで下行に展開する

C2を選択してセル右下の小さな「+」マーク(フィルハンドル)を下にドラッグすれば、B3以降の生年月日に対応した年齢が自動で展開されます。B列の参照が B2B3 と相対的にずれるため、固定の基準日セルを使う場合を除いて絶対参照($B$2)は不要です(所要時間:展開1分)。

数十行から数百行のリストでも、フィルハンドルのダブルクリックで隣接データの最終行まで一気に展開されます。1,000件の顧客名簿でもC2に式を1つ書いてダブルクリックするだけで全員の年齢が10秒以内に計算されます。

ExcelCampを活用して名簿管理の時間を大幅に短縮したユーザーは「オートフィルで一括展開できると知って、名簿管理の時間が大幅に減りました」と語っています。

CHECK

▶ 今すぐやること: 顧客台帳のB列に生年月日を日付形式で入力し、C2に =DATEDIF(B2,TODAY(),”Y”) を入れてフィルハンドルをダブルクリックする(5分)

Q: 途中に空白行があるとオートフィルが止まりますか?

A: 止まります。ダブルクリックによる展開は隣接列に空白がある行で停止します。空白行がある場合はフィルハンドルを手動でドラッグするか、空白行を事前に埋めてから展開してください。

Q: 数百行に展開すると動作が重くなりますか?

A: TODAY()を含む式は再計算が発生するため、数千行以上になると処理が遅くなる場合があります。行数が多い場合は計算方法を「手動」に切り替え、必要なタイミングでF9キーで再計算する運用も検討してください。なおExcelが重い場合の速度改善手順も参考にしてください。

DATEDIF使えない原因は4パターン

DATEDIF関数を入力したのに動かない場合、原因は以下の4パターンのほぼいずれかに絞られます。順番に確認すれば必ず解消できます。

パターン1:生年月日が文字列として入力されている

最も多いのは、生年月日セルが「日付形式」ではなく「文字列」または「標準」形式になっているケースです。セルを選択してリボンの「ホーム」タブ右上の書式ドロップダウンを確認し、「文字列」と表示されている場合は「短い日付形式」に変更したうえでセルに再入力してください。書式を変えるだけでは既存の文字列は日付に変換されないため、再入力または DATEVALUE() 関数による変換が必要です(アデコ – DATEDIF関数解説)。

パターン2:開始日が終了日より後の日付になっている

DATEDIF関数は「終了日が開始日より後」であることが前提です。開始日(生年月日)が誤って未来の日付になっている場合、#NUM! エラーが返ります。セルに入力された年号が正しいか(例:和暦と西暦の混在)を確認してください。

パターン3:TODAY()が再計算されていない

Excelの計算方法が「手動」に設定されている場合、TODAY()が更新されないまま古い日付を参照し続けます。「数式」タブ→「計算オプション」→「自動」を選択することで解消します(所要時間:1分)。

パターン4:関数名のスペルが間違っている

DATEDIFは関数候補のサジェストに表示されにくいため、スペルミスに気づかないことがあります(EXCEL女子 – DATEDIF関数解説)。DATEIF や DATEDIFF(末尾にFが2つ)と入力しているケースが典型的なミスです。正しくは DATEDIF(F1つ)です。Excelが候補表示をしてくれないため自分で気づきにくく、エラーが出たときに最初に確認すべきポイントです。

DATEDIFの代替案を調べたユーザーは「DATEDIFと入力しても候補に出てこないので存在しない関数かと思っていました」と語っています。

CHECK

▶ 今すぐやること: エラーが出ているセルのA列(生年月日セル)の書式を確認し、「短い日付形式」になっていなければ変更して再入力する(3分)

Q: #VALUE! エラーはどういう意味ですか?

A: 引数に日付以外の値が渡されているサインです。生年月日セルが文字列になっている場合に頻繁に発生します。セルの書式を「短い日付形式」に変更して再入力してください。

Q: #NUM! エラーはどういう意味ですか?

A: 開始日が終了日より後になっている場合に発生します。生年月日に未来の日付が入っていないか、年号(西暦・和暦)の入力ミスがないか確認してください。

DATEDIF基準日は1セルで一括管理

「今日時点」ではなく「2024年4月1日時点の年齢」が必要な場面は、フリーランスの実務でも発生します。基準日セルを1つ設けるだけで修正コストをゼロにできます。

基準日セルを1つ用意してすべての式で参照する

E2セルに基準日(例:2024/4/1)を入力し、年齢式の終了日を TODAY() から $E$2 に変更します。式は =DATEDIF(B2,$E$2,”Y”) となります。$E$2 は絶対参照のため、オートフィルで下行に展開してもE2のみを参照し続けます。

基準日をE2の1か所だけ変えれば全行の年齢が一斉に更新されるため、年度切替や特定イベント時点での年齢確認が数秒で完了します。基準日を複数の式に直接書き込む方法は、変更が必要になったときに修正漏れが発生するリスクがあるため避けてください(YRL – 特定日の年齢計算)。

DATEDIF×基準日の活用で顧客管理シートを設計できる

フリーランスが顧客のサービス利用年数を可視化したい場合、契約開始日を開始日、基準日セルを終了日にして “Y” を指定すれば勤続・利用年数の一覧表が完成します。年齢計算とまったく同じ構造のため、1つのシートに年齢と利用年数を並列で管理することも可能です。個人事業主の見積書を管理するフォーマットと同様に、顧客台帳の設計時点で基準日セルを必ず1列用意しておくことを推奨します。

基準日セルには過去または現時点の日付のみを入力する

基準日セルに未来の日付を入れることは推奨しません。DATEDIF関数は未来時点の年齢計算でも動作上は問題ありませんが、TODAY()との組み合わせ設計と混在すると参照先の意図が分かりにくくなります。基準日セルには「確認したい過去または現時点の日付」のみを入力する運用で統一してください。TODAY()をそのまま入力せず基準日セルを毎日手動更新するやり方は逆効果です。TODAY()に任せておくほうが更新コストがかかりません。

CHECK

▶ 今すぐやること: シートの空きセル(例:E2)に今日の日付または確認したい基準日を入力し、年齢式の終了日を $E$2 に変更してオートフィルで展開する(4分)

Q: TODAY()と固定の基準日セルを同じシートで混在させていいですか?

A: 動作上は可能ですが、列ごとに参照先が異なる設計は管理ミスの原因になります。「今日時点の年齢」列と「基準日時点の年齢」列を分けて見出しラベルを明記する運用を推奨します。

Q: 基準日を別シートに置いても参照できますか?

A: できます。=DATEDIF(B2,Sheet2!$A$1,”Y”) のようにシート名を指定して参照できます。ただし別シートとのリンクは表の移動やコピー時に壊れやすいため、同一シート内の固定セルを使う方が安全です。

DATEDIF年齢計算を5つの仕組みで完全活用

ここまでの基本を踏まえたうえで、フリーランスの実務で差がつく5つの活用ポイントを解説します。どれも今日から使えるコピペ可能な式を含んでいます。

ポイント1:TODAY()の自動更新で年齢を毎日メンテナンスフリーにする

【対象】: 顧客名簿や会員台帳を定期的に手動更新している方

【手順】: 年齢を表示したいセル(例:C2)に =DATEDIF(B2,TODAY(),”Y”) を入力します(2分)。C2のフィルハンドルをダブルクリックして全行に展開します(1分)。「数式」タブ→「計算オプション」→「自動」が選択されていることを確認します(1分)。

【ポイントと理由】: TODAY()を式に組み込んでしまえば開くたびに全員の年齢が自動更新されます。TODAY()は再計算が自動設定されている限り毎回最新の日付を取得するため、年に1度の誕生日更新を手動で行う必要がゼロになります。計算オプションが「自動」になっていない場合だけ更新が止まるため、この設定1点だけ確認すれば運用上のリスクが排除されます。

【注意点】: 計算オプションを「手動」にする必要は通常ありません。重いファイルの処理速度改善のために手動にする場合も、TODAY()を使っているシートだけは自動に戻す運用を維持してください。

ポイント2:「○歳○か月」表示で顧客台帳の精度を上げる

【対象】: 年齢だけでなく月単位の経過期間も管理したいフリーランス

【手順】: 以下の式をコピーします(1分)。=DATEDIF(B2,TODAY(),”Y”)&”歳”&DATEDIF(B2,TODAY(),”YM”)&”ヶ月” を年齢表示列(例:D2)に貼り付けます(1分)。フィルハンドルで全行に展開します(1分)。

【ポイントと理由】: “YM” を追加して月単位まで表示させると顧客対応精度が上がります。誕生日まであと何か月かを瞬時に把握できるため、誕生日施策やサービス更新タイミングの案内が誤差ゼロで実行できます。“YM” は年を除いた端数月数を返すため、“Y” との組み合わせで初めて正確な「○歳○か月」が構成されます。単独で “YM” を使ってもゼロから12の値しか返らない点は、意図した数字とずれる原因になります。

【注意点】: この式は文字列を返すため、セルの値を数値として集計(SUM・AVERAGEなど)することはできません。集計が必要な場合は “Y” のみで数値を返す列を別途用意してください。

ポイント3:セルの日付形式を統一してエラーをゼロにする

【対象】: 複数人からデータをもらってExcelに貼り付けているフリーランス

【手順】: 生年月日列(例:B列)全体を選択します(30秒)。リボン「ホーム」タブの書式ドロップダウンで「短い日付形式」を選択します(1分)。貼り付けたデータを選択し「データ」タブ→「区切り位置」→「完了」で日付認識を再適用します(2分)。

【ポイントと理由】: 書式変更だけでは文字列として保存された日付データは日付型に変換されず、DATEDIF関数が #VALUE! エラーを出し続けます。区切り位置ウィザードはデータの型変換を強制的に行うため、書式変更後も解消しないエラーのほぼ100%を解決します。

【注意点】: 区切り位置ウィザードは適用した列のデータをその場で書き換えます。元データを残したい場合は別列にコピーしてから実行してください。

ポイント4:絶対参照$E$2で基準日を一括管理する

【対象】: 契約更新時期や年度替わりに全員の年齢を特定日時点で確認したいフリーランス

【手順】: シートの空きセル(例:E2)に確認したい基準日を入力します(1分)。年齢式を =DATEDIF(B2,$E$2,”Y”) に変更します(1分)。オートフィルで全行に展開します(1分)。

【ポイントと理由】: 特定日時点の年齢確認が必要な場面(例:2025年4月1日時点の顧客年齢一覧)では、式の中に日付を直書きするとのちに変更したい場合に全式を修正する手間が発生します。基準日をE2の1箇所だけで管理すれば、セルの値を変えるだけで全行が一斉に再計算されるため、修正コストが大幅に削減されます。

【注意点】: 絶対参照($E$2)を使い忘れると、オートフィルで展開したときに $E$3$E$4 とずれてしまい、行ごとに異なる基準日を参照する誤計算が発生します。$ を付けているかを展開前に必ず確認してください。「TODAY()を使う列」と「基準日セルを参照する列」を明確に分けて設計することで、参照ミスを防げます。

ポイント5:DATEDIFを勤続年数・契約期間に横展開する

【対象】: 年齢管理と同時に顧客の契約年数や取引継続期間も管理したいフリーランス

【手順】: 契約開始日列(例:F列)を用意し、日付形式で入力します(5分)。勤続・契約年数列(例:G列)に =DATEDIF(F2,TODAY(),”Y”)&”年”&DATEDIF(F2,TODAY(),”YM”)&”ヶ月” を入力します(2分)。フィルハンドルで全行に展開し、年齢列と並べて確認します(1分)。

【ポイントと理由】: DATEDIFは年齢専用ではなく、開始日と終了日があればあらゆる期間計算に使える汎用関数です。年齢計算とまったく同じ構造で、契約継続年数・プロジェクト経過期間・保証期間の残日数などを計算できます。顧客台帳に年齢列と契約年数列を並べると、「長期顧客の高年齢層」や「新規の若年層」といったセグメント把握がExcelだけで完結します。家事按分計算ツールの活用と同様に、計算ロジックを一度整備してしまえば毎期の作業負担がほぼゼロになります。

【注意点】: 契約開始日が空白のセルがある場合、DATEDIF関数は #NUM! または #VALUE! エラーを返します。空白行をエラー表示させたくない場合は =IF(F2=””,””,DATEDIF(F2,TODAY(),”Y”)&”年”) のようにIF関数で空白判定を加えてください。

CHECK

▶ 今すぐやること: 現在の顧客台帳を開き、ポイント1の式をC列に貼り付けて計算オプションが「自動」になっているか確認する(5分)

Q: DATEDIF以外で年齢を計算する方法はありますか?

A: =INT((TODAY()-A2)/365.25) のような代替式もありますが、うるう年の扱いで数日のズレが生じる場合があります。正確な満年齢にはDATEDIFが最も確実です。代替案の詳細はDATEDIF代替案の解説ページで確認できます。

DATEDIF年齢計算を定着させる:今日から使える式と運用の完全まとめ

DATEDIFで年齢を自動計算するための基本式は =DATEDIF(B2,TODAY(),”Y”) の1行です。TODAY()を組み合わせることで毎日の手動更新が不要になり、フィルハンドルで複数行に展開すれば大量のデータも数秒で処理できます。エラーが出る場合は生年月日の書式確認とスペルチェックの2点を先に確認すれば、原因の多くが解消します。

今日からExcelの顧客台帳に =DATEDIF(B2,TODAY(),”Y”) を1列追加するだけで、年齢管理の手間は実質ゼロになります。式の仕組みを理解したうえで、“YM” による月単位表示や基準日セル管理まで順番に試してください。Excelを活用した業務効率化をさらに進めたい場合は、COUNTIF複数条件の使い方も参照すると、顧客データの集計力が大幅に向上します。

状況次の一歩所要時間
まず動作確認したいB2に生年月日を入力してC2に基本式を貼り付ける3分
月まで表示させたい「○歳○か月」式をコピーしてD2に貼り付ける2分
エラーが出て困っている生年月日列の書式を「短い日付形式」に変更して再入力5分
特定日時点の年齢が必要E2に基準日を入力して式の終了日を$E$2に変更する4分

DATEDIF年齢計算に関するよくある質問

Q: DATEDIFはGoogleスプレッドシートでも使えますか?

A: はい、Googleスプレッドシートでも同じ書式で使用できます。=DATEDIF(B2,TODAY(),”Y”) はそのままGoogleスプレッドシートでも動作します。

Q: 年齢の代わりに「○年後の年齢」を表示させることはできますか?

A: できます。TODAY()の代わりに DATE(YEAR(TODAY())+5,MONTH(TODAY()),DAY(TODAY())) を終了日に指定すれば、5年後時点の年齢が計算されます。基準日セルに任意の将来日付を入力して $E$2 で参照する方法がより実用的です。

Q: 年齢から逆算して誕生日を特定することはできますか?

A: DATEDIFは誕生日の逆算には使えません。「今年の誕生日まであと何日か」を計算したい場合は、DATE関数とTODAY()を組み合わせた別の式が必要です。

【出典・参照元】

DATEDIF関数 – Microsoft サポート – Microsoftの公式DATEDIF関数リファレンス

東京経済大学 Excel活用Tips – 今日時点の年齢を出す基本手順の解説

アデコ – DATEDIF関数解説 – 年齢・日数・月数の複数パターン解説

YRL – 特定日の年齢計算 – 特定日基準の年齢計算方法

EXCEL女子 – DATEDIF関数解説 – 勤続年数・年齢計算の実践例

ExcelCamp – DATEDIF関数の使い方 – オートフィルによる一括展開の解説

DATEDIF代替案 – nyanto – DATEDIFが使えない場合の代替式の解説