我有一个公式来计算几个TIMES的差异并将它乘以24得到总数的十进制值:
D10=(C9-D9)*24
我想像这样进行特殊的舍入:
如果D9 is 1pm
和C9 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.
答案 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函数版本:
直到下一个15分钟的边界:
= TIME(HOUR(A1),15 * CEILING(MINUTE(A1)/ 15,1),0)
绕到最近的15分钟边界:
= TIME(HOUR(A1),15 * ROUND(MINUTE(A1)/ 15,0),0)
btw:出于性能原因,应该避免转换为字符串来进行日期操作,也可能是地理原因。也许这些事情的其他部分对你来说是一个问题。
你可以使用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)