• ベストアンサー

ユーザーフォームから入力された値が時刻の表示形式かをチェックするには?

VBAで、ユーザーフォームから時刻を入力するときに、 入力された値が、時刻の表示形式(h:mm)かどうかをチェックする にはどうしたら良いですか? IsnumberやIsnumericの時刻版みたいな関数はないんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.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

harudog_03
質問者

お礼

お礼が遅くなり、すみません。 とても丁寧なご説明ありがとうございました。 お陰で良く理解できました! ANDでふたつとも真であることを確かめているんですね。 良回答にさせていただきます。 有難うございました。

その他の回答 (4)

noname#140971
noname#140971
回答No.4

Public Function IsTime(ByVal IData As String) As Boolean   IsTime = (Format(IData, "h:mm") = IData) * IsDate(IData) End Function 1行でも書けないことはないです。

harudog_03
質問者

お礼

ありがとうございます。上手くいきました! 色々試してみましたが、ちゃんとチェックされています。 h:mm形式に変換されたIDataと IsDate関数の結果を 掛け合わせている所が(AND?)、よく理解できないのですが、 宜しければ簡単にご説明していただけませんか?

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.3

ベタな方法です。 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 自分でもスマートなコードとは思ってません。

noname#140971
noname#140971
回答No.2

[イミディエイト] ? 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)
回答No.1

IsDate関数があります。 >時刻の表示形式(h:mm)かどうかをチェックする これは通常的外れ。入力者には通常、表示形式まで設定させないのでは?

関連するQ&A