VBATips

現年齢を算出する処理をパーツ化する【int関数応用】【ExcelVBA】

現年齢をVBAで算出したい

DateDiff関数を使って年齢を求める事も可能ですが、少し面倒なコードになります。(年度の差を算出する関数)
※365日経ってなくても年が変わったら1年としてカウントする為。

int関数を応用して使えば、現年齢を簡単に算出できます。

現年齢を求めるサンプルコード

'■現年齢を算出するパーツ化したサブプロシージャ
Public Function Call_GetAge(sBirthDay As String) As Long
    Dim age As Long
    
    '■年齢を計算
    age = Int((Format(Date, "yyyymmdd") - Format(sBirthDay, "yyyymmdd")) / 10000)
    
    Call_GetAge = age
End Function

実際の使い方

Public Sub sample()
    Call Call_GetAge("2000/02/26")  '2021/02/27時点では「21」が戻ってくる
    Call Call_GetAge("2000/02/27")  '2021/02/27時点では「21」が戻ってくる
    Call Call_GetAge("2000/02/28")  '2021/02/27時点では「20」が戻ってくる
End Sub

注意点

  • 現在の西暦8桁から誕生日西暦8桁を引いた後10000で割る事で、年齢を小数点有で表示します。
    ※小数点は誕生日からの経過した日時を数値で表している
    例)
    ( 20210227 – 20000226) / 10000 =21.0001
    ( 20210227 – 20000227) / 10000 =21
    ( 20210227 – 20000228) / 10000 =20.9999
  • 上記をint関数で整数化する事で現年齢を返します。
  • 注意点として単純に数値を変換しているだけになる為、2000/99/99といった不正な誕生日を渡すと
    結果も不正になります。事前にisDate関数で日付かどうか判断すべきでしょう。

関連記事

指定した年・月・日をそれぞれ取得する【Year関数/Month関数/Date関数】【ExcelVBA】
時刻データかどうか判断する【IsDate関数応用】【ExcelVBA】
String関数を使用して簡易グラフを作成する【ExcelVBA】

コメント

タイトルとURLをコピーしました