首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将VBA代码中的Resize函数和offset函数用于Excel中的用户定义函数

如何将VBA代码中的Resize函数和offset函数用于Excel中的用户定义函数
EN

Stack Overflow用户
提问于 2019-08-19 13:28:34
回答 1查看 105关注 0票数 0

我有一项资产10年的月度回报。我正在尝试创建一个函数,该函数可以给出这一系列月度回报数据的年化回报。我想使用Offset函数转到最后一个月退货日期,选择一个我选择的期间数组(3个月、6个月、12个月、24个月等),这样我就可以获得从结束日期到特定期间的一系列回报的年化回报。

目标是计算最近3个月,6个月,12个月等的月平均月度回报。

但是,VBA中Offset函数的参数与常规Excel函数中的参数不同。我认为我需要使用.Resize函数来调整偏移量函数的大小。

下面是该函数在Excel中的工作方式

代码语言:javascript
复制
=GEOMEAN(1+OFFSET($W$4,MATCH(LARGE($V$4:$V$10485,1),$V$4:$V$10485,0)-1,0,-$AJ17,1))-1

重写,以便您可以理解我的变量

代码语言:javascript
复制
=GEOMEAN(1+OFFSET(ref,MATCH(LARGE(Dates,1),Dates,0)-1,0,-period,1))-1

这是我到目前为止写的代码……

代码语言:javascript
复制
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

有人能帮帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-26 16:45:26

好的,我找出了我的一些错误。

A)我错误地声明了变量。

B)我使用了一个负数来调整大小,因为我想让函数转到序列的末尾并返回计数(以获得6个月。12个月,24个月的回报)。这不起作用。

作为另一种选择,我使用LARGE来查找第n个最大的日期,并选择该点下的数组。

请参阅下面的代码。

函数AnnReturns(引用作为变量,日期作为变量,句点作为变量,M作为变量)作为变量

代码语言:javascript
复制
With Application.WorksheetFunction


    AnnReturns = .FVSchedule(1, (Ref.Offset(.Match(.Large(Dates, Period), Dates, 0) - 1, 0).Resize(Period, 1))) ^ (1 / M) - 1


End With

End函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57550921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档