在VBA中创建输入变量(真正基本的VBA)

时间:2014-04-22 21:37:51

标签: vba

我目前正在开发一个为excel创建NPV功能的项目(基本上,重新创建已经内置的excel功能)..我的VBA体验有限(基本上为0)

我的问题是如何设置该功能,以便它允许您指向并单击单元格...例如,如果我输入我的函数名称myNPV ... excel会说myNPV(rate,value1 ,value2 ....)你可以为这些单元格输入数据......显然我的代码必须反映和使用值输入

1 个答案:

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