VBA 中的加权平均汇率
Weighted average rate in VBA
我对 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#”。我已经尝试了很多但无法找出问题所在。如果你能帮助我,我将不胜感激。
提前谢谢你。
最好的,
杰勋
您为 Evaluate
构建的字符串(在这种情况下)不应包含文字双引号。而不是引用范围值
的结果
"""" & MatchRange & """"
...您应该检索该范围的地址表示法,并在不将其用引号引起来的情况下使用它:
MatchRange.Address()
如果你始终如一地应用它,它会使公式的 Evaluate
部分看起来像这样:
"=SUMPRODUCT(--(" & MatchRange.Address() & " = " & Match1.Address() & "), " & _
Amount.Address() & ", " & InterestRate.Address() & ")"
当范围是另一个时sheet:
如果您的范围在另一个 sheet 上,上述方法将不起作用。在那种情况下,我建议创建这个函数:
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) & ")"
我对 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#”。我已经尝试了很多但无法找出问题所在。如果你能帮助我,我将不胜感激。
提前谢谢你。
最好的, 杰勋
您为 Evaluate
构建的字符串(在这种情况下)不应包含文字双引号。而不是引用范围值
"""" & MatchRange & """"
...您应该检索该范围的地址表示法,并在不将其用引号引起来的情况下使用它:
MatchRange.Address()
如果你始终如一地应用它,它会使公式的 Evaluate
部分看起来像这样:
"=SUMPRODUCT(--(" & MatchRange.Address() & " = " & Match1.Address() & "), " & _
Amount.Address() & ", " & InterestRate.Address() & ")"
当范围是另一个时sheet:
如果您的范围在另一个 sheet 上,上述方法将不起作用。在那种情况下,我建议创建这个函数:
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) & ")"