首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用VBA脚本中的XIRR

如何使用VBA脚本中的XIRR
EN

Stack Overflow用户
提问于 2018-03-15 23:28:54
回答 1查看 2.7K关注 0票数 2

我有一个Excel电子表格,它显示银行账户中的存款,并定期检查余额并将其放入电子表格中。我想做一个宏来计算迄今的等值回报(也就是说,如果我有这个存款序列,那么帐户余额是$X,那么相应的利率是Y%)。例如,我可能有:

代码语言:javascript
运行
复制
 1-Jan-2010  $100
22-Apr-2011  $200
14-Feb-2012        $310
28-Aug-2013  $500
 9-May-2014        $790  # account lost value!

我可以将日期和存款放入函数(以及结束余额),但我无法让XIRR正常工作。我知道这是一种丑陋的VBA (不是我知道的一种语言),但下面是我所拥有的:

代码语言:javascript
运行
复制
Public Function MyXIRR(Dates As Range, Trans As Range, Balance As Double)
    Dim i As Integer
    Dim x As Double
    Dim dateArray() As Date
    Dim valArray() As Double

    ReDim dateArray(Dates.Count + 1)
    ReDim valArray(Trans.Count + 1)

    For i = 1 To Dates.Count
        dateArray(i - 1) = Dates.Item(i)
        Next i

    For i = 1 To Trans.Count
        valArray(i - 1) = Trans.Item(i)
        Next i

    dateArray(Dates.Count) = DateAdd("d", 1, Dates.Item(Dates.Count))
    valArray(Trans.Count) = -1 * Balance

    For i = 0 To Dates.Count
        dateArray(i) = Format(dateArray(i), "dd/mm/yyyy")
        Next i

    MsgBox ("Hello")
    x = Application.Xirr(valArray, dateArray, 0.01)
    MsgBox (x)
'    MyXIRR = Dates.Count * 100 + Trans.Count
'    MyXIRR = dateArray(6)
    MyXIRR = valArray(3)
End Function

(最后的注释和MsgBox是我试图弄清楚发生了什么的各种尝试;理想情况下,我应该在一个单元格中有一个公式:=MyXIRR( A2:A6, B2:B6, C6 ),它将返回等价的利率。)

我认为,当我调用Application.Xirr时,我得到了一个#VALUE异常(错误?)但是我不知道如何调试它,检查传递给Xirr的数组,或者找出出了什么问题。

EN

回答 1

Stack Overflow用户

发布于 2018-04-05 16:02:27

我不知道这是否是答案,还是我只是把问题扫到了不同的地毯下,但我能够通过将dateArray转换成字符串数组(每个字符串都是可解析的日期)来可靠地工作。

代码语言:javascript
运行
复制
Public Function MyXIRR(Dates As Range, Trans As Range, Balance As Double)
    Dim i As Integer
    Dim x As Double
    Dim dateArray() As Date
    Dim dateStrings() As String
    Dim valArray() As Double

    ReDim dateArray(Dates.Count)
    ReDim valArray(Trans.Count)
    ReDim dateStrings(Dates.Count)

    For i = 1 To Dates.Count
        dateArray(i - 1) = Dates.Item(i).Value
        Next i

    For i = 1 To Trans.Count
        valArray(i - 1) = Trans.Item(i).Value
        Next i

    dateArray(Dates.Count) = DateAdd("d", 1, Dates.Item(Dates.Count))
    valArray(Trans.Count) = -1 * Balance

    For i = 0 To Dates.Count
        dateStrings(i) = Format(dateArray(i), "mm/dd/yyyy")
        Next i

    MyXIRR = Application.WorksheetFunction.Xirr(valArray, dateStrings, 0.01)
End Function
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49310907

复制
相关文章

相似问题

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