環境はVisual Basic6 WindowsXP Home Edtionです。
テキストボックスに入力された数字を00:00:00形式で表示したいと
思っています。
12と入力された場合、12:00:00と変換しようと思ってます。
Format関数だと000012となって右によってしまうので、
Function Henkan(ByVal str As String) As String
Dim i As Integer
i = Len(str)
While (0 < (6 - i))
i = i + 1
str = str & "0"
Wend
(略)
Henkan = str
End Function
と関数を作っています、
途中で送信ボタンをおしてしまいました。
(略)の部分ではMid()を使って、:をいれています。
こういった関数を自作しないといけないものなんでしょうか。
よろしくお願いします。
一度Date型変数に入れてからFormat関数を使うのはダメでしょうか?
Dim i As Integer
Dim d As Date
i = 12
d = DateAdd("h", i, d)
MsgBox Format$(d, "hh:nn:ss")
つ TimeSerial
ただ日付型と文字列型は違うので、単純に文字列として扱いたいなら
> テキストボックスに入力された数字を00:00:00形式で表示したい
なら単純に
dim i as long
i=clng(Text1.Text) mod 24
msgbox format$(i,"00") & ":00:00"
などのようにすればいいのではないかと
見た感じ、「1〜6文字(桁)の数字を入力させて時間表示にする」という感じでしょうか?
少なくとも、例えば「12」と入力された時に、それが12時なのか12分なのか、はたまた
1時2分なのか、VB側で勝手に判断するのは不可能なので、単純に1関数でパッと変換するのは
基本的に無理です。
入力方法が固定されていて、例えば時間2桁しか入力されないとかなら、単純に文字列連結で
大丈夫かもしれませんが……
面倒だったので多少泥臭い感じのソースですが(汗)、複数の入力パターンが可能なものを
簡単に作ってみましたので、参考にしてみて下さい。私ならこんな感じにします。
このソースが想定しているパターンでは、時のみの場合は1桁でもOKですが、時分、または
時分秒の場合は必ず、時・分・秒を2桁ずつ入力しなければいけません。
ex.12時5分なら「1205」
でも、こういう制約がないと、普通は判断不可能だと思いますので……
Private Function Henkan(ByVal str As String) As String
Dim tmpTime As String
'とりあえず戻り値初期化
Henkan = ""
'1〜2文字の場合は時、4文字は時分、6文字は秒、それ以外は認めない
'時間としての妥当性チェックを後で行うので、Henkanには直接代入しない
Select Case Len(str)
Case 1
tmpTime = "0" & str & ":00:00"
Case 2
tmpTime = str & ":00:00"
Case 4
tmpTime = Left(str, 2) & ":" & Right(str, 2) & ":00"
Case 6
tmpTime = Left(str, 2) & ":" & Mid(str, 3, 2) & ":" & Right(str, 2)
Case Else
MsgBox "入力エラー"
Exit Function
End Select
'妥当性チェック
If Not IsDate(tmpTime) Then
MsgBox "入力エラー"
Exit Function
End If
Henkan = tmpTime
End Function
あう、細かいですがコメント部分を間違えました。
× 6文字は秒
○ 6文字は時分秒
……です。失礼しました。
うい さん こんにちは。
単純(?)な右詰めで良いなら、
> Replace(Format("12", "!@@\:@@\:@@"), " ", "0")
と言う方法もありますね。
あう・・・間違えた。
「右詰」じゃなくて、「左詰」でした。
テキストボックスに入力するのが、時で、分と秒は0なら、
Format(TimeSerial(Text1.Text, 0, 0), "hh:mm:ss")
で、いいかと。
PCが故障していたためレスするのが遅くなってしまいました。
自分なりに書いてみました。
12 → 12:00:00
1212 → 12:12:00
1299 → 12:99:00
となるようなソースを書こうとしてましてました。
Dim str As String
str = "12"
MsgBox Left$(Format$(str & "000000", "@@\:@@\:@@"), 8)
>1299 → 12:99:00
存在しない時間でもいいの?
ツイート | ![]() |