学年齢を計算するプログラムを作ってみました。
学年齢とは1月1日~4月1日生まれの人を早生まれとし1年齢加算する仕組みのことです。
作成するにあたり既存のモノがあればそれを流用してみたかったのですが、
検索してもよいのが見つからず、ネット情報でヒントになるものを参考にしながら作りました。
判定日を基準に学年齢と経過月を計算する仕組みになっています。
https://github.com/ManabuAomori/calcurate_on_school_age
以下、EXCEL VBAです。
‘######
Public Function Gakunerei(birthDay As Date, orderDay As Date) As Variant
Dim tempDay1, tempMonth, r_value As Variant
If IsDate(birthDay) Then
If (Format(birthDay, “yyyy/mm/dd”) >= Format(Year(birthDay) & “/01/01”, “yyyy/mm/dd”) And Format(birthDay, “yyyy/mm/dd”) <= Format(Year(birthDay) & “/04/01”, “yyyy/mm/dd”)) And (Format(orderDay, “yyyy/mm/dd”) >= Format(Year(orderDay) & “/01/01”, “yyyy/mm/dd”) And Format(orderDay, “yyyy/mm/dd”) <= Format(Year(orderDay) & “/04/01”, “yyyy/mm/dd”)) Then
tempMonth = DateDiff(“m”, birthDay, orderDay)
ElseIf Format(birthDay, “yyyy/mm/dd”) >= Format(Year(birthDay) & “/01/01”, “yyyy/mm/dd”) And Format(birthDay, “yyyy/mm/dd”) <= Format(Year(birthDay) & “/04/01”, “yyyy/mm/dd”) Then
tempDay1 = DateAdd(“yyyy”, -1, birthDay)
tempMonth = DateDiff(“m”, tempDay1, orderDay)
ElseIf Year(birthDay) < Year(orderDay) And (Format(Month(birthDay) & “/” & Day(birthDay), “mm/dd”) > Format(Month(orderDay) & “/” & Day(orderDay), “mm/dd”) And Not (Format(orderDay, “yyyy/mm/dd”) >= Format(Year(orderDay) & “/01/01”, “yyyy/mm/dd”) And Format(orderDay, “yyyy/mm/dd”) <= Format(Year(orderDay) & “/04/01”, “yyyy/mm/dd”))) Then
tempDay1 = DateAdd(“yyyy”, -1, birthDay)
tempMonth = DateDiff(“m”, tempDay1, orderDay)
Else
tempMonth = DateDiff(“m”, birthDay, orderDay)
End If
Else
Exit Function
End If
r_value = ((Int(tempMonth / 12) * 100) + (tempMonth Mod 12)) / 100
If Not r_value = “” Then
Gakunerei = r_value
Else
Gakunerei = -1
End If
End Function