在Excel中显示毫秒

133

我正在尝试在Excel宏中显示毫秒。我有一个整数列,其中包含以毫秒为单位的时间戳(例如28095200是上午7:48:15.200),我想在它旁边创建一个新列,保持运行平均值并以hh:mm:ss.000格式显示时间。

 Dim Cel As Range
 Set Cel = Range("B1")
 temp = Application.Average(Range("A1:A2")) / 1000
 ms = Round(temp - Int(temp), 2) * 1000
 Cel.Value = Strings.Format((temp / 60 / 60 / 24), "hh:mm:ss") _
                & "." & Strings.Format(ms, "#000")

这只在单元格中显示“mm:ss.0”。但是当我点击单元格时,在公式栏中会显示“hh:mm:ss”。为什么小时数会丢失?我该如何显示小时、分钟、秒和毫秒?

4个回答

229

右键点击单元格B1,选择格式化单元格。在自定义选项卡中,在标签为类型的文本框中输入以下内容:

[h]:mm:ss.000 

要在代码中设置这个,你可以像这样做:

Range("A1").NumberFormat = "[h]:mm:ss.000"

这应该可以给你想要的东西。

注意:特别格式化的字段通常需要列宽足够宽以容纳整个格式化文本内容。否则,文本将显示为######


耶!但我能在代码中做到吗?现在每次运行宏时,格式都会重置。(因为我正在宏中删除和重新创建工作表。)Cel.EntireRow.NumberFormat = "[h]:mm:ss.000" 但这只是在单元格中给我“######”。 - Evelyn
@Evelyn - 三件事情:1)我添加了你需要设置数字格式的代码。2)确保你的列宽足够宽以适应整个格式化文本。请参见我上面的注释。3)请查看Gilbert的答案并注意在Round函数中使用3。这可以确保你获得3位小数,而不仅仅是2位。 - Ben McCormack
啊!你说得对。我只需要扩宽列宽度。而且,在这种情况下,我只想要2位小数的精度。我只是想让它格式化为3。非常感谢你的帮助! - Evelyn
30
如果你的Windows/Excel配置为德国,那么小数点.需要替换为逗号,,就像数字中的小数位一样。否则Excel会报错并表示它不是有效的格式。因此,应该使用[h]:mm:ss,000格式。如果其他人也遇到相同的问题,我想分享这个发现。 - gehho
当使用该格式时,Excel会显示:Microsoft Excel无法使用您输入的数字格式。已尝试[h]:mm:ss.000和hh:mm:ss.000。Excel 365不认识“.000”(毫秒)吗? - hfrmobile

7

我发现在Excel 2007中,如果结果来自嵌入查询的表格,则ss.000不起作用。我可以粘贴查询结果(来自SQL Server Management Studio),并成功格式化时间。但是当我将查询嵌入到Excel中作为数据连接时,格式总是以毫秒为单位显示.000。


4

我是在Excel 2000中完成的。

这个语句应该是:ms = Round(temp - Int(temp), 3) * 1000

你需要为结果单元格创建自定义格式[h]:mm:ss.000


-3

首先将毫秒时间的纪元表示为日期(通常为1970年1月1日),然后加上您的毫秒时间除以一天的毫秒数(86400000):

=DATE(1970,1,1)+(A1/86400000)

如果您的单元格格式正确,您应该可以看到一个可读的日期/时间。


嗨,乔治,欢迎加入!不幸的是,OP似乎特别要求找到一种实现单元格“正确格式化”的方法。他们最初的方法已经涵盖了你正在处理的部分:将毫秒时间戳转换为可格式化的日期时间值。此外,六年过去了,这是一个相当古老的问题,你投入时间的价值会更高地体现在新的问题上! - Carsten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接