所以我已经被这个问题困扰了几天。我已经查看了其他一些代码,但我仍然不足。我也不是最擅长 VBA 的。
我有一份投资者名单,附有他们的付款和日期。我正在尝试运行一个命令按钮,该按钮将遍历每个帐户,找到它们相关的付款和日期,运行 XIRR 函数,然后将 XIRR 值放在每个帐户右侧的底部。这很简单,可以手工完成,但是当你有一个包含 15000 个单元格的电子表格时,它会变得乏味,我正在尝试自动化这个过程。这变得很困难,因为每个投资者都有不同的付款金额,因此找到放置 XIRR 值的正确位置也难倒了我。
这是我的电子表格的示例
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)
'Sheets("InvestorList").PivotTables.GetPivotData("Account", "x") = i
'Sheets("AccountPayments").Find ("i")
End Sub
Public Function MyXIRR(Dates As Range, Trans As Range, Balance As Double)
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
'Set the date on the "Balance" line to one day after the last transaction date
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)
End Function