这是Excel中我试图转换为VBA代码的公式:
=IFERROR(IF(effDate>curDate,0,IF((curDate-effDate+1)>nDays,nDays*(nSpend/365),((nSpend/365)*(curDate-effDate+1))-IF((curDate-effDate+1)-nDays>0,nSpend/365,0))),0)
为了检查工作目的,这里是每个变量的值:
effDate: 1/1/17 (dimmed as value)
curDate: 3/31/17 (dimmed as value)
nDays: 60
nSpend: 1600
正确答案:263
我试着让它工作两天了,我用大约一百种不同的方式重新输入,但没有一种方法有效。代码可能适用于一个单元格,但它不能正确计算其他单元格。或者它根本不起作用。这是我之前做的一个例子(函数的名称是APFcst):
If effDate > curDate then
APFcst = 0
Exit Function
End if
If (curDate - effDate + 1) > nDays then
APFcst = nDays * (nSpend / 365)
Else
val1 = (nSpend / 365) * (curDate - effDatea + 1)
end if
if (curDate - effDate + 1) - nDays > 0 then
val2 = nSpend / 365
else
val2 = 0
end if
APFcst = val1 - val2
Exit Function
End if
注意:所有内容都已正确调暗,我所遇到的问题只是翻译实际的公式,以便它给我正确的答案。 请帮忙!我一直在盯着这个问题,以至于我可能看不到明显的解决方案。
答案 0 :(得分:1)
像这样的东西,也许可以使用IIF来缩短它的触摸速度,也许更有效地使用{{1}},我稍后会再看看。我还没有正确测试。
{{1}}
答案 1 :(得分:1)
在注意到公式中的最后一次IF
检查是多余的之后,这是对等式的简化:
Function xAPFcst(effDate, curDate, nSpend, nDays) As double
xAPFcst = IIf(effDate > curDate, 0, (nSpend / 365) * Application.Min(nDays, curDate - effDate + 1))
End function