excel - 四舍五入到最近的15分钟

时间:2011-05-31 22:35:57

标签: excel vba worksheet-function

我有一个公式来计算几个TIMES的差异并将它乘以24得到总数的十进制值:

D10=(C9-D9)*24

我想像这样进行特殊的舍入:

如果D9 is 1pmC9 is 2:08 pm,我希望D10为1.25

另一个词

1:53 until 2:07 would be counted as 2
2:08 until 2:22 would be 2:15
2:23 through 2:37 would be 2:30
etc

有谁知道如何进行这种特殊的舍入?

正如道格所说:

i need the accrued time from 1 PM to 2:08 PM should round up to 1.25 hours whereas 1 PM to 2 PM would round down to 1 hour, in other words to the nearest quarter hour.

4 个答案:

答案 0 :(得分:4)

以下是根据需要划分差异的公式:

=(TRUNC((D9+VALUE("00:07"))*96)-TRUNC((C9+VALUE("00:07"))*96))*VALUE("00:15")*24

答案 1 :(得分:4)

如果您想要以小时为单位的时间差异,但四舍五入到最接近的四分之一小时,那么您可能需要的只是:

=MROUND((C9-D9)*24,0.25)

答案 2 :(得分:2)

Excel函数版本:

根据评论中的要求,这里只有一个excel函数版本:

直到下一个15分钟的边界:

  

= TIME(HOUR(A1),15 * CEILING(MINUTE(A1)/ 15,1),0)

  • N.B。根据原始问题用(t2-t1)替换A1

绕到最近的15分钟边界:

  

= TIME(HOUR(A1),15 * ROUND(MINUTE(A1)/ 15,0),0)

btw:出于性能原因,应该避免转换为字符串来进行日期操作,也可能是地理原因。也许这些事情的其他部分对你来说是一个问题。


VBA版本

你可以使用div和mod函数来完成它。不确定你是否想要它在vba或excel宏中,但这是方法。现在不要在我面前表现出色,所以这里就是......

(如果您需要重复使用,请在vba中执行)

转换为分数

d = floor(n / 0.25)

余数= n mod 0.25

x = 0.25 * round(余数/ 0.25)

回答=(d * 0.25)+ x

应该接近。

...只是想到excel债券“tick”到十进制函数(又是什么)。这可能是一个更好的方法。

在vba中编码...仅基本测试:

Public Function f(n As Double) As Double

    Dim d As Double, r As Double, x As Double

    d = Int(n / 0.25)
    r = n - (d * 0.25)   ' strange... couldn't use mod function with decimal?
    x = 0.25 * Round(r / 0.25)

    f = (d * 0.25) + x

End Function

用法:

(在一个单元格中)

= F(C9-D9)

答案 3 :(得分:1)

这是另一个公式选项

=(ROUND(+D9*96,0)-ROUND(+C9*96,0))/4

将每个时间序列转换为1/4小时(* 96),轮次,添加结果,并缩放到小时(* 4)