Excel 将8、23、38、53以上的分钟数四舍五入到最近的一刻钟

Excel 将8、23、38、53以上的分钟数四舍五入到最近的一刻钟,excel,Excel,这是对某人的挑战。我正在尝试将会话时间四舍五入到最接近的四分之一小时(我报告许可证认证的客户端总小时数) 例:在第一个四分之一小时内,低于8分的分钟将是它们的精确值:1=1,2=2,3=3 当输入8时,它会自动四舍五入到15(在剩余的一小时内也是如此:例如:16=16,17=17,18=18,19=19,20=20,21=21,22=22。但是23到29都会四舍五入到30 理想情况下,我可以在一列中同时输入小时和分钟,例如:1.54 但是,我意识到可能需要为小时和分钟创建一个单独的列来实现这一点

这是对某人的挑战。我正在尝试将会话时间四舍五入到最接近的四分之一小时(我报告许可证认证的客户端总小时数)

例:在第一个四分之一小时内,低于8分的分钟将是它们的精确值:1=1,2=2,3=3

当输入8时,它会自动四舍五入到15(在剩余的一小时内也是如此:例如:16=16,17=17,18=18,19=19,20=20,21=21,22=22。但是23到29都会四舍五入到30

理想情况下,我可以在一列中同时输入小时和分钟,例如:1.54

但是,我意识到可能需要为小时和分钟创建一个单独的列来实现这一点(即,我的公式只涉及分钟的四舍五入。我可以在分钟四舍五入后将小时和分钟相加。)因此:

在B列中,我想输入1到60分钟的分钟数(无小数-即,一般情况下,非时间格式)

B列中的38分钟将自动四舍五入到C列中的45分钟

有人有什么想法吗?我如何使用最少的列数来实现这一点

[之前发布的一个问题——“四舍五入到最近的四分之一”——介绍了Math.天花板的概念。这是我应该使用的吗?我无法理解答案)

怀着感激之情

~Jay

假设“sessions”是您的表(下面的CTE包含2条示例记录),存储了会话开始时间和结束时间(如上面的注释所述,只存储这些数据点,而不存储计算值)。您可以按如下方式进行舍入。(不确定这是否是您想要的,因为它要么向上取整,要么向下取整……您不想向下取整吗?)

编辑:

嗨,Jay,我想你没有提到这是一个Excel问题!我假设的是SQL。正如Stuart在上面的评论中所建议的,如果你修改你的问题以表明它是针对Excel的,那会很有帮助,这样其他人将来可能会从这个对话框中获得帮助

使用Excel,您可以使用包含会话开始日期和时间(A列)和会话结束日期和时间(B列)的两列以及两个公式来完成此操作:

Column C (Actual Minutes) = ROUND((B1-A1) * 1440,0)
Column D (Billing Minutes) = (FLOOR(C1/15, 1) * 15) + IF(MOD(C1,15) >= 8, 15, MOD(C1,15))
这就是我的桌子的样子:

3/18/2014 12:00 3/18/2014 12:38 38  45
3/18/2014 14:00 3/18/2014 14:37 37  37
进展如何

DECLARE @time DATETIME = '2014-03-19T09:59:00'

SELECT CASE 
          WHEN DATEPART(mi, @time) BETWEEN 8 AND 15 THEN DATEADD(mi, 15-DATEPART(mi, @time), @time) 
          WHEN DATEPART(mi, @time) BETWEEN 23 AND 30 THEN DATEADD(mi, 30-DATEPART(mi, @time), @time)
          WHEN DATEPART(mi, @time) BETWEEN 38 AND 45 THEN DATEADD(mi, 45-DATEPART(mi, @time), @time)
          WHEN DATEPART(mi, @time) BETWEEN 53 AND 59 THEN DATEADD(mi, 60-DATEPART(mi, @time), @time)
          ELSE @time
       END

为什么要存储综述?在显示/使用它时处理它。我担心
ColumnA-ColumnD
表结构。我会使用
SessionStart
SessionEnd
列(假设使用了SQL Server,这两个列都是DATETIME)。然后让应用程序业务层“计算”关于取整问题。嗨,Jay。你已经在这个论坛的SQL Server部分发布了这个问题,我的回答就好像这个问题是关于SQL Server的,而不是Excel。你的标签没有一个表明这是Excel问题,也没有开始问题。我建议你更新问题和标签,这样其他人就不会得出这个结论。到目前为止,有两个我们中的大多数人都认为这是SQL Server的问题。为什么要这样做?你确定要这样做吗?为什么不直接存储值?感谢你如此迅速地做出响应。我不是Excel高手,我只知道如何在网上找到问题的答案。首先,我想向上取整,而不是向下取整。参考表可能是这样的e:分钟数:四舍五入为:111225363781515151515151515151515151516171717181818等。同样,我希望将分钟数四舍五入如下(4个阈值为8、23、38和53)8分钟或以上:最多15 23分钟或以上:最多30 38分钟或以上:最多45 53分钟或以上:最多60分钟~JayThank感谢您如此迅速的回复。我不是Excel高手,我只知道如何在网上找到问题的答案。首先,我想向上取整,而不是向下取整ccur:Minutes:1=1,2=2,3=3,4=4,5=5,6=6,7=7,8=15,9=15,10=15,11=15,12=15,13=15,14=15,15=15,16=16,17=17,18=18等等。同样,我希望将分钟四舍五入如下(4个阈值为8,23,38和53)8分钟或以上:四舍五入到15/23分钟或以上:四舍五入到30/38分钟或以上:四舍五入到45/53分钟或以上:四舍五入到60~Jay还有另一种说法(对不起,我不知道语法):=IF(A1)(1-7,1-7)(8-15,15)(16-22,16-22)(23-30,30)(31-37,31-37)(38-45,45)(46-52,46-52)(53-60)谢谢你!我60岁了,对Excel非常陌生。请你再给我解释一下好吗?我该如何把它写成公式呢?嗨,杰伊。你已经在这个论坛的SQL Server部分发布了这篇文章,我的回答好像是关于SQL Server的,而不是Excel。你的标签都没有表明这是一个Excel我问题,也不是开始的问题。我建议你更新问题和标签,这样其他人就不会得出这个结论。到目前为止,我们中有两个人认为这是SQL Server的问题。-斯图尔特
Column C (Actual Minutes) = ROUND((B1-A1) * 1440,0)
Column D (Billing Minutes) = (FLOOR(C1/15, 1) * 15) + IF(MOD(C1,15) >= 8, 15, MOD(C1,15))
3/18/2014 12:00 3/18/2014 12:38 38  45
3/18/2014 14:00 3/18/2014 14:37 37  37
DECLARE @time DATETIME = '2014-03-19T09:59:00'

SELECT CASE 
          WHEN DATEPART(mi, @time) BETWEEN 8 AND 15 THEN DATEADD(mi, 15-DATEPART(mi, @time), @time) 
          WHEN DATEPART(mi, @time) BETWEEN 23 AND 30 THEN DATEADD(mi, 30-DATEPART(mi, @time), @time)
          WHEN DATEPART(mi, @time) BETWEEN 38 AND 45 THEN DATEADD(mi, 45-DATEPART(mi, @time), @time)
          WHEN DATEPART(mi, @time) BETWEEN 53 AND 59 THEN DATEADD(mi, 60-DATEPART(mi, @time), @time)
          ELSE @time
       END