人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

●質問者: nyankochan
●カテゴリ:コンピュータ
✍キーワード:Excel VBA コマンド データ フォーマット
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●20ポイント

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

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


3 ● mj99
●20ポイント

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


4 ● りくっち
●20ポイント

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

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

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


5 ● graygreen127
●20ポイント

もし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の文字数が増える・・・)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