アプリ版:「スタンプのみでお礼する」機能のリリースについて

早速ですが
入力された値が 時間かそれとも時間でないか識別したいのですが

If IsDate(Cells(1, 2)) Then 日付はあるのですが

If Istime(Cells(1, 2)) Then は 駄目なようです。

If TimeValue(Cells(1, 2)) Then ですと、True なら 良いのですが、逆だとエラーになります。
エラー回避で、識別するのも手ですが、

簡単な方法は無いのでしょうか

A 回答 (3件)

IsDateを使います。



Dim セル値 As String
'セル内容を文字列で受け取る
セル値 = Cells(1, 2).Text
'日付と結合してみる
If IsDate("2012/01/01 " & セル値) Then
  MsgBox "時刻です"
Else
  MsgBox "時刻ではありません"
End If

日付(時刻)を含むDate型の内部形式は
倍精度実数で、整数部は1899/12/31を
1として、現在までの通算日数を表わし、
小数部は1/86400を1秒として0:0:0からの
通算秒数を表わします。
よって、デフォルトプロパティのValueを使うと
実数なのか日付なのか分からないことが
あります。
表面に見えている文字列を取り出すText
プロパティで文字列を取得し、前方に適当な
日付を結合します。これでIsDateがTrueを
返せば、元の文字列は時刻を表わすという
仕掛けです。

この回答への補足

サンクス

理解できました

補足日時:2012/09/29 23:27
    • good
    • 3

そこまで細かいことを気にするのなら "時間" じゃなくて "時刻" って言う癖をつけようや。


違いはわかるな?

IsDateがTrueで、
なおかつ値の文字煤が5で (hh:mm と仮定)、
なおかつ3文字目が ":" だったら True を返すってな関数を作れば?
    • good
    • 1

Istime()関数?というものはVBAに用意されていませんね。



万能な判別法ってのも、考えたら結構大がかりです。(そっちは遠慮しますが)

簡単な方法ということなので、
とても性善説的なものになってしまいますが。
例えば、
 時刻が確実に時刻として正しく入力されていること
 表示形式を勝手に変えてしまう人がいないこと
 0:00が存在する場合は文字列ではないという判定も必要
という条件で
  If v.Text = Format(Val(v.Value), "h:mm") Then
(表示形式:デフォルトの"標準"または"h:mm"の場合↑)
とか、
 "123:456"とか"1a:b2"のようなイタズラがないこと
という条件で
  If v.Text Like "#*:*#" Then
(RegExpとか正規表現使うと少しはマシになりますが。)
とか、
表示文字列で判定するのが簡単といえば簡単かと。
ただ、これが実用に耐えられるかどうかの検証は簡単ではないと思いますが。

私も得意というわけではありませんので、とりあえず、ご参考まで
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!