【问题标题】:Convert decimal number to minutes and seconds using VBA使用 VBA 将十进制数转换为分钟和秒
【发布时间】:2012-05-02 21:15:56
【问题描述】:

我有一个十进制数字表示的时间,我需要在 Excel 中使用 VBA 将其转换为分钟和秒。

示例: 小数点前的数字表示分钟为 0.197683577(0 分钟) 数字乘以 60 得到秒 = 0.197683577*60 = 11.86101462(12 秒) = 0:12

我知道我可以通过复制并粘贴为文本格式并使用文本将数字分隔到左右的小数点列然后在其间添加“:”来做到这一点,但必须有一种方法来计算这个.

【问题讨论】:

    标签: vba time decimal seconds


    【解决方案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”以获得正确的格式。然后将截断的分钟加上秒。

    这个公式似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多