将此Excel公式转换为VBA代码(函数)

时间:2017-07-04 15:34:42

标签: excel vba excel-vba function

这是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 

注意:所有内容都已正确调暗,我所遇到的问题只是翻译实际的公式,以便它给我正确的答案。 请帮忙!我一直在盯着这个问题,以至于我可能看不到明显的解决方案。

2 个答案:

答案 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