我正在寻找一个简单的宏来指定单元格为“time”类型,只键入数字(例如“955”)将格式化(并识别为)“hh:mm”时间。换句话说,通过键入“955”,单元格将解释为“09:55”,而我现在所能做的就是解释为“1902-08-12 00:00:00”(很可能是955是1902-08-12的日期。)
编辑:
部分需要是允许计算打字后的时间(例如,减去两个时间值以获得一个时间跨度,或者添加几个时间点以获得总计)。
答案 0 :(得分:3)
VBA代码:
Dim val As String
val = myCell.Value
Dim newval As String
If Len(val) = 2 Then
newval = "00:" & val
ElseIf Len(val) = 3 Then
newval = "0" & Left(val, 1) & ":" & Right(val, 2)
ElseIf Len(val) = 4 Then
newval = Left(val, 2) & ":" & Right(val, 2)
Else
newval = "Not a valid time"
End If
myCell.Value = newval
此代码不会检测最后两位数字是否为有效时间(大于59分钟),否则它应处理大多数情况。
如果有人输入1位数字,你还需要添加一个案例,即。午夜后1至9分钟。
如果要将其格式化为实际时间(日期时间类型),请将单元格的格式更改为hh:mm。 必须操纵输入的值,例如955,以产生一天的一小部分。
伪代码:
(left(myCell,len(myCell)-2) + (right(myCell,2)/60)) / 24
这会生成一天中有多少天的正确十进制值,因此将在单元格中以hh:mm格式显示为正确的“时间”。
答案 1 :(得分:1)
这不是VBA,而是一个会改变格式的公式。如果你愿意,你可以将它合并到VBA中,但应该作为一个跳跃点。
=TIMEVALUE(IF(LEN(A5)=3,"0"&LEFT(A5,1)&":",LEFT(A5,2)&":")&RIGHT(A5,2))
(如果A5是您输入955的单元格)
(另外,请确保将公式单元格格式化为所需的时间格式。)
如果需要,我可以提供帮助。回帖。
答案 2 :(得分:0)
由于某些原因,Excel不允许在自定义格式中使用“:”。
但是,如果您使用另一个分隔符,例如破折号“ - ”,那么您只需创建一个这样的自定义格式:## - ##
当然,你的时间必须是24小时格式。
或者,您可以先输入所有时间,就像数字一样(如果您不想丢失尾随零,则可以更好地输入文本)。然后运行脚本以在小时和分钟之间插入分号。