我有一项资产10年的月度回报。我正在尝试创建一个函数,该函数可以给出这一系列月度回报数据的年化回报。我想使用Offset函数转到最后一个月退货日期,选择一个我选择的期间数组(3个月、6个月、12个月、24个月等),这样我就可以获得从结束日期到特定期间的一系列回报的年化回报。
目标是计算最近3个月,6个月,12个月等的月平均月度回报。
但是,VBA中Offset函数的参数与常规Excel函数中的参数不同。我认为我需要使用.Resize函数来调整偏移量函数的大小。
下面是该函数在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有人能帮帮忙吗?
发布于 2019-08-26 16:45:26
好的,我找出了我的一些错误。
A)我错误地声明了变量。
B)我使用了一个负数来调整大小,因为我想让函数转到序列的末尾并返回计数(以获得6个月。12个月,24个月的回报)。这不起作用。
作为另一种选择,我使用LARGE来查找第n个最大的日期,并选择该点下的数组。
请参阅下面的代码。
函数AnnReturns(引用作为变量,日期作为变量,句点作为变量,M作为变量)作为变量
With Application.WorksheetFunction
AnnReturns = .FVSchedule(1, (Ref.Offset(.Match(.Large(Dates, Period), Dates, 0) - 1, 0).Resize(Period, 1))) ^ (1 / M) - 1
End WithEnd函数
https://stackoverflow.com/questions/57550921
复制相似问题