在Excel / Google Spreadsheets中计算date范围的总和

我想计算一系列重叠date的多个值的总和。 它应该返回一个特定年份的总和,并将按比例分成一年以上的值。

例:

╔══════════╦════════════╦════════════╗ ║ Value ║ From ║ To ║ ╠══════════╬════════════╬════════════╣ ║ 100,00 € ║ 01.01.2015 ║ 31.12.2015 ║ ║ 150,00 € ║ 01.07.2015 ║ 31.06.2016 ║ ║ 300,00 € ║ 01.01.2016 ║ 31.12.2016 ║ ╚══════════╩════════════╩════════════╝ 

预计2015年度业绩:175,00€
预计2016年结果:375,00€

我没有find使用SUMIF()SUMIFS()的有效方法。 特别是对于重叠date按比例分配结果。

我build议使用辅助列,列标题是计算总数的年份,即2015年和2016年。

我已经为数据添加了额外的行,以确保它在时间不是一整年的时间内有效。

重叠区域是两个date范围的较高端减去两个date范围较低端的较小者。 如果结果是否定的,则不会有重叠,结果应该设置为零。 这就产生了以E2开始的每一行的以下公式:

 =MAX((MIN(DATE(E$2,12,31),$C3)-MAX(DATE(E$2,1,1),$B3))+1,0) 

第一列标题在E2中。

但是,根据问题中提供的数据,这会产生一个不准确的答案,因为今年第二个6个月的时间比前六个月多。

如果你使用下面的公式在整个月工作,你可以得到一个确切的答案: –

 =MAX((MIN(E$2*12+12,YEAR($C3)*12+MONTH($C3))-MAX(E$2*12+1,YEAR($B3)*12+MONTH($B3)))+1,0) 

然后计算G3中每个时间段的总重叠:

 =E3+F3 

并计算消费的比例作为金额X重叠年/ H3重叠总计:

  =$A3*E3/$G3 

该方法可以很容易地扩展到任意date范围,而不仅仅是整年。

在几天工作: –

在这里输入图像说明

在几个月内工作: –

在这里输入图像说明

这里是一个数组公式(一定要用Ctrl-Shift-Enterinput),它将一步完成计算,但似乎相当长。 在生产版本中,$ C3:$ C6将由$ C:$ C等replace: –

 =SUM(IF(IF(E$2*12+12<YEAR($C3:$C6)*12+MONTH($C3:$C6),E$2*12+12,YEAR($C3:$C6)*12+MONTH($C3:$C6))-IF(E$2*12+1>YEAR($B3:$B6)*12+MONTH($B3:$B6),E$2*12+1,YEAR($B3:$B6)*12+MONTH($B3:$B6))+1>0,IF(E$2*12+12<YEAR($C3:$C6)*12+MONTH($C3:$C6),E$2*12+12,YEAR($C3:$C6)*12+MONTH($C3:$C6))-IF(E$2*12+1>YEAR($B3:$B6)*12+MONTH($B3:$B6),E$2*12+1,YEAR($B3:$B6)*12+MONTH($B3:$B6))+1,0)*$A3:$A6/(YEAR($C3:$C6)*12+MONTH($C3:$C6)-YEAR($B3:$B6)*12-MONTH($B3:$B6)+1)) 

这两种方法(帮助栏和数组公式)对2015年和2016年以外的date范围会有不同的结果,例如1/7 / 14-30 / 6/15将把2015年的全部数额作为第一种方式一半是第二种方式。

汤姆,非常感谢你的回答。

这是我结束了。

 ╔═══════╦════════════╦════════════╦══════╦══════╗ ║ Value ║ From ║ To ║ 2015 ║ 2016 ║ ╠═══════╬════════════╬════════════╬══════╬══════╣ ║ 100 ║ 01.01.2015 ║ 31.12.2015 ║ 175 ║ 375 ║ ║ 150 ║ 01.07.2015 ║ 30.06.2016 ║ ║ ║ ║ 300 ║ 01.01.2016 ║ 31.12.2016 ║ ║ ║ ╚═══════╩════════════╩════════════╩══════╩══════╝ 

使用下面的expression式,值是A,从B到To是C.

 =ArrayFormula( SUM( IFERROR( IF( IF( D$1 * 12 + 12 < YEAR($C:$C) * 12 + MONTH($C:$C); D$1 * 12 + 12; YEAR($C:$C) * 12 + MONTH($C:$C) ) - IF( D$1 * 12 + 1 > YEAR($B:$B) * 12 + MONTH($B:$B); D$1 * 12 + 1; YEAR($B:$B) * 12 + MONTH($B:$B) ) + 1 > 0; IF( D$1 * 12 + 12 < YEAR($C:$C) * 12 + MONTH($C:$C); D$1 * 12 + 12; YEAR($C:$C) * 12 + MONTH($C:$C) ) - IF( D$1 * 12 + 1 > YEAR($B:$B) * 12 + MONTH($B:$B); D$1 * 12 + 1; YEAR($B:$B) * 12 + MONTH($B:$B) ) + 1; 0 ) * $A:$A / ( YEAR($C:$C) * 12 + MONTH($C:$C) - YEAR($B:$B) * 12 - MONTH($B:$B) + 1 ) ; 0 ) ) ) 

提示:您可以将缩进的表单发布到Google Spreadsheets中以保持可读性。