我目前正在开发一个为excel创建NPV功能的项目(基本上,重新创建已经内置的excel功能)..我的VBA体验有限(基本上为0)
我的问题是如何设置该功能,以便它允许您指向并单击单元格...例如,如果我输入我的函数名称myNPV ... excel会说myNPV(rate,value1 ,value2 ....)你可以为这些单元格输入数据......显然我的代码必须反映和使用值输入
答案 0 :(得分:0)
您正在寻找任意大小的参数ParamArray args()
。这会将包含所有后续参数的数组传递给函数。
使用paramarray,你应该正确地覆盖传入多个单元格范围的情况,如“A2:A5”,而不是假设它将作为“A2,A3,A4,A5”传递。他们需要不同的治疗。以下处理此事。
用于例如像:
Public Function myNPV(rate, ParamArray cashflows()) As Variant
Dim npv As Double
Dim arg, ele
Dim i As Long
For Each arg In cashflows
If TypeOf arg Is Range Or VarType(arg) > vbArray Then
For Each ele In arg
npv = npv + ele / (1 + rate) ^ i
i = i + 1
Next ele
Else
npv = npv + arg / (1 + rate) ^ i
i = i + 1
End If
Next arg
myNPV = npv
End Function
这假定每个期间开始时的现金流量。对于每个期间结束时的现金流量:1)将回答折扣回(1 +利率)或2)将函数调整为以i = 1而不是i = 0开始。
编辑:
示例(FYI Excel NPV假设期末现金流量):
=myNPV(5%,-100,10,10,110) -> 13.62 (same as Excel NPV * 1.05)
=myNPV(5%,-100,10,10,110)/1.05 -> 12.97 (same as Excel NPV)
=myNPV(A1,B1:E5)
=myNPV(A1,B1:E5,G1:H20) etc