【发布时间】:2012-05-02 21:15:56
【问题描述】:
我有一个十进制数字表示的时间,我需要在 Excel 中使用 VBA 将其转换为分钟和秒。
示例: 小数点前的数字表示分钟为 0.197683577(0 分钟) 数字乘以 60 得到秒 = 0.197683577*60 = 11.86101462(12 秒) = 0:12
我知道我可以通过复制并粘贴为文本格式并使用文本将数字分隔到左右的小数点列然后在其间添加“:”来做到这一点,但必须有一种方法来计算这个.
【问题讨论】:
我有一个十进制数字表示的时间,我需要在 Excel 中使用 VBA 将其转换为分钟和秒。
示例: 小数点前的数字表示分钟为 0.197683577(0 分钟) 数字乘以 60 得到秒 = 0.197683577*60 = 11.86101462(12 秒) = 0:12
我知道我可以通过复制并粘贴为文本格式并使用文本将数字分隔到左右的小数点列然后在其间添加“:”来做到这一点,但必须有一种方法来计算这个.
【问题讨论】:
Public Function FromDecimalTime(ByVal t As Double) As Date
FromDecimalTime = TimeSerial(0, Fix(t), (t - Fix(t)) * 60)
End Function
与公式相同:
=TIME(0,TRUNC(A1),(A1-TRUNC(A1))*60)
嗯,实际上不一样。 TimeSerial 将根据舍入规则(11.86 -> 12)对秒数进行舍入,TIME 将截断(11.86 -> 11)。但是您可以将舍入函数应用于其最后一个参数。
【讨论】:
VBA 函数对我不起作用,但我在 Excel 中找到了解决方法:
=TRUNC(W11/60)&":"&IF(ROUND(((W11/60-TRUNC(W11/60))*60),0)=0,"00",ROUND(((W11/60-TRUNC(W11/60))*60),0))`
其中W11 是十进制数字形式的时间,例如900.3201306。
结果以分钟为单位15:00
基本上,您将截断的十进制分钟减去十进制分钟+秒,仅给您秒。然后你把decimal seconds * 60给你seconds+milliseconds。舍入这个给你几秒钟。如果秒为 0,则写入“00”以获得正确的格式。然后将截断的分钟加上秒。
这个公式似乎有效。
【讨论】: