VBA的加权平均汇率

时间:2016-03-19 10:08:02

标签: excel-vba conditional weighted-average vba excel

我对VBA很新,所以如果我的问题看起来非常微不足道,我很抱歉。 我很乐意在VBA中编写一个函数来帮助估算加权平均汇率(例如贷款组合)。我写了以下VBA代码:

Function WAIRS(Amount As Range, InterestRate As Range, MatchRange As Range, Match1)
WAIRS = Evaluate("=SUMPRODUCT(--(""" & MatchRange & """ = """ & Match1 & """),""" & Amount & """, """ & InterestRate & """)")      /Application.WorksheetFunction.SumIfs(Amount, MatchRange, Match1)
End Function

问题是,当我通过添加各自的函数标准在Excel中运行此函数时,我得到一个“#VALUE#”。我已经尝试了很多,但无法找出问题所在。如果你能帮助我,我将非常感激。

提前谢谢。

最佳, Jeyhun

1 个答案:

答案 0 :(得分:1)

您为Evaluate构建的字符串应该(在这种情况下)不包含文字双引号。而不是引用范围值的结果

"""" & MatchRange & """"

...你应该检索该范围的地址表示法,并使用它而不用引号括起来:

MatchRange.Address()

如果您始终如一地应用,那么公式的Evaluate部分将如下所示:

"=SUMPRODUCT(--(" & MatchRange.Address() & " = " & Match1.Address() & "), " & _
                    Amount.Address() & ", " & InterestRate.Address() & ")" 

当范围是另一张纸时:

如果您的范围在另一张纸上,则上述操作无效。在这种情况下,我建议创建此功能:

Public Function fullAddr(range As Range)
    fullAddr = "'" & range.Parent.Name & "'!" & _
                  range.Address(External:=False) 
End Function

然后在你的公式中:

"=SUMPRODUCT(--(" & fullAddr(MatchRange) & " = " & fullAddr(Match1) & "), " & _
                    fullAddr(Amount) & ", " & fullAddr(InterestRate) & ")"