【发布时间】:2017-07-05 17:20:52
【问题描述】:
这是我试图转换为 VBA 代码的 Excel 中的公式:
=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
注意:一切都变暗了,我遇到的问题只是翻译实际的公式,所以它会给我正确的答案。 请帮忙!我已经盯着这个看很久了,我可能看不到明显的解决方案。
【问题讨论】:
-
为什么不试试直接翻译呢?
If()(工作表函数)对应VBA函数IIF(),IFERROR可以加上Application.WorksheetFunction.前缀,直接在Excel VBA中使用。 -
APFcst = iff(effDate > curDate, 0, IIf((curDate - effDate + 1) > nDays, nDays * (nSpend / 365), ((nSpend / 365) * (curDate - effDate + 1)) - IIf((curDate - effDate + 1) - nDays > 0, nSpend / 365, 0))) 这是我尝试过的,但它给了我一个错误(子/函数未定义)。我的编码技能非常初学者,所以我不知道如何修复错误。