2010-02-18 151 views
3

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

编辑:的这方面的需要

部分是允许的时间计算后输入(例如。减去两个时间值来获得一个时间跨度,或添加几个时间跨度一共拿到)。

+0

这似乎更多“如何使用<特定软件>”。编程在哪里? – 2010-02-18 21:10:52

+0

对不起,我重写了它。现在是“我怎么写”? – MPelletier 2010-02-18 21:14:34

+0

@Roger Pate:电子表格编程或代码编程仍在编程中。自定义格式使用很多伪代码,并且可能很难导航。 – guitarthrower 2010-02-18 21:50:30

回答

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的小区中的适当的“时间”的适当的十进制值:毫米格式。

0

由于某些原因,Excel不允许在自定义格式中使用“:”。 但是,如果您确定了另一个分隔符,请输入破折号“ - ”,那么您可以简单地创建一个自定义格式,如下所示:## - ##
当然,您的时间必须采用24小时格式。

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

+0

我明白了......但这本身并不是一个时间,所以我不能添加它们(当然,我可以,但公式不会很干净)。我想我应该更具体。 – MPelletier 2010-02-18 21:55:26

1

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

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

(如果A5是你进入955细胞)

(另外,确保公式的单元格的格式设置为你想要的时间格式。)

我可以用代码,如果帮需要。只要回复。