年度年齢(年度末時点での年齢)を取得するには、
その年度の最終日、つまり3/31時点の年齢を計算します。
年齢の計算を行う方法としては、
- シート関数DATEDIFをFormulaプロパティから使う
- シート関数DATEDIFをEvaluateメソッドから使う
- 自作の年齢取得関数を作成して使う
この三つの方法があります。
※ VBAのDateDiff関数では年齢を求めることはできません。
3つのコードを記載しておきますので、
詳しい解説はこちらの記事をご覧ください。
シート関数DATEDIFをFormulaプロパティから使う
Sub A列の生年月日からB列の年度年齢を計算する() Dim ws処理シート As Worksheet Set ws処理シート = Worksheets("○○") Dim 最終行 As Long 最終行 = ws処理シート.Cells(ws処理シート.Rows.Count, "A").End(xlUp).Row Dim 年齢データ範囲 As Range Set 年齢データ範囲 = ws処理シート.Range("B2:B" & 最終行) Dim 年度 As Long 年度 = 2025 ' シート数式で計算 年齢データ範囲.Formula = "=DATEDIF(A2," & Format(DateSirial(年度 + 1, 3, 31), "yyyy/m/d") & ",""y"")" ' 値貼り付けで数式を切る 年齢データ範囲.Value = 年齢データ範囲.Value End Sub
シート関数DATEDIFをEvaluateメソッドから使う
Dim ws処理シート As Worksheet Set ws処理シート = Worksheets("○○") Dim 最終行 As Long 最終行 = ws処理シート.Cells(ws処理シート.Rows.Count, "A").End(xlUp).Row Dim 年度 As Long 年度 = 2025 Dim R As Long Dim 年齢 As Long For R = 4 To ws処理シート.Cells(ws処理シート.Rows.Count, 1).End(xlUp).Row 年齢 = Evaluate("DATEDIF(""" _ & Format(ws処理シート.Cells(R, 1), "yyyy/m/d") & """,""" _ & Format(DateSerial(年度 + 1, 3, 31), "yyyy/m/d") & """,""y"")") Next
自作の年齢取得関数を作成して使う
' 年齢の取得 Function Get年齢(ByVal 生年月日 As Date, ByVal 基準日 As Date) As Long Dim mmdd生年月日 As Long: mmdd生年月日 = Month(生年月日) * 100 + Day(生年月日) Dim mmdd基準日 As Long: mmdd基準日 = Month(基準日) * 100 + Day(基準日) If mmdd基準日 >= mmdd生年月日 Then Get年齢 = Year(基準日) - Year(生年月日) Else Get年齢 = Year(基準日) - Year(生年月日) - 1 End If End Function Function Get年度年齢(ByVal 生年月日 As Date, ByVal 年度 As Long) As Long Get年度年齢 = Get年齢(生年月日, DateSerial(年度 + 1, 3, 31)) End Function Function Get学年年齢(ByVal 生年月日 As Date, ByVal 年度 As Long) As Long Get学年年齢 = Get年齢(生年月日, DateSerial(年度 + 1, 4, 1)) End Function
' 使用例 Dim ws処理シート As Worksheet Set ws処理シート = Worksheets("○○") Dim 最終行 As Long 最終行 = ws処理シート.Cells(ws処理シート.Rows.Count, "A").End(xlUp).Row Dim R As Long Dim 年齢 As Long For R = 4 To ws処理シート.Cells(ws処理シート.Rows.Count, 1).End(xlUp).Row 年齢 = Get年度年齢(ws処理シート.Cells(R, 1), 2025) Next
結果をシート上に出力する場合は、
Formulaをつかってシートで計算もしてしまうのが楽でおすすめです。
ループ文を書く必要すらありませんからね。
内部計算でも使用する場合や、この処理をよく行う方は、
汎用関数にして持っておくのをおすすめします。
上記の関数で本ページの「年度年齢」以外にも、
当日年齢、年末年齢、学年年齢すべてに対応することができます。
契約によって年齢起算が変わる業務に携わっている方は、
ぜひとも上記関数をご活用ください。
年度の取得も関数化する
上記3つの方法は「2026」という数値を用いましたが、
例えば「本日の年度」を用いようとすると、こちらも分岐が必要になります。
本日が1~3月だった場合は「年度 = Year(本日) - 1」としなければなりません。
せっかく関数を用意するのであれば、
この「日付から年度を求める計算」も関数にしておくのをおすすめします。
' 年度の取得 Function Year年度(ByVal 日付 As Date) As Long If Month(日付) >= 4 Then Year年度 = Year(日付) Else Year年度 = Year(日付) - 1 End If End Function ' 実行例 MsgBox Year年度("2020/01/01") ' ← 2019が表示されます。
こちらの関数も年齢を求める関数とセットで持っておきましょう。