【Excel】エクセルで年齢を計算する方法|指定日を基準に自動計算
エクセルで生年月日から年齢を求める際は、今日時点の年齢だけでなく、契約日、基準日、年度末など、任意の日付を基準に正確に計算できるようにしておくことが大切です。
単純に年だけを引き算すると、誕生日をまだ迎えていない人まで年齢が一つ上に表示されるため、名簿や顧客管理表では誤りにつながる可能性があります。
この記事では、DATEDIF関数やYEARFRAC関数を使い、指定日を基準に満年齢を自動計算する方法を詳しく解説します。
満年齢の計算にはDATEDIF関数の「Y」を使う方法が基本です。
基準日をセルに入力しておけば、今日の日付ではなく任意の時点の年齢を一覧で管理できます。
生年月日がB列、基準日がE1セルにある表として数式を紹介します。
それでは、指定日を使った年齢計算の仕組みから確認していきましょう。
エクセルで年齢を自動計算する基本式
それではまず、指定日時点の満年齢を求める基本の数式について解説していきます。
| A | B | C | E |
|---|---|---|---|
| 氏名 | 生年月日 | 年齢 | 基準日 |
| 山田 花子 | 1990/10/20 | 33 | 2024/10/1 |
| 佐藤 太郎 | 1985/3/15 | 39 |
DATEDIF関数による満年齢の算出
DATEDIF関数は、開始日から終了日までの期間を年数、月数、日数などで求められる関数です。
年齢計算では、生年月日を開始日、基準日を終了日として指定し、単位にYを入力します。
=DATEDIF(B2,$E$1,”Y”)
この数式をC2セルへ入力すると、B2の生年月日からE1の基準日までに経過した満年数が表示されます。
Yは満年数を意味し、誕生日を迎えていない期間は年齢に加算されません。

たとえば1990年10月20日生まれの人を2024年10月1日時点で計算すると、誕生日の前なので33歳と判定されます。
年だけを引き算した場合は34となりますが、DATEDIF関数なら実際の満年齢に合わせられます。
【操作のポイント】基準日を固定参照にするため、E1にはドル記号を付けた$E$1を指定します。
数式を下方向へコピーする操作
最初のデータ行で年齢の数式を作成したら、同じ列の下にある社員や顧客の行へコピーします。
C2セルを選択すると、セル右下に小さな四角形であるフィルハンドルが表示されます。
このフィルハンドルを下へドラッグするか、連続するデータがある場合はダブルクリックしましょう。

するとB3、B4以降の生年月日を参照する数式へ自動的に調整され、一覧の年齢がまとめて計算されます。
一方で基準日の$E$1は固定されるため、コピー先でも全員が同じ指定日を基準に計算されます。
相対参照のB2と絶対参照の$E$1を組み合わせることが、名簿で年齢を一括計算する重要な考え方です。
【操作のポイント】データに空白行があるとダブルクリックでコピーされないことがあるため、その場合はドラッグで範囲を指定します。
基準日セルの入力と日付形式の確認
基準日を入力するE1セルには、2024/10/1のようにエクセルが日付として認識できる形式で入力します。
年月日を文字列として入力してしまうと、DATEDIF関数が正しく計算できず、エラーになることがあります。
日付として認識されているか確認するには、セルを選択して数式バーを見たり、表示形式を日付へ変更したりする方法が有効です。
基準日を毎月更新する管理表では、E1セルを「基準日」などの見出しの近くに置くと、誰が見ても計算条件を確認しやすくなります。
年齢欄に###と表示される場合は列幅が足りない可能性があるため、C列の右側の境界線をドラッグして広げましょう。
基準日を変更すれば、すべての年齢が同時に再計算されます。
【操作のポイント】表示形式だけを変えても日付そのものは変わりませんが、文字列の日付は数式で利用できない場合があります。
TODAY関数を基準日にした現在年齢の計算
続いては、ファイルを開いた日を基準に年齢を自動更新する方法を確認していきます。
| A | B | C |
|---|---|---|
| 氏名 | 生年月日 | 今日の年齢 |
| 鈴木 一郎 | 2001/9/20 | 23 |
TODAY関数を組み込んだ年齢計算式
現在の満年齢だけを知りたい場合は、基準日セルの代わりにTODAY関数を使用できます。
=DATEDIF(B2,TODAY(),”Y”)
TODAY関数は、ブックを開いた日付を自動的に返す関数です。
そのため、翌年の誕生日を過ぎた後にファイルを開けば、年齢は自動的に一つ増えます。
TODAY関数は毎日変わる日付を返すため、現在の年齢を手入力で更新する必要がありません。

