VBAで生年月日から、年度末時点で何歳になっているのか計算する方法です。
目次
サンプルソースコード
'------------------------------------------------------------
' 処理内容:誕生日から実行日の年度末に何歳か計算する
' 引数:生年月日
' 戻り値:年齢
' 更新:
'------------------------------------------------------------
Function NendoAge(BD As Date) As Integer
'年度末日
Dim NendoEndDate As Date
'年度末日付の定型文字作成
Const DATE_331 = "/3/31"
'実行日の年度末算出(年+定型文字列)
'現在日が4月~12月なら年度末日の年は現在年+1
If Month(Date) >= 4 Then
NendoEndDate = CDate(Year(Date) + 1 & DATE_331)
Else
NendoEndDate = CDate(Year(Date) & DATE_331)
End If
'生年月日と年度末日の年の差分を計算する
NendoAge = DateDiff("yyyy", BD, NendoEndDate)
'ただし誕生日が4月1日以降の場合、年度末に年齢は増えないため-1する
If Month(BD) > 3 Then
NendoAge = NendoAge - 1
End If
End Function
コードの解説
関数の引数は生年月日(日付型)です。
実行日の年度末日付を求める
まず年度末日は3月31日なので定型文字列として”3/31″を作成します。
その後、現在月に応じて年度を付加した年度末日を作成します。
- 現在日が4月以降なら年度末日は翌年の3月31日
- 現在日が3月以前なら年度末日は現在年の3月31日
生年月日と年度末日の年の差異を求める
DateDiff()関数を使って、2つの日付の年の差異を求めます。
DateDiff()関数の第一引数”yyyy”は年の差異を求めるので、4月1日~12月31日生まれの人も3月31日に1歳年齢が上がってしまいます。
例
1979/4/1生まれの人と1980/3/1生まれの人は同級生(年度末時点の年齢は同じ)ですが、Datediff()関数で年の差異を求めると4/1生まれの人の年齢が1歳年上になってしまいます。
このため、4月以降の生年月日の人は計算結果の年から1マイナスします。
現在日と生年月日で年齢を求める際も、現在日が誕生日を過ぎたのかどうかを意識して計算する必要があります。
単純に年の差異を求めるだけではNGですので気を付けましょう。
コメント