学年を求めるためには、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 のページを主に参考にいたしましたけれども、問題なく動きました♪
以上です。