抱歉,如果还不清楚,或者已经问过这个问题。这有点难以解释,但是我已经大胆地提出了问题-本质上是关于缩短公式。
我正在运行一个付款计划瀑布模型。我的代码有效,但是,嗯,你知道...
IF($K2=Q$1,Assumptions!$E$56*($N2+$O2),IF(AND($K2<Q$1,$M2>Q$1),Assumptions!$E$56*$P2/$L2,0)) + IF(edate($K2,1)=Q$1,Assumptions!$F$56*($N2+$O2),IF(AND(edate($K2,1)<Q$1,edate($M2,1)>Q$1),Assumptions!$F$56*$P2/$L2,0)) + IF(edate($K2,2)=Q$1,Assumptions!$F$56*($N2+$O2),IF(AND(edate($K2,2)<Q$1,edate($M2,2)>Q$1),Assumptions!$F$56*$P2/$L2,0)) + IF(edate($K2,3)=Q$1,Assumptions!$F$56*($N2+$O2),IF(AND(edate($K2,3)<Q$1,edate($M2,3)>Q$1),Assumptions!$F$56*$P2/$L2,0)) + IF(edate($K2,4)=Q$1,Assumptions!$F$56*($N2+$O2),IF(AND(edate($K2,4)<Q$1,edate($M2,4)>Q$1),Assumptions!$F$56*$P2/$L2,0)) + IF(edate($K2,5)=Q$1,Assumptions!$F$56*($N2+$O2),IF(AND(edate($K2,5)<Q$1,edate($M2,5)>Q$1),Assumptions!$F$56*$P2/$L2,0)) + IF(edate($K2,6)=Q$1,Assumptions!$F$56*($N2+$O2),IF(AND(edate($K2,6)<Q$1,edate($M2,6)>Q$1),Assumptions!$F$56*$P2/$L2,0))
...相当长。
本质上讲,正在发生的事情是:假设是,当我们发布产品时,我们说第一个月的销售量是80%,随后每个月销售2.5%,直到我们每个销售100%。
我希望80%
和2.5%
成为此处的变量(列为Assumptions!$E$56
和Assumptions!$E$56
)。
显然有点长。但在第一次之后发现IF
条款,后续的有实际上相同,唯一的区别是数里edate(__,2)
,edate(__,3)
...
所以我的问题是-可以将此代码整理到某种for循环中吗?Python将使增加变量edate(__,i)
和求和变得非常简单i = 1:6
。
当然可以。通常情况下,循环是由模仿的Sequence(N)
,它从[1,N]垂直排列一个数字数组,这有点像您的Python范围。然后,您可以将其作为对象ArrayFormula
。
对于您的情况,您最终得到两个术语:使用$ E的初始术语,以及使用$ F的所有循环变量。我看到6个字,所以我将使用Sequence(6)
:
=IF(
$K2=Q$1,
Assumptions!$E$56*($N2+$O2),
IF(
AND(
$K2<Q$1,
$M2>Q$1
),
Assumptions!$E$56*$P2/$L2,
0
)
) + ArrayFormula(SUM(
IF(
edate($K2,SEQUENCE(6))=Q$1,
Assumptions!$F$56*($N2+$O2),
IF(
(edate($K2,SEQUENCE(6))<Q$1)*
(edate($M2,SEQUENCE(6))>Q$1),
Assumptions!$F$56*$P2/$L2,
0
)
)
))
并且,如果需要,可以使用命名范围为您的假设值命名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句