【发布时间】:2019-08-19 05:28:33
【问题描述】:
我有 10 年的资产每月回报。我正在尝试创建一个函数,可以为我提供这一系列月度回报数据的年化回报。我想使用 Offset 函数转到最后一个月的回报日期,选择我选择的一组时期(3 个月前、6 个月前、12 个月前、24 个月前等),这样我就可以获得年化从结束日期返回到特定时期的一系列返回。
目标是计算过去 3 个月、6 个月、12 个月等的月平均回报率。
但是,VBA 中的 Offset 函数的参数与普通 Excel 函数中的参数不同。我想我需要使用 .Resize 函数来调整我的 Offset 函数的大小。
这是函数在 Excel 中的工作原理
=GEOMEAN(1+OFFSET($W$4,MATCH(LARGE($V$4:$V$10485,1),$V$4:$V$10485,0)-1,0,-$AJ17,1))-1
重写以便你能理解我的变量
=GEOMEAN(1+OFFSET(ref,MATCH(LARGE(Dates,1),Dates,0)-1,0,-period,1))-1
这是我目前写的代码...
Function Returns(ref As Range, Dates As Range, Period As Integer) As Variant
With Application.WorksheetFunction
Returns = .Geomean(1 + ref.Resize(-Period, 1).Offset(.Match(.Large(Dates, 1), Dates, 0) - 1, 0))-1
End With
End Function
请问有人可以帮忙吗?
【问题讨论】:
标签: excel vba resize user-defined-functions offset