プロが教える店舗&オフィスのセキュリティ対策術

お知恵をお貸し下さい。

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

-----------------------------------------------------------------

A 回答 (3件)

Data = Format(Year(Date),"0000") & "/" & TextBox16.Text


で強制的に今の年を設定するとかすればいいのでは?
それとも年を入れる場合もあるのですか?

この回答への補足

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

ありがとうございました。

補足日時:2005/10/07 15:55
    • good
    • 0
この回答へのお礼

早速ご回答ありがとうございます!

なるほど、教えて頂いた通りにすれば
10月35日だとエラーがかかりますよねー。

でも、そうなんです・・・
ほとんどは本年の日付なのですが、来年等の日付を入力する場合もあるんです・・・。

せっかく教えて頂いたのに、すみませんでした。

もしも(もしも!)、他にありましたらよろしくお願いします。

お礼日時:2005/10/07 15:38

こんにちは。



私の場合、このようなやり方でやっています。ここでは、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
    • good
    • 0
この回答へのお礼

Wendy02さん! こんにちは。

久しぶりにここに質問を書いたのですが
やはりWendy02さんにお会いすることができ、本当にうれしく思います!
Wendy02さんのお名前を拝見し、涙が出る思いです(大げさではありませんヨ!)

いつものことながら、素早く的確なご回答本当にありがとうございます。

私のあの質問内容で、知りたいことも理解して頂き
ありがとうございます!

早速、利用させて頂きます。 ありがとうございました!

お礼日時:2005/10/07 15:54

下の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
    • good
    • 0
この回答へのお礼

laputartさん! 大作をありがとうございました。

少しの時間違いで、No.2さんが私の求めていた通りの回答を下さいましたので
それを利用させて頂こうかと思っていたところに
laputartさんのお答えを拝見しました。

まだ目を通させてもらっていないのですが
わざわざ、色々と書いて下さいましたので、ゆっくり拝見させて頂き
今後の私の糧とさせて頂きます。

本当にありがとうございました。

お礼日時:2005/10/07 16:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!