• ベストアンサー

EXCEL VBA---IsDate

お知恵をお貸し下さい。 VBAでフォームを作成し、テキストボックスに数字(日付)を入力 (入力→10/7, 表示→2005/10/07) それを、IsDateで日付かどうかチェックさせたいのですが 下記のコードでは、例えば10月35日と入力してもエラーになりません。 (入力→10/35, 表示→1935/10/01) 2005/10/35と入力すればエラーになってくれるのですが やはりこの方法しかないのでしょうか? もし、良い方法がありましたらお教え下さい。 よろしくお願いします。 ----------------------------------------------------------------- Sub Test() Dim Data As Variant Data = TextBox16.Text If IsDate(Data) Then TextBox16.Value = CDate(Data) Else MsgBox ("正しい日付を入力してください。") End if End sub -----------------------------------------------------------------

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 私の場合、このようなやり方でやっています。ここでは、1945 年にしてみました。 ただ、IsDate と CDate とを、And 条件で行ったりすると、CDate 側で、実行時エラーになります。 If IsDate(Data) Then  If Year(CDate(Data)) > 1945 Then   TextBox16.Value = CDate(Data)  Else   MsgBox "正しく日付を入れなおしてください。"  End If Else  MsgBox "正しい日付を入力してください。" End If

fk_sap
質問者

お礼

Wendy02さん! こんにちは。 久しぶりにここに質問を書いたのですが やはりWendy02さんにお会いすることができ、本当にうれしく思います! Wendy02さんのお名前を拝見し、涙が出る思いです(大げさではありませんヨ!) いつものことながら、素早く的確なご回答本当にありがとうございます。 私のあの質問内容で、知りたいことも理解して頂き ありがとうございます! 早速、利用させて頂きます。 ありがとうございました!

その他の回答 (2)

  • laputart
  • ベストアンサー率34% (288/843)
回答No.3

下のVBA(2)を作成したのですが、その前にfk_sapさんの作成された モジュールをそのまま動かしてみましたが、期待通りエラーに なりました。よってIsDateは正しく機能していると思います。 失礼ですが、このモジュールを TextBox16_LostFocus()に組入れて テストをすると動作しましたが、別にマクロとして動かすと 1935/10/01などになります。どこが違うのか分りませんがTEXTボックスの PrivateSubとしてテストお願いします。 (1)正しく動きます。 Private Sub TextBox16_LostFocus() Dim Data As Variant Data = TextBox16.Text If IsDate(Data) Then TextBox1.Value = CDate(Data) Else MsgBox ("正しい日付を入力してください。") End If End Sub ----------------- (2)以下は別の検査方法 例えば次のようにして、YYY=年 MMM=月 DDD=日付を求めて 検証します。 Sub Test() Dim Data As Variant Dim DDD,MMM,YYY,OK as Integer Data = TextBox16.Text OK=0 If IsDate(Data) Then '日付のチェック YYY=Year(Data) MMM=Month(Data) DDD=Day(Data) If MMM>12 then OK=1 If DDD>31 then OK1 IF MMM=2 and DDD>28 then OK=1 IF (MMM=4 or MMM=6 or MMM=9 or MMM=11) and DDD>30 then OK=1 ' (本当はうるう年のチェックが必要なのですが、省略します) Else OK=1 End If If OK=0 then TextBox16.Value = CDate(Data) Else MsgBox ("正しい日付を入力してください。") End if End sub

fk_sap
質問者

お礼

laputartさん! 大作をありがとうございました。 少しの時間違いで、No.2さんが私の求めていた通りの回答を下さいましたので それを利用させて頂こうかと思っていたところに laputartさんのお答えを拝見しました。 まだ目を通させてもらっていないのですが わざわざ、色々と書いて下さいましたので、ゆっくり拝見させて頂き 今後の私の糧とさせて頂きます。 本当にありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

Data = Format(Year(Date),"0000") & "/" & TextBox16.Text で強制的に今の年を設定するとかすればいいのでは? それとも年を入れる場合もあるのですか?

fk_sap
質問者

お礼

早速ご回答ありがとうございます! なるほど、教えて頂いた通りにすれば 10月35日だとエラーがかかりますよねー。 でも、そうなんです・・・ ほとんどは本年の日付なのですが、来年等の日付を入力する場合もあるんです・・・。 せっかく教えて頂いたのに、すみませんでした。 もしも(もしも!)、他にありましたらよろしくお願いします。

fk_sap
質問者

補足

mshr1962さん! 先程「他にも方法があれば」などど、調子のいいことを書きましたが No.2さんが、良い方法を教えて下さいましたので それを利用させて頂くことにしました。 ありがとうございました。

関連するQ&A