学年を求めるためには、4月1日時点で何歳か?、を算出する必要がごさいます。
例えば、次のようになります。
- 2015/4/1 に 0 歳とカウントされる生まれ: 2014/4/2-
- 2015/4/1 に 1 歳とカウントされる生まれ: 2013/4/2-2014/4/1
- 2015/4/1 に 2 歳とカウントされる生まれ: 2012/4/2-2013/4/1
- 2015/4/1 に 3 歳とカウントされる生まれ: 2011/4/2-2012/4/1
- 2015/4/1 に 4 歳とカウントされる生まれ: 2010/4/2-2011/4/1
- 2015/4/1 に 5 歳とカウントされる生まれ: 2009/4/2-2010/4/1
これを、基準日と誕生日を渡してやれば算出してくれる VBA を書きました♪
VBA コード
- DateDiff 関数の年 (“yyyy”) は、12月31日とその次の年の1月1日の比較結果が 0 ではなく 1 となる。
- 1月1日とその年の1月2日の比較結果は 0 となる。
- したがって、年を越しても誕生日を迎えていない場合は -1 歳の計算を行う。
Option Explict
''' <summary>
''' 満年齢を返却します。
''' 基準年月日と比較して算出します。
''' </summary>
''' <param name="dtmBirthday">生年月日</param>
''' <param name="dtmBaseDay">基準年月日</param>
''' <returns>満年齢の数字</returns>
Private Function CaluculateAge( _
ByVal dtmBirthday As Date, _
ByVal dtmBaseDay As Date) As Long
Dim lngAge As Long: lngAge = DateDiff("yyyy", dtmBirthday, dtmBaseDay)
Dim dtmForCompareMmdd As Date: dtmForCompareMmdd = _
DateSerial(Year(dtmBaseDay), Month(dtmBirthday), Day(dtmBirthday))
' 年を越しても誕生日を迎えていない場合は -1 歳
If dtmBaseDay < dtmForCompareMmdd Then
lngAge = lngAge - 1
End If
CaluculateAge = lngAge
End Function
Sub Test()
' 12 月 31 日と翌年の 1 月 1 日を比較すると、DateDiff は DateInterval.Year、DateInterval.Quarter、DateInterval.Month に対して 1 を返します。
Debug.Print "2014/12/31 と 2015/1/1 の DateDiff 関数の年 ("yyyy") は、1 であることを確認: " & DateDiff("yyyy", #12/31/2014#, #1/1/2015#)
Debug.Print
Debug.Print "2015/4/1 を基準日とする。"
Debug.Print "2015/4/1 生まれの満年齢: " CaluculateAge(#4/1/2015#, #4/1/2015#]
Debug.Print "2014/4/2 生まれの満年齢: " CaluculateAge(#4/2/2014#, #4/1/2015#]
Debug.Print "2014/4/1 生まれの満年齢: " CaluculateAge(#4/1/2014#, #4/1/2015#]
Debug.Print "2013/4/2 生まれの満年齢: " CaluculateAge(#4/2/2013#, #4/1/2015#]
Debug.Print "2013/4/1 生まれの満年齢: " CaluculateAge(#4/1/2013#, #4/1/2015#]
Debug.Print "2012/4/2 生まれの満年齢: " CaluculateAge(#4/2/2012#, #4/1/2015#]
End Sub
これだとダメでした><
- 生年月日から年齢を計算する:Excel 一般|即効テクニック|Excel VBAを学ぶならmoug
- ワークシート関数をVBAで使用する(WorksheetFunctionプロパティ):Excel VBA|即効テクニック|Excel VBAを学ぶならmoug
上記 2 つを組み合わせてみましたけれども、エラーとなって使えませんでした><。
おわりに
参考ページです。Access の VBA のページを主に参考にいたしましたけれども、問題なく動きました♪
以上です。
