- ベストアンサー
ユーザーフォームから入力された値が時刻の表示形式かをチェックするには?
VBAで、ユーザーフォームから時刻を入力するときに、 入力された値が、時刻の表示形式(h:mm)かどうかをチェックする にはどうしたら良いですか? IsnumberやIsnumericの時刻版みたいな関数はないんでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Public Function IsTime(ByVal IData As String, Optional F As String = "h:mm") As Boolean On Error Resume Next If IsDate(IData) Then IsTime = CBool(Format(IData, F) = IData) End If End Function Public Function IsTime(ByVal IData As String, Optional F As String = "h:mm") As Boolean IsTime = (Format(IData, F) = IData) * IsDate(IData) End Function この2つの書き方は同じ処理を意味しています。 IsDate(IData)・・・真であること。 IsTime = CBool(Format(IData, "h:mm") = IData)・・・真であること。 と2つのテストに合格しなきゃダメです。 ? CBool(True*False) False ? CBool(True*True) True と、論理演算の特質を利用してIF Then 文を論理演算で代用しているだけです。 なお、関数中に"h:mm"を埋め込むのは、これはやってはならない禁則事項。 で、少し、IsTime関数を汎用的に修正しています。 [イミディエイト] ? ISTime("2:20") True ? ISTime("2:20", "h:mm:ss") False ? ISTime("2:20:00", "h:mm:ss") True
その他の回答 (4)
Public Function IsTime(ByVal IData As String) As Boolean IsTime = (Format(IData, "h:mm") = IData) * IsDate(IData) End Function 1行でも書けないことはないです。
お礼
ありがとうございます。上手くいきました! 色々試してみましたが、ちゃんとチェックされています。 h:mm形式に変換されたIDataと IsDate関数の結果を 掛け合わせている所が(AND?)、よく理解できないのですが、 宜しければ簡単にご説明していただけませんか?
- kigoshi
- ベストアンサー率46% (120/260)
ベタな方法です。 Private Sub CommandButton1_Click() If checkTimeFormat(TextBox1.Text) Then MsgBox "時刻形式です" Else MsgBox "時刻の形式ではありません" End If End Sub Function checkTimeFormat(tStr As String) As Boolean Dim prtT As Variant tStr = StrConv(tStr, vbNarrow) tStr = Trim(tStr) prtT = Split(tStr, ":") checkTimeFormat = True If UBound(prtT) < 1 Then checkTimeFormat = False Exit Function End If If Val(prtT(0)) > 24 Then checkTimeFormat = False Exit Function End If If (Val(prtT(1)) > 60) Or (Len(prtT(1)) <> 2) Then checkTimeFormat = False Exit Function End If End Function 自分でもスマートなコードとは思ってません。
[イミディエイト] ? IsDate("23:00:00") True ? IsTime("23:00:00") False ? IsTime("2:12") True Public Function IsTime(ByVal IData As String) As Boolean On Error Resume Next If IsDate(IData) Then IsTime = CBool(Format(IData, "h:mm") = IData) End If End Function まあ、自作するしかないかもです。
- imogasi
- ベストアンサー率27% (4737/17069)
IsDate関数があります。 >時刻の表示形式(h:mm)かどうかをチェックする これは通常的外れ。入力者には通常、表示形式まで設定させないのでは?
お礼
お礼が遅くなり、すみません。 とても丁寧なご説明ありがとうございました。 お陰で良く理解できました! ANDでふたつとも真であることを確かめているんですね。 良回答にさせていただきます。 有難うございました。