以下の内容はhttps://www.limecode.jp/entry/utility/get-fiscal-year-ageより取得しました。


年度年齢(年度末時点での年齢)を取得する

年度年齢(年度末時点での年齢)を取得するには、
その年度の最終日、つまり3/31時点の年齢を計算します。

年齢の計算を行う方法としては、

  • シート関数DATEDIFをFormulaプロパティから使う
  • シート関数DATEDIFをEvaluateメソッドから使う
  • 自作の年齢取得関数を作成して使う

この三つの方法があります。

※ VBAのDateDiff関数では年齢を求めることはできません。


3つのコードを記載しておきますので、
詳しい解説はこちらの記事をご覧ください。

www.limecode.jp

シート関数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が表示されます。

こちらの関数も年齢を求める関数とセットで持っておきましょう。




以上の内容はhttps://www.limecode.jp/entry/utility/get-fiscal-year-ageより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14