• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA、年齢計算について質問です)

エクセルVBAによる年齢計算の質問

このQ&Aのポイント
  • エクセルVBAを使用して、生年月日と基準日を入力し、年齢を算出するマクロを組んでいます。
  • ただし、日付として成立しない値が入力されるとエラーが発生します。
  • エラーが発生した場合にエラー処理を行いたいのですが、どのようなコードを記入すればいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

IsDate関数にて、変数が日付になってるかどうか 確認してみてはどうでしょう。 If IsDate(生年月日) = False Then ~~~

kulokunier
質問者

お礼

=galse という書き方があるのですね、知りませんでした ありがとうございます。 解決しそうです。

その他の回答 (3)

回答No.4

シートにコマンドボタンなので、元のプログラムと少し違いますが、こんな感じ。 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つ。

回答No.3

シートにコマンドボタンなので、元のプログラムと少し違いますが、こんな感じ。 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つ。

kulokunier
質問者

お礼

エラーすべてをGOTO文で飛ばしてしまう回答者様の方法ですと、すべてのエラーが飛んでしまうのでメッセージが機能しないような気がします。 たとえば「生年月日を正しく入力してください」等のメッセージを表示させるのは難しいかもしれません。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

#1さんの回答のようにIsdateで妥当な日付がどうかのチェックをする。 気になったのは Application.Evaluate("=datedif(""" & ~~ VBAでもDateDiffという関数があるのでこれを遣ったほうがいいのでは (昭和生まれも仲間に入れてくれ!)

kulokunier
質問者

お礼

VBAのdatediffは数え年扱いなのでうまく機能しないようです。 スミマセン、昭和がありえない前提だったのでこのような形に・・

関連するQ&A

専門家に質問してみよう