Excel VBAについての質問です。


ユーザーフォーム内のTextBox1に入力された文字列が
日付フォーマットであるかチェックする方法はありませんか?

コマンドボタンが押された時にチェック文が実行される
ようなもので構いません。

あちこちのページを見て試したのですが上手くいきませんでした。
できれば、そのまま実装できるような形の物をお願いします。
(チェック部分だけです、どっかにデータを貼り付ける必要はありません)

回答の条件
  • 1人2回まで
  • 登録:2006/09/19 15:57:55
  • 終了:2006/09/21 11:15:56

ベストアンサー

id:threecloudjp No.2

threecloudjp回答回数139ベストアンサー獲得回数62006/09/19 16:38:27

ポイント20pt

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

その他の回答(4件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982006/09/19 16:36:31

ポイント20pt

コマンドボタン押下時でチェックします。

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です。

これで ダメなパターンがありましたら教えてください。

id:threecloudjp No.2

threecloudjp回答回数139ベストアンサー獲得回数62006/09/19 16:38:27ここでベストアンサー

ポイント20pt

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

id:mj99 No.3

mj99回答回数138ベストアンサー獲得回数382006/09/19 16:38:30

ポイント20pt

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

id:rikuzai No.4

りくっち回答回数1366ベストアンサー獲得回数1412006/09/19 17:01:24

ポイント20pt

もう解決済かもしれませんが、

できるだけ簡素にしてみました。

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

id:graygreen127 No.5

graygreen127回答回数73ベストアンサー獲得回数62006/09/20 17:03:57

ポイント20pt

もし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

id:nyankochan

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

参考にさせていただいた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の文字数が増える・・・)

2006/09/21 11:11:20
  • id:nyankochan
    ごめんなさい一部間違ってました
    日付 = Format(TextBox10.Text, "yyyy/mm/dd")
              ↓
    日付 = Format(TextBox1.Text, "yyyy/mm/dd")

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません