2010-06-22 235 views
101

我试图在Excel宏中显示毫秒。我有一列整数,它们仅仅是以毫秒为单位的时间戳(例如28095200是7:48:15.200 am),我想在它旁边创建一个新的列,以保持运行平均值,并以“hh:mm”显示时间:ss.000“格式。我尝试了多种不同的路线,但我不能在毫秒级的情况下得到毫秒而不会导致奇怪的事情发生。在Excel中显示毫秒

这就是我现在所拥有的:

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”。为什么细胞中缺少小时?

另外,发生的另一个奇怪的事情是,如果我将最后一行改为Strings.Format(ms, "#000."),那么我会得到“hh:mm:ss.000”。这就是我想要的,而不是多余的时间。

回答

194

右键单击单元格B1并选择格式单元格。在定制,放在文本框中输入下列标记类型:

[h]:mm:ss.000 

要设置此代码,你可以这样做:

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

这应该给你你”重新寻找。

注意:特殊格式的字段通常要求列宽足够宽,以满足格式化文本的全部内容。否则,文字将显示为######

+0

耶!但是有没有办法在代码中做到这一点?现在,每次运行宏时,格式化都会重置。 (因为我在宏中删除并重新创建工作表。)Cel.EntireRow.NumberFormat =“[h]:mm:ss.000”但是在单元格中给了我“######”。 – Evelyn 2010-06-22 17:48:56

+0

@Evelyn - 3件事:1)我添加了您需要设置数字格式的代码。 2)确保你的列足够宽以适应整个格式化文本。看到我上面的注释。 3)参见吉尔伯特的回答,并注意在“回合”函数中使用'3'。这确保你得到3位小数而不是2。 – 2010-06-22 19:40:34

+0

啊!你是对的。我只需要扩大专栏。另外,在这种情况下,我只想要2的精度。我只是希望它被格式化为3.非常感谢您的帮助! – Evelyn 2010-06-22 20:08:33

4

我这样做是在Excel 2000

这种说法应该是:ms = Round(temp - Int(temp), 3) * 1000

您需要创建一个自定义的格式,我在Excel 2007中发现的[h]:mm:ss.000

4

结果单元格,如果结果是来自嵌入式查询的表,那么ss.000不起作用。我可以粘贴查询结果(从SQL Server Management Studio),并格式化时间。但是,当我将查询作为数据连接嵌入到Excel中时,格式始终以.000为毫秒。

-3

首先代表的毫秒时间划时代的日期(通常1/1/1970),然后添加您的毫秒时间的毫秒数除以一天(86400000):

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

如果您的单元格格式正确,则应该看到人类可读的日期/时间。

+0

嗨乔治,欢迎!不幸的是,OP似乎特意要求一种实现单元格“正确格式化”的方法。他们的原始方法已经涵盖了您要解决的部分:将毫秒时间戳转换为可形成日期时间值。此外,六年来,这是一个相当古老的问题,你投入你的时间。您的意见将在更新的问题上得到更多赞赏! – Carsten 2017-01-30 20:28:59