- ベストアンサー
エクセルVBAによる年齢計算の質問
- エクセルVBAを使用して、生年月日と基準日を入力し、年齢を算出するマクロを組んでいます。
- ただし、日付として成立しない値が入力されるとエラーが発生します。
- エラーが発生した場合にエラー処理を行いたいのですが、どのようなコードを記入すればいいでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
IsDate関数にて、変数が日付になってるかどうか 確認してみてはどうでしょう。 If IsDate(生年月日) = False Then ~~~
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8752/19860)
シートにコマンドボタンなので、元のプログラムと少し違いますが、こんな感じ。 Private Sub CommandButton1_Click() Dim 生年月日 As String Dim 開始日付 As String Dim 年齢 As String On Error GoTo error_exit 生年月日 = "H" + Range("A1").Text + "/" + Range("B1").Text + "/" + Range("C1").Text 年齢基準日 = "H" + Range("A2").Text + "/" + Range("B2").Text + "/" + Range("C2").Text 年齢 = Application.Evaluate("=datedif(""" & Format(生年月日, "yyyy/mm/dd") _ & """,""" & Format(年齢基準日, "yyyy/mm/dd") & """,""y"")") Range("A3").Select Selection.Value = 年齢 nomal_exit: Exit Sub error_exit: Range("A3").Select Selection.Value = "#error" Resume nomal_exit End Sub 肝心なのは「エラーをon error goto文で拾って、別の所に飛ばす」「エラーで飛んできたら何か特殊処理してからresume文でどこかに戻る」の2つ。
- chie65536(@chie65535)
- ベストアンサー率44% (8752/19860)
シートにコマンドボタンなので、元のプログラムと少し違いますが、こんな感じ。 Private Sub CommandButton1_Click() Dim 生年月日 As String Dim 開始日付 As String Dim 年齢 As String On Error GoTo error_exit 生年月日 = "H" + Range("A1").Text + "/" + Range("B1").Text + "/" + Range("C1").Text 年齢基準日 = "H" + Range("A2").Text + "/" + Range("B2").Text + "/" + Range("C2").Text 年齢 = Application.Evaluate("=datedif(""" & Format(生年月日, "yyyy/mm/dd") _ & """,""" & Format(年齢基準日, "yyyy/mm/dd") & """,""y"")") Range("A3").Select Selection.Value = 年齢 nomal_exit: Exit Sub error_exit: Range("A3").Select Selection.Value = "#error" Resume nomal_exit End Sub 肝心なのは「エラーをon error goto文で拾って、別の所に飛ばす」「エラーで飛んできたら何か特殊処理してからresume文でどこかに戻る」の2つ。
お礼
エラーすべてをGOTO文で飛ばしてしまう回答者様の方法ですと、すべてのエラーが飛んでしまうのでメッセージが機能しないような気がします。 たとえば「生年月日を正しく入力してください」等のメッセージを表示させるのは難しいかもしれません。
- rivoisu
- ベストアンサー率36% (97/264)
#1さんの回答のようにIsdateで妥当な日付がどうかのチェックをする。 気になったのは Application.Evaluate("=datedif(""" & ~~ VBAでもDateDiffという関数があるのでこれを遣ったほうがいいのでは (昭和生まれも仲間に入れてくれ!)
お礼
VBAのdatediffは数え年扱いなのでうまく機能しないようです。 スミマセン、昭和がありえない前提だったのでこのような形に・・
お礼
=galse という書き方があるのですね、知りませんでした ありがとうございます。 解決しそうです。