如何使用VBA脚本中的XIRR

时间:2018-03-15 23:28:55

标签: excel vba excel-vba

我有一个Excel电子表格,显示存款到银行帐户,另外我会定期检查余额并将其存入电子表格。我想制作一个计算最新等价回报的宏(,如果我有这个存款序列,然后账户余额是$ X,那么相当于兴趣是Y%)。例如,我可能有:

 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(不是我所知的语言),但这里有我所拥有的:

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的数组,或找出错误。

Screenshot of Spreadsheet

Screenshot from Debugger

1 个答案:

答案 0 :(得分:0)

我不知道这是否是答案,或者我是否只是在不同的地毯下扫描问题,但我能够通过转换{{1}来使我的功能可靠地工作到一个字符串数组,其中每个String都是一个可解析的日期。

dateArray