Vba Excel:宏自动设置时间格式(无日期)

Vba Excel:宏自动设置时间格式(无日期),vba,excel,formatting,Vba,Excel,Formatting,我正在寻找一个简单的宏,将单元格指定为“time”类型,只键入数字(例如“955”)将格式化(并识别为“hh:mm”时间。换句话说,通过键入“955”,单元格将解释为“09:55”,而我现在所能做的就是将其解释为“1902-08-12 00:00:00”(最有可能的是955是1902-08-12的日数) 编辑: 部分原因是允许在键入后计算时间(例如,减去两个时间值以获得时间跨度,或添加几个时间跨度以获得总计)。由于某些原因,Excel不允许在自定义格式中使用“:”。 但是,如果您同意使用另一个分

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

编辑:


部分原因是允许在键入后计算时间(例如,减去两个时间值以获得时间跨度,或添加几个时间跨度以获得总计)。

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


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

这不是VBA,而是一个将更改格式的公式。如果愿意,您可以将其合并到VBA中,但作为一个起点应该有所帮助

=TIMEVALUE(IF(LEN(A5)=3,"0"&LEFT(A5,1)&":",LEFT(A5,2)&":")&RIGHT(A5,2))
(如果A5是输入955的单元格)

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

如果需要,我可以帮助编写代码。返回即可。

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格式的单元格中显示为正确的“时间”。

这似乎更像是“如何使用”。节目在哪里?对不起,我重写了。现在是“我该怎么写”?@Roger Pate:用电子表格或代码编程仍然是编程。自定义格式使用了大量的伪代码,很难导航。。。但这本身并不是一个时间,所以我不能添加它们(好吧,我可以,但公式不是很干净)。我想我应该说得更具体些。