我有一组日期,总共7个期间,每个6个月,都有相应的计算因子。
我将向用户输入他们想要进行计算的时间段,该时间段可以属于6个月的时间段之一,也可以完全或部分包含两个或多个这样的时间段。
插图:
我已经获得了用户输入用于计算的时段的十进制值(每月)。对于初审(请参阅用户输入),每月01-01-2015到29-04-2015的十进制值为3.97。该时间段的计算公式如下:
n * 3.97 * 113%
对于第二个实例,从2015年4月30日到2015年6月30日的十进制值为2.03,它将用于以113%进行计算,然后将结果添加到已完成的计算中在从01-07-2015到20-12-2015期间使用十进制值5.65的119%:
(n * 2.03 * 113%)+(n * 5.65 * 119)
我认为我可以处理期限的分解,因为修订活动是在特定日期每两年召开一次,但是欢迎您提出建议。更重要的是,我需要帮助来跟踪与用户如上所述输入的时间段相对应的预设计算因子(例如132%)。可行吗?
答案 0 :(得分:1)
我将使用标准方法来找到overlap between two dates,并将任务分为三个部分,就像我对this recent question的回答一样。
(1)第一部分是查找用户的日期范围与整个月中的一个或多个修订期之间的重叠,并且需要一个数组公式。我选择使用Datedif function 1 来获得重叠开始和结束之间的月份差。如果没有重叠,则输入到Datedif的开始日期将在结束日期之后,并且它将返回错误,Iferror可以捕获该错误。如果用户的日期以A2和B2开头,则输入C2:
=SUM(IFERROR((DATEDIF(IF(K$2:K$8>A2,K$2:K$8,A2),IF(L$2:L$8<B2,L$2:L$8,B2),"m")+1)*M$2:M$8,0))
必须使用 Ctrl Shift Enter
作为数组公式输入以上结果包括用户输入的前几个月和最后几个月,即使它们是不完整的月份。然后有必要减去前几个月和最后几个月的所有缺失天。
(2)第一个月中缺少的天数是D2中该月中天数的一部分:
=SUMIFS($M$2:$M$8,$K$2:$K$8,"<="&A2,$L$2:$L$8,">="&A2)*(A2-EOMONTH(A2,-1)-1)/(EOMONTH(A2,0)-EOMONTH(A2,-1))
OP指出,这也可以使用sumproduct,vlookup或index / match来完成。
(3)上个月缺少的天数(相当于E2中该月该天的几分之一):
=SUMIFS($M$2:$M$8,$K$2:$K$8,"<="&B2,$L$2:$L$8,">="&B2)*(EOMONTH(B2,0)-B2)/(EOMONTH(B2,0)-EOMONTH(B2,-1))
总数仅为(1)-(2)-(3)或
=C2-D2-E2
我将OP的两个示例的结果放在H2和H3中进行比较:在前三个有效数字中,我的结果与它们一致。
n*3.97*113%
(n*2.03*113%)+(n*5.65*119)
在所有情况下,我都将n设置为1,而忽略了比率为百分比的事实。
这显示了如何手动计算结果:
1 使用Datedif的优点:
(1)跨年度工作不同于仅使用月功能。 (2)与Iferror一起方便地确定不匹配的日期范围。
使用Datedif的缺点:
(1)这是一个未记录的功能,将来可能会撤回。 (2)在这种情况下,所有日期计算都在同一年之内,因此可以使用月份。