【问题标题】:How to calculate sum of days within range over multiple years如何计算多年范围内的天数总和
【发布时间】:2017-02-07 17:29:19
【问题描述】:

有没有办法计算特定年份某个范围内的天数?

例如,(我的列是 Employee、Start Date、End Date,列 D-K=years 2009-2016)如果我的开始日期是 2008 年 1 月 5 日,我的结束日期是 2011 年 6 月 9 日,我想要知道 2008 年、2009 年、2010 年和 2011 年这些年之间过去了多少天。

我尝试了以下方法

=IF(ISNUMBER(SEARCH(D$1,$B2))=TRUE,(DATEDIF($B2,$C2,"d"))/30,0)

但它只返回最早年份范围内的天数总和,如果范围跨越多年,则不分配接下来几年的天数。

【问题讨论】:

  • 为什么不使用B2 - B1

标签: excel search range datediff date-range


【解决方案1】:

获取两个日期范围之间重叠的标准公式是

=MAX(MIN(end1,end2)-MAX(start1,start2)+1,0)

See this reference for example

所以根据你给定年份的情况调整它

=MAX(MIN($C2,DATE(D$1,12,31))-MAX($B2,DATE(D$1,1,1))+1,0)

【讨论】:

  • 这些列是否需要采用任何特定格式?这个公式对我来说很有意义,我的数据完全按照你在这里的设置,但是当我应用这个公式时,它返回 2009-2015 的所有年份的“365”和 2016 的“366”
  • 是的,开始日期和结束日期必须正确格式化为日期 - 我尝试将它们作为文本输入,你会得到每年的天数,就像你说的那样 - 这是因为文本value 被 MIN 和 MAX 函数忽略,你只剩下例如2016 年 12 月 31 日-2016 年 1 月 1 日+1=2016 年的 366。
【解决方案2】:

为什么要除以 30?

=DATEDIF(B2,C2,"d") 适合我。

这应该让你开始......它需要工作,但在此基础上,你应该在你的路上。

=IF($B$2<DATE(D1,1,1), IF($C$2>DATE(D1,12,31), DATEDIF(DATE(D1,1,1),DATE(D1,12,31), "d"), DATEDIF(DATE(D1,1,1),$C$2,"d")),DATEDIF($B$2,DATE(D1,12,31),"d"))

【讨论】:

  • 我其实想要的是月数,但是如果开始日期是 1/10/11,结束日期是 4/7/11,例如,使用“m”只会返回“2 “即使它接近 3 个月
  • 尝试强制延长一个月怎么样... =IF(MOD(DATEDIF(B2,C2,"d"),30)>=15, DATEDIF(B2,C2,"m" )+1, DATEDIF(B2,C2,"m"))
  • 真正的问题是我需要知道每年该范围内包含多少天。所以总共 1251 天不是我要找的 - 我想知道 2008 年、2009 年、2010 年和 2011 年有多少天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多