Excel VBA 生年月日から現在の年齢を取得する

スポンサーリンク

生年月日から現在の年齢を取得する方法

「Excel」ではDATEDIF【デイトディファレンス】関数で簡単に満年齢がもとめられますが、VBA関数には、DATEDIF【デイトディファレンス】関数と同じ働きをする関数はありません。

ワークシート上で入力されている生年月日から満年齢をもとめる場合は、VBAを使う必要はないとおもいますが、例えば、ユーザーにInputBox【インプットボックス】に生年月日を入力してもらい、年齢をMsgbox【メッセージボックス】で返すケースやユーザーフォームで生年月日をテキストボックスに入力したら自動的に年齢が表示されるようなことは、VBAでなければ実現できません。

InputBox【インプットボックス】にユーザーが入力した生年月日からMsgbox【メッセージボックス】に現在の年齢を表示するコードとユーザーフォームのTextBox1【テキストボックスワン】にユーザーが生年月日を入力したらTextBox2【テキストボックスツゥ】に年齢を表示するコードをご紹介します。

InputBoxに入力された生年月日からMsgBoxに年齢を表示するコードと解説

Sub 年齢計算()
Dim 生年月日 As Variant
Dim 年齢 As Variant
戻る:
生年月日 = InputBox("生年月日を入力してください。yyyy/mm/dd形式")
If IsDate(生年月日) Then
年齢 = DateDiff("yyyy", 生年月日, Date) + (Format(生年月日, "mmdd") > Format(Date, "mmdd"))
MsgBox 年齢 & "歳です。"
Else
MsgBox "入力形式がちがいます。"
GoTo 戻る
End If
End Sub
2行目【 Dim 生年月日 As Variant 】
Inputbox【インプットボックス】関数を使用しでユーザーから受け取る「生年月日」を表す文字列を格納する変数「生年月日」をバリアント型(Variant)で宣言します。


3行目【 Dim 年齢 As Variant 】
DateDiff【デイトディファレンス】関数とFormat【フォーマット】関数を使用して計算した年齢を格納する変数「年齢」をバリアント型(Variant)で宣言します。


4行目【 戻る: 】
6行目の条件分岐でIsDate【イズデイト】関数の条件が一致しなかった場合。すなわち、Inputbox【インプットボックス】関数に入力された値が日付に変換できない場合に、11行目のGoTo【ゴットゥ】ステートメントでこの位置まで処理が戻ります。


5行目
【 生年月日 = InputBox(“生年月日を入力してください。yyyy/mm/dd形式”) 】

InputBox【インプットボックス】関数を使用してユーザーに生年月日を入力してもらい、変数「生年月日」に代入します。


6行目【 If IsDate(生年月日) Then 】
If【イフ】ステートメント文を使用して条件式にIsDate【イズデイト】関数の引数を変数「生年月日」を指定して、変数「生年月日」が日付データであるときを定義します。


7行目【 年齢 = DateDiff(“yyyy”, 生年月日, Date) + (Format(生年月日, “mmdd”) > Format(Date, “mmdd”)) 】
6行目の条件分岐で条件が成立した場合(Trueの場合)に処理が行われます。DateDiff【デイトディフ】関数を使用して現在日(Date)から変数「生年月日」の年(“yyyy”)の差を計算します。DateDiff【デイトディフ】関数では月日が考慮されていないので、Format【フォーマット】関数で、変数「生年月日」とDate【デイト】関数(本日の日付)から 月日を取り出して比較演算子で比較をします。比較演算子の条件が成立した場合つまり、変数「生年月日」に格納されている誕生日の月日が現在の月日を超えている場合(本年の誕生日を迎えていない場合)はTrue(-1) が返り、条件が成立しない場合つまり、変数「生年月日」に格納されている誕生日の月日が現在の月日を超えていない場合(本年の誕生日が過ぎた場合)はFalse(0)が返るので、これを利用してDateDiff【デイトディフ】関数で求めた年数に本年の誕生日が過ぎたら(0)誕生日がきていなかったら(-1)を加算することで満年齢を求めて、変数「年齢」に代入します。


8行目【 MsgBox 年齢 & “歳です。”  】
MsgBox【メッセージボックス】関数を使用して変数「年齢」に格納されている年齢をを表示します。


10行目【 MsgBox “入力形式がちがいます。” 】
6行目の条件分岐で条件が不成立だったときすなわち、変数「生年月日」が日付データに変換できないときMsgBox【メッセージボックス】関数でメッセージをだします。


11行目【 GoTo 戻る 】
6行目の条件分岐で条件が不成立だったときすなわち、変数「生年月日」が日付データに変換できないとき、GoTo【ゴウトゥ】ステートメントを使用して4行目の【戻る:】まで処理を戻します。

実行結果


ユーザーフォームのTextBox1に入力された生年月日から
TextBox2に年齢を表示するコードと解説

Private Sub TextBox1_AfterUpdate()
Dim 生年月日 As Variant
Dim 年齢 As Variant
 生年月日 = TextBox1.Value
 If IsDate(生年月日) Then
年齢 = DateDiff("yyyy", 生年月日, Date) + (Format(生年月日, "mmdd") > Format(Date, "mmdd"))
 TextBox2.Value = 年齢
Else
 MsgBox "入力形式がちがいます。"
 TextBox1 = ""
End If
End Sub
TextBox1のテキストボックスに入力されたデータが更新された直後に発生するAfterUpdateイベントプロシージャ内にコードを記述します。詳しくは、「テキストボックスのイベント」をご覧ください。ユーザーフォームに関しては、 「ユーザーフォームを操作する」をご覧ください。内容的には、上記のInputBox【インプットボックス】関数を使用したコードを同じです。

実行結果


以上で、生年月日から現在の年齢を取得する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告