使用 VBA 将十进制数转换为分钟和秒
Posted
技术标签:
【中文标题】使用 VBA 将十进制数转换为分钟和秒【英文标题】:Convert decimal number to minutes and seconds using VBA 【发布时间】:2012-05-02 21:15:56 【问题描述】:我有一个十进制数字表示的时间,我需要在 Excel 中使用 VBA 将其转换为分钟和秒。
示例: 小数点前的数字表示分钟为 0.197683577(0 分钟) 数字乘以 60 得到秒 = 0.197683577*60 = 11.86101462(12 秒) = 0:12
我知道我可以通过复制并粘贴为文本格式并使用文本将数字分隔到左右的小数点列然后在其间添加“:”来做到这一点,但必须有一种方法来计算这个.
【问题讨论】:
【参考方案1】: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
)。但是您可以将舍入函数应用于其最后一个参数。
【讨论】:
非常感谢!因为我想要一个整数,所以我使用 Fix(decim) & Format(val, ":ss") 来获得正确的格式。我不确定是否有时间格式代码来生成它,但它似乎有效。 'Sub aaaaaaaMacro1() Dim decim As Double decim = Range("AB11").Value Dim val As Date val = TimeSerial(0, Fix(decim), (decim - Fix(decim)) * 60) MsgBox Fix(decim) & Format(val, ":ss") End Sub'【参考方案2】: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”以获得正确的格式。然后将截断的分钟加上秒。
这个公式似乎有效。
【讨论】:
以上是关于使用 VBA 将十进制数转换为分钟和秒的主要内容,如果未能解决你的问题,请参考以下文章
第六章第二十五题(将毫秒数转换成小时数分钟数和秒数)(Convert milliseconds to hours, minutes, and seconds) - 编程练习题答案