
お知恵をお貸し下さい。
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
-----------------------------------------------------------------
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
Wendy02さん! こんにちは。
久しぶりにここに質問を書いたのですが
やはりWendy02さんにお会いすることができ、本当にうれしく思います!
Wendy02さんのお名前を拝見し、涙が出る思いです(大げさではありませんヨ!)
いつものことながら、素早く的確なご回答本当にありがとうございます。
私のあの質問内容で、知りたいことも理解して頂き
ありがとうございます!
早速、利用させて頂きます。 ありがとうございました!
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
laputartさん! 大作をありがとうございました。
少しの時間違いで、No.2さんが私の求めていた通りの回答を下さいましたので
それを利用させて頂こうかと思っていたところに
laputartさんのお答えを拝見しました。
まだ目を通させてもらっていないのですが
わざわざ、色々と書いて下さいましたので、ゆっくり拝見させて頂き
今後の私の糧とさせて頂きます。
本当にありがとうございました。
No.1
- 回答日時:
Data = Format(Year(Date),"0000") & "/" & TextBox16.Text
で強制的に今の年を設定するとかすればいいのでは?
それとも年を入れる場合もあるのですか?
この回答への補足
mshr1962さん!
先程「他にも方法があれば」などど、調子のいいことを書きましたが
No.2さんが、良い方法を教えて下さいましたので
それを利用させて頂くことにしました。
ありがとうございました。
早速ご回答ありがとうございます!
なるほど、教えて頂いた通りにすれば
10月35日だとエラーがかかりますよねー。
でも、そうなんです・・・
ほとんどは本年の日付なのですが、来年等の日付を入力する場合もあるんです・・・。
せっかく教えて頂いたのに、すみませんでした。
もしも(もしも!)、他にありましたらよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) VBAで “:” を含むセルの特定 2 2023/05/11 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
差し込み印刷に当日の日付が入...
-
「24日の0時」って・・・
-
日付の大小の表現
-
回覧板の日付について質問です...
-
マクロボタンを押すと、ファイ...
-
「時間」、「期日」、「日付」...
-
エクセルで日付別にシートを分...
-
エクセル マクロ 名前を付けて...
-
履歴書の日付間違いで落ちますか。
-
会社や役所などに提出する書類...
-
日付以外のデータを抽出したい...
-
EXCELで日付を****年上期、****...
-
フォームの値をクエリーに反映...
-
Access 2013 テキストボックス...
-
Excelについて
-
エクセルで日付け表示で、明治...
-
2つの日付の中間の日付 エク...
-
エクセルで6ヵ月後を自動入力で...
-
AccessのDMax関数の複数条件式...
-
ACCESSで1月1日~12月31日まで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「24日の0時」って・・・
-
マクロボタンを押すと、ファイ...
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
「時間」、「期日」、「日付」...
-
回覧板の日付について質問です...
-
エクセル マクロ 名前を付けて...
-
履歴書の日付間違いで落ちますか。
-
エクセルで日付別にシートを分...
-
Excelについて
-
日付以外のデータを抽出したい...
-
差込印刷 縦書きで和暦(漢数...
-
EXCELで日付を****年上期、****...
-
Excelで1週間毎の集計(今週と...
-
エクセルで日付け表示で、明治...
-
Facebookで投稿日時を変更できない
-
フォームの値をクエリーに反映...
-
会社や役所などに提出する書類...
-
エクセルで6ヵ月後を自動入力で...
-
2つの日付の中間の日付 エク...
おすすめ情報