- ベストアンサー
入力形式を限定する
VBAを学び始めたばかりなので、詳しく教えていただきたいです。 VBAのプログラミングで、 「12行目と13行目の値に**:**(時刻)の形式以外の値が入った場合、 エラーメッセージを表示する」というプログラミングをしたいと 思っています。 この**:**の形式に限定する、という文がわかりません。 ちなみに時刻なので/=DATEを使ってみましたが、 21:100などの値が入ってもエラーがでませんでした。 なので形式を**:**に限定したいと思っています。 わかる方いらっしゃいましたら、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>「**:**」の形式以外はメッセージを返す いちおう形式をチェックするようにしました。 Sub test() Dim tm tm = InputBox("時刻を入れてください。", "時刻入力") If InStr(tm, ":") = 3 And Len(tm) = 5 Then If Not IsDate(tm) Then MsgBox "時刻を入れてください" ElseIf DateValue(tm) < 1 Then MsgBox "時刻です" Else MsgBox "日付です" End If Else MsgBox "時刻(mm:dd)を入れてください" End If End Sub
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
IsDateだけの判定では日付もOKになってしまうので、日付を除外してみました。シリアル値の絶対値が1未満の条件をつけて日付を排除しています。 Sub TEST() Dim tm 'tm = "2008/1/1" tm = "12:12" If IsDate(tm) Then If Abs(DateValue(tm) * 1) < 1 Then MsgBox "時刻表示です。" Else MsgBox "日付になってます。" End If Else MsgBox "時刻表示じゃないです。" End If End Sub
補足
ご回答ありがとうございます。 試してみましたが、なりませんでした。。。 また、21:100などだけではなく、 「22222222222」など、「**:**」の形式以外は すべてメッセージで「時刻を正しく入力してください」と 返したいと考えています。 このような形式限定はできないでしょうか? すみません、よろしくお願いします。
- hana-hana3
- ベストアンサー率31% (4940/15541)
IsDate() で判定出来ます。 Dim tm tm = "12:100" MsgBox IsDate(tm) tm = "12:10" MsgBox IsDate(tm)
補足
ご回答ありがとうございます。 今回は「21:100」を例にあげましたが、 それだけではなく 「2222222222222」などの形式もメッセージで 「時刻を入力してください」と返したいと思っています。 「**:**」の形式以外はメッセージを返す、 というふうにできないでしょうか? すみませんが、よろしくお願いします。
補足
詳しいご回答ありがとうございます。 この式を使っていろいろ試してみましたが、 なかなかうまくいきませんでした。。。 今回InputBoxを使っていますが、 これを[12行目と13行目に値を入れたとき]に適用させることは 可能でしょうか? 何度も聞いて申し訳ありません。 よろしくお願いします。