Excel:宏自动格式化时间(无日期)

时间:2010-02-18 20:53:58

标签: excel vba excel-vba formatting

我正在寻找一个简单的宏来指定单元格为“time”类型,只键入数字(例如“955”)将格式化(并识别为)“hh:mm”时间。换句话说,通过键入“955”,单元格将解释为“09:55”,而我现在所能做的就是解释为“1902-08-12 00:00:00”(很可能是955是1902-08-12的日期。)

编辑:

部分需要是允许计算打字后的时间(例如,减去两个时间值以获得一个时间跨度,或者添加几个时间点以获得总计)。

3 个答案:

答案 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小时格式。

或者,您可以先输入所有时间,就像数字一样(如果您不想丢失尾随零,则可以更好地输入文本)。然后运行脚本以在小时和分钟之间插入分号。