【发布时间】:2020-07-13 20:51:11
【问题描述】:
我有 2 列 Start Date 和 End Date?,我想根据它们跨越的相关年份计算这些日期的百分比,以便在各自的单独列中为每年分配适当的百分比。
我的预期输出是:
Start End Date? Year 1 - 2020 Year 2 - 2021 Year 3 - 2022
1/1/2020 12/30/2022 100% 100% 100%
1/1/2020 6/30/2021 100% 50% 0%
6/1/2021 0% 50% 100%
6/1/2021 6/30/2022 0% 50% 50%
1/1/2021 6/30/2021 0% 50% 0%
100% 100% 100%
这假设如果开始日期为空白,则该项目是连续的,并且应该是所有年份的 100%,如果有一个为空白的结束日期,则该项目将在该年之后的每年 100%开始。开始日期为空白时,结束日期始终为空白。
目前我正在使用一个非常长的 IFS 公式,分别比较开始日期 Column A 和结束日期 Column B 与每年 Column AP 和 Column AQ 的开始日期和结束日期
=IFS(OR(ISBLANK($B8),$B8=AP$1,AND($B8<AP$1,$C8>=AQ$1),AND($B8<AP$1,ISBLANK($C8))),100%,OR($C8<AP$1,$B8>AQ$1),0%,OR(AND($B8>AP$1,$C8>AQ$1),AND($B8>AP$1,$C8<AQ$1),AND($B8>AP$1,ISBLANK($C8)),AND($B8<AP$1,$C8<AQ$1)),(IF($B8<AP$1,DATEDIF(AP$1,$C8,"d")/DATEDIF(AP$1,AQ$1,"d"),DATEDIF($B8,$C8,"d")/DATEDIF(AP$1,AQ$1,"d"))))
我构建这个庞大的 IFS 公式的方法是认为每年有三个结果:100%、0% 或介于两者之间的百分比。前两个 sub-if 似乎可以很好地捕获 100% 的 OR(ISBLANK($B18),$B18=AP$1,AND($B18<AP$1,$C18>=AQ$1),AND($B18<AP$1,ISBLANK($C18))),100%
或0%的
OR($C18<AP$1,$B18>AQ$1),0%
但是我为捕捉中间百分比而构建的公式部分似乎并没有捕捉到所有情况,例如,如果有空白......
OR(AND($B23>AP$1,$C23>AQ$1),AND($B23>AP$1,$C23<AQ$1),AND($B23>AP$1,ISBLANK($C23)),AND($B23<AP$1,$C23<AQ$1)),(IF($B23<AP$1,DATEDIF(AP$1,$C23,"d")/DATEDIF(AP$1,AQ$1,"d"),DATEDIF($B23,$C23,"d")/DATEDIF(AP$1,AQ$1,"d"))))
我也觉得好像必须有某种方法可以在没有令人作呕的长 IFS 公式的情况下做到这一点......
【问题讨论】:
-
您愿意探索 Excel VBA 吗?它比使用“令人作呕的长”公式更易于维护。 :-)
标签: excel excel-formula