我有一个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的数组,或者找出出了什么问题。
发布于 2018-04-05 16:02:27
我不知道这是否是答案,还是我只是把问题扫到了不同的地毯下,但我能够通过将dateArray
转换成字符串数组(每个字符串都是可解析的日期)来可靠地工作。
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
https://stackoverflow.com/questions/49310907
复制相似问题