我的任务是创建一个风险价值函数,该函数可以引用一个范围和几个单元格中的数据。代码是:
Option Explicit
Function VaR(returns As Range, days, confidenceinterval, portfoliovalue)
VaR = (Application.WorksheetFunction.Average(returns) * Application.WorksheetFunction.SQRT(days)) - (Application.WorksheetFunction.NormSDist(confidenceinterval) * (Application.WorksheetFunction.StDev_S(returns) * Application.WorksheetFunction.SQRT(days))) * portfoliovalue
End Function
Returns 是一个返回范围,而其他的只是单元格中的值。
如您所见,我只是复制了我的 excel 测试公式,在每个参数之前添加了 application.worksheet。但是,虽然我的测试公式有效,但以 VBA 应识别的格式翻译的相同代码却无效。
原来的公式是
=(AVERAGE(returns)*SQRT(days))-(NORMSDIST(confidenceinterval)*(STDEV.S(returns)*SQRT(days)))*portfoliovalue
任何帮助都会非常好!
先感谢您!
你有两个问题。首先,您的函数名称VaR
与 Excel 的内置VAR
(方差)函数冲突。二是没有Application.WorksheetFunction.SQRT
功能;改用 VBA Sqr
。这应该有效:
Function ValueAtRisk(returns As Range, days, confidenceinterval, portfoliovalue)
With Application.WorksheetFunction
ValueAtRisk = (.Average(returns) * Sqr(days)) - (.NormSDist(confidenceinterval) * (.StDev_S(returns) * Sqr(days))) * portfoliovalue
End With
End Function
希望有帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句