コマンドボタン押下時でチェックします。
Private Sub CommandButton1_Click()
Dim b As Date
On Error GoTo NGTRS
a = TextBox1.Text
e = 0
If InStr(a, "/") = 5 Then e = 1
If Not IsNumeric(Left(a, 4)) Then e = 0
f = InStr(6, a, "/")
If Not IsNumeric(Mid(a, 6, f - 6)) Then e = 0
If Not IsNumeric(Right(a, Len(a) - f)) Then e = 0
b = a
c = Format(a, "yyyy/mm/dd")
If CStr(b) = c And e = 1 Then
MsgBox ("日付型 " & c)
Exit Sub
End If
NGTRS:
MsgBox ("違うよ")
End Sub
一応、日付型とは
年/月/日 のデータとしています。
年は 4桁固定で、不足した多かったりすると エラーです。
月と日は、一桁でも 2桁でもOKです。
これで ダメなパターンがありましたら教えてください。
▽2
●
threecloudjp ●20ポイント ![]() |
IsDate関数ではダメですか?
日付型かどうかを調べる関数ではなく、日付型に変換可能かどうかを調べてTRUEかFALSEを返す関数ですが…。
よかったら試してみてください。
Private Sub CommandButton1_Click()
If IsDate(TextBox1) = True Then
MsgBox "日付型に変換できます。"
End If
If IsDate(TextBox1) = False Then
MsgBox "日付型に変換できません。"
End If
End Sub
If TextBox1.Text Like "*/*/*" And IsDate(TextBox1.Text) Then
MsgBox "OK"
Else
MsgBox "NG"
End If
----
書式はY/M/Dを想定しました。
日付数字の桁数を強制したい場合は、
"*/*/*"
を
"####/##/##"
に変えてください。
URLはダミーでhttp://q.hatena.ne.jp/1158649073
もう解決済かもしれませんが、
できるだけ簡素にしてみました。
threecloudjpさんと同じでIsDateで判定させます。
ifでなくCaseを使っただけです(*^_^*)
空白時は「入力値は日付データではありません」が表示されます。
Private Sub CommandButton1_Click()
Dim msg As String
Select Case IsDate(TextBox1.Value)
Case Is = True
MsgBox "入力値は日付データです"
Case Is = False
MsgBox "入力値は日付データではありません"
End Select
End Sub
もしTextBoxの中の文字列がうまく取り出せないようならば指定を変えてみては。判定自体は2番の方のIsDate関数使用と同じです。
Sub ボタン1_Click()
Dim T As String
Dim MsgString As String
Dim WS As Object
Set WS = ActiveWorkbook.ActiveSheet.Shapes
T = WS.Item("Text Box 1").TextFrame.Characters.Text
MsgString = "日付型に変換できません。"
If IsDate(T) = True Then
MsgString = "日付型に変換できます。"
End If
MsgBox MsgString
End Sub
皆さんありがとうございました。
参考にさせていただいた2通りの判別方法を融合させて以下のようなシンプルな物が作れました。
Dim 日付 As Date
If IsDate(TextBox1.Text) = True Then
日付 = Format(TextBox10.Text, "yyyy/mm/dd")
TextBox1.Text = 日付
Else
MsgBox "無効な文字列または日付です", vbInformation
Exit Sub
End If
入力された文字列を日付に変換可能か判別し、フォーマットをyyyy/mm/dd形式に書き換えます。
ただ、元々yyyy/mm/dd形式だった場合にこの作業をスルーさせるべきか、これくらいは負担にならないのか悩みます・・・・
(スルーさせるとVBAの文字数が増える・・・)