ただし、過去の時点や将来の予定日時点の年齢を残したい表には、TODAY関数より基準日セルを使う方法が適しています。
【操作のポイント】TODAY関数には引数を入力しませんので、必ずTODAY()のように丸括弧を付けて入力します。
更新タイミングと計算方法の設定
TODAY関数を含む数式は、通常はブックを開いたときやセルの再計算時に更新されます。
年齢が変わらないと感じた場合は、数式タブの計算方法の設定が手動になっていないか確認しましょう。
手動計算が選ばれていると、日付が変わっても数式結果がすぐに更新されないことがあります。
数式タブの計算方法の設定から自動を選択すると、編集内容や日付の変化に応じて再計算されやすくなります。
キーボードでF9キーを押して、必要なタイミングで再計算する方法もあります。
提出用の資料では、いつの時点で計算した年齢なのかを表内に明記しておくと誤解を防げます。
【操作のポイント】自動更新が不要な帳票では、TODAY関数の結果を値として貼り付けて確定させる方法もあります。
今日の日付を表示するセルの活用
TODAY関数を年齢の数式内に直接書く代わりに、E1セルなどへ今日の日付を表示して参照する構成も便利です。
E1セルに =TODAY() を入力します。
C2セルには =DATEDIF(B2,$E$1,”Y”) を入力します。
この方法なら、表を見た人がどの日付を基準に年齢を出しているかをすぐに確認できます。
また、E1の式を特定の日付へ置き換えるだけで、現在年齢と指定日時点の年齢を切り替えられます。
計算条件をセルに見える形で置く設計は、引き継ぎやチェックにも役立ちます。
【操作のポイント】TODAY関数の結果には日付表示形式を設定し、年月日が見える状態にしておきます。
指定日をセル参照する年齢計算表
続いては、契約日や基準日をセルで指定し、年齢一覧を管理する表の作り方を確認していきます。
| A | B | C | D |
|---|---|---|---|
| 氏名 | 生年月日 | 基準日 | 年齢 |
| 田中 美咲 | 1998/12/5 | 2025/4/1 | 26 |
個別の指定日を使う数式
人ごとに異なる契約日、採用日、判定日などを基準に年齢を求めたい場合は、各行に基準日を入力します。
=DATEDIF(B2,C2,”Y”)
この数式では、B2セルの生年月日からC2セルの基準日までの満年齢をD2セルに表示します。
同じ人でも基準日が変われば年齢も変わるため、過去の契約書やイベント参加時の年齢確認に向いています。
数式を下へコピーすれば、B列とC列の各行を参照して、それぞれの指定日時点の年齢が表示されます。
基準日が人ごとに異なる一覧では、絶対参照ではなく同じ行のC2を参照します。
【操作のポイント】生年月日より前の日付を基準日にするとDATEDIF関数はエラーになるため、入力日を確認します。
固定基準日を使う数式
全員を同じ日付で判定する場合は、基準日を表の外に一つだけ入力し、数式で絶対参照します。
たとえばE1セルに2025/4/1を入力した場合、C2セルの数式は =DATEDIF(B2,$E$1,”Y”) です。
ドル記号を付けないままコピーすると、参照先がE2、E3とずれてしまい、意図しない結果になります。
固定する必要があるセル参照を選択した状態でF4キーを押すと、$E$1の絶対参照へ切り替えられます。
会計年度末、入学日、保険の判定日など、組織で共通の基準日があるケースではこの形式が使いやすいでしょう。
【操作のポイント】基準日セルには背景色を付け、変更してよい入力欄だと分かるようにしておくと便利です。
空白セルを除外するIF関数
生年月日が未入力の行まで数式をコピーすると、DATEDIF関数でエラーが表示されることがあります。
空白行が混ざる可能性がある表では、IF関数で生年月日が空欄かどうかを先に判定しましょう。
=IF(B2=””,””,DATEDIF(B2,$E$1,”Y”))
この数式は、B2が空欄なら空欄を返し、生年月日が入力されている場合だけ年齢を計算します。
入力途中の名簿でエラー表示を減らすには、IF関数を組み合わせる方法が実用的です。
基準日も空欄になる可能性があるなら、=IF(OR(B2=””,E1=””),””,DATEDIF(B2,$E$1,”Y”)) のように条件を追加できます。
【操作のポイント】数式内の空欄は、二重引用符を続けた””で表現します。
YEARFRAC関数とDATEDIF関数の使い分け
続いては、年齢計算でよく比較されるYEARFRAC関数とDATEDIF関数の違いを確認していきます。
| 関数 | 計算結果 | 主な用途 |
|---|---|---|
| DATEDIF | 満年齢 | 年齢、勤続年数 |
| YEARFRAC | 小数を含む年数 | 経過年数、比率計算 |
YEARFRAC関数による小数年齢
YEARFRAC関数は、二つの日付の間隔を年単位で計算し、小数を含む結果として返します。
=YEARFRAC(B2,$E$1,1)
たとえば満年齢が30歳でも、誕生日から半年ほど経過していれば30.5前後の値になる場合があります。
これは一般的な年齢の表示よりも、在籍期間や契約期間を年数で分析したい場合に向く計算です。
日常的な満年齢を表示するならDATEDIF関数、年数を小数で扱うならYEARFRAC関数が適しています。
【操作のポイント】第3引数に1を指定すると、実際の日数を基にした計算方法で年数を求めます。
INT関数で整数年数にする方法
YEARFRAC関数の結果から小数部分を切り捨てて、整数の年数だけを表示したいこともあります。
=INT(YEARFRAC(B2,$E$1,1))
INT関数は数値を切り捨てるため、30.9という結果なら30を返します。
ただし、年齢を正確に判定する用途では、日付計算の意図が明確なDATEDIF関数を優先すると分かりやすいでしょう。
YEARFRAC関数は基準日数の扱いによって結果が変わるため、制度上の年齢判定には注意が必要です。
【操作のポイント】小数表示を見せたい場合は、セルの表示形式で小数点以下の桁数を調整します。
年月日を分けて表示する計算式
年齢だけでなく、何歳何か月何日なのかを表示したい場合は、DATEDIF関数の単位を組み合わせます。
=DATEDIF(B2,$E$1,”Y”)&”歳”&DATEDIF(B2,$E$1,”YM”)&”か月”
Yは満年数、YMは満年数を除いた月数を返します。
さらに日数まで必要な場合は、MDを指定したDATEDIF関数を追加します。
年齢の詳細表示は、健康診断の管理表や幼児の月齢管理などで役立つ場合があります。
ただし、一般的な社員名簿や顧客リストでは、年齢列を整数にしておくほうが表を読みやすくできます。
【操作のポイント】文字列をつなぐアンパサンドは、年齢の数値と「歳」などの文字を結合するために使用します。
年齢計算で起こりやすいエラーと対処
続いては、年齢計算の数式で表示されやすいエラーと確認事項について解説していきます。
| 表示 | 主な原因 | 確認内容 |
|---|---|---|
| #NUM! | 開始日と終了日の順序 | 基準日が生年月日より後か確認 |
| #VALUE! | 日付が文字列 | セルのデータ形式を確認 |
基準日が生年月日より前の場合
DATEDIF関数では、開始日に生年月日、終了日に基準日を指定します。
基準日が生年月日より前になっていると、経過期間を求められないため#NUM!エラーが表示されます。
未来の生年月日を誤って入力した場合や、基準日の年を間違えた場合に起こりやすい現象です。
数式を修正する前に、生年月日と基準日の大小関係を確認することがエラー解決の近道です。
将来日付のデータも扱う必要がある場合は、IF関数でエラーを非表示にする設計を検討できます。
【操作のポイント】日付の比較は、見た目ではなくエクセル内部の日付データを基に行われます。
文字列の日付を日付データへ変換する方法
セル内で日付に見えていても、左寄せで表示される場合は文字列として入力されている可能性があります。
文字列の日付はDATEDIF関数で使えないことがあるため、まずセルの表示形式と数式バーの内容を確認します。
区切り文字を統一して再入力するほか、データタブの区切り位置を利用して変換する方法があります。
日付として認識させる基本操作は、対象セルを選択し、ホームタブの表示形式から短い日付形式を選ぶ流れです。
文字列の前後に余分な空白がある場合も、日付として判定できない原因になるかもしれません。
【操作のポイント】日付を再入力した後は、数式の結果が自動で変わるか確認してから表を完成させます。
うるう年と誕生日の取り扱い
2月29日生まれの人の年齢計算では、うるう年でない年の扱いが気になることがあります。
DATEDIF関数を使うと、日付の経過に基づいて年数が計算されるため、手作業で年だけを引くより安全です。
ただし、法律上や社内規程上の年齢判定日には独自のルールがある場合があります。
制度上の判定が関係する年齢は、数式結果だけで確定せず、適用する規程も確認しましょう。
通常の名簿管理では、DATEDIF関数で満年齢を表示し、必要に応じて備考欄へ判定基準を記載する運用が分かりやすい方法です。
【操作のポイント】うるう年のデータを含む表では、実際の基準日を変えながら計算結果をテストします。
まとめ エクセルで指定日を基準に年齢を計算する方法
エクセルで年齢を正確に計算する基本は、DATEDIF関数で生年月日から基準日までの満年数を求める方法です。
共通の指定日を使う場合は =DATEDIF(B2,$E$1,”Y”) を入力し、E1セルの日付を変更するだけで一覧全体の年齢を更新できます。
今日時点の年齢を自動更新したい場合は、=DATEDIF(B2,TODAY(),”Y”) が便利です。
年だけを差し引く計算では誕生日を迎えていない人を正しく判定できないため、満年齢にはDATEDIF関数を使いましょう。
生年月日や基準日が空欄の可能性がある表ではIF関数を組み合わせ、エラーを見せない構成にすると実務で扱いやすくなります。
また、日付が文字列になっていないか、基準日が生年月日より後になっているかも、計算前に確認したいポイントです。
指定日を明示した年齢計算表を作成すれば、採用日、契約日、年度末など、用途に応じた年齢判定を効率よく管理できるでしょう。