Excel:macros自动格式化时间(不含date)

我正在寻找一个简单的macros来指定单元格types为“时间”,只键入数字(例如“955”)将格式化(和承认)“时:分”的时间。 换句话说,通过input“955”,单元格将解释为“09:55”,而我现在所能做的就是解释为“1902-08-12 00:00:00”(最有可能的955是天数为1902-08-12)。

编辑:

部分需求是允许计算打字后的时间(例如,减去两个时间值以获得时间范围,或者添加几个时间范围来获得总时间)。

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分钟),否则应处理大多数情况。

如果有人input1位数字,也需要添加一个案例。 午夜后1至9分钟。


如果您希望将其格式化为实际时间(date – 时间types),则将单元格的格式更改为hh:mm。 必须操纵键入的数值,例如955,以产生一天中的一小部分。

伪代码:

 (left(myCell,len(myCell)-2) + (right(myCell,2)/60)) / 24 

这将产生适当的十进制值,以便在一天中有多less时间已过,因此将在hh:mm格式的单元格中显示为适当的“时间”。

这不是VBA,而是一个会改变格式的公式。 如果你愿意,你可以把它join到VBA中,但是应该帮助你做一个跳跃点。

 =TIMEVALUE(IF(LEN(A5)=3,"0"&LEFT(A5,1)&":",LEFT(A5,2)&":")&RIGHT(A5,2)) 

(如果A5是您input955的单元格)

(另外,请确保将公式单元格格式化为所需的时间格式。)

如果需要的话,我可以帮忙。 只要回传。

由于某些原因,Excel不允许在自定义格式中使用“:”。 但是,如果你确定了另一个分隔符,比如破折号“ – ”,那么你可以简单地创build一个像这样的自定义格式:## – ##
当然你的时间必须是24小时制。

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