【问题标题】:excel - rounding time to the nearest 15 minutesexcel - 将时间四舍五入到最接近的 15 分钟
【发布时间】:2011-05-31 22:35:57
【问题描述】:

我有一个公式可以计算几个 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.

【问题讨论】:

  • 你的数学不工作。下午 1 点 + 下午 2:08 = 凌晨 3:08。下午 1 点 + 下午 2 点 15 分 = 凌晨 3 点 15 分。如果你减去 1,然后将小数部分乘以 24,你最终得到 3.25。
  • @Lance,OP 说从下午 1 点到下午 2:08 的累计时间应该四舍五入到 1.25 小时,而下午 1 点到下午 2 点将四舍五入到 1 小时,换句话说最近的一刻钟。
  • @lance 是的,道格是对的
  • @Doug,那么他想要的是差异而不是sum
  • @lance 是的!差异。对不起,我现在会更新

标签: excel vba worksheet-function


【解决方案1】:

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

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

【讨论】:

  • @I__,那么我可以解决它,但这意味着您不是要总和,而是要差额。今天下午我会修改它。
  • @lance 嘿 lance 你有没有机会修复它
  • @I__,好的,但请注意,有一些细微的错误有时会影响 TRUNC,因此它可能并不总是完全完美。我发现它最适合使用 VALUE 语句,所以不要尝试将它们更改为它们的十进制等值。
  • @lance 不工作,对于这些值:下午 1:08 下午 2:03 我得到 1 的结果
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    Excel 函数版本:

    根据 cmets 中的要求,这里有一个 excel 函数专用版本:

    向下取整到下一个 15 分钟边界:

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

    • 注意根据原始问题将 A1 替换为 (t2-t1)

    绕到最近的 15 分钟边界:

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

    顺便说一句:出于性能原因以及地理原因,应避免转换为字符串来进行日期操作。也许这些事情都不是你所关心的。


    VBA 版本

    您可以使用 div 和 mod 函数来做到这一点。不确定您是否想要在 vba 或 excel 宏中使用它,但这是方法。现在没有excel在我面前,所以这里......

    (如果需要大量重用,请在 vba 中执行)

    转换成分数

    d=地板(n / 0.25)

    余数=n mod 0.25

    x=0.25 * 圆形(余数/0.25)

    answer=(d * 0.25) + x

    应该很接近了。

    ... 只是想到了 excel 键“打勾”到小数函数(又是什么)。这可能是一个更好的方法。

    在 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)

    【讨论】:

    • 你能告诉我一个纯 excel 非 vba 的方法来做到这一点非常感谢
    【解决方案4】:

    这是另一个正式的选项

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

    将每个时间序列转换为 1/4 小时 (*96)、四舍五入、添加结果并缩放为小时 (*4)

    【讨论】:

    • 公式中的错字应该是 - 而不是 +,现在更正答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2011-01-22
    • 2022-01-02
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多