0

所以我已经被这个问题困扰了几天。我已经查看了其他一些代码,但我仍然不足。我也不是最擅长 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
4

2 回答 2

1

所以我咨询了一所大学,他帮助我将代码简化为更简单、更干净的代码。我用数据运行了这段代码,效果很好。如果 XIRR 值显示不正确,则可能需要进行一些抽查,但这有助于使过程自动化。

 Private Sub CommandButton1_Click()
Dim myrow As Integer
Dim startrow As Integer
Dim valuerange As String
Dim daterange As String
Dim investor As String

myrow = 2
startrow = 2
investor = Cells(myrow, 1)
Do Until Cells(myrow, 1) = ""
    If Cells(myrow + 1, 1) <> investor Then
        'We are at the end of the list for the current investor.
        daterange = "R" & startrow & "C2:R" & myrow & "C2"
        valuerange = "R" & startrow & "C3:R" & myrow & "C3"
        Cells(myrow, 4) = "=XIRR(" & valuerange & ", " & daterange & ")"
        startrow = myrow + 1
        investor = Cells(myrow + 1, 1)
    End If
    myrow = myrow + 1
Loop
End Sub
于 2022-01-06T18:16:37.890 回答
0

我建议您尝试使用宏记录器来记录您的步骤...如果您不确定如何执行此操作,请按照以下步骤操作!

在 Excel 中:

  1. 文件
  2. 选项
  3. 自定义功能区(左面板)
  4. 从以下位置选择命令:(下拉框)选择“主选项卡”
  5. 选择开发商
  6. 点击添加>>
  7. 点击确定
  8. 现在单击顶部功能区上的开发人员选项卡
  9. 点击录制宏(左上角)
  10. 命名宏,根据需要设置快捷方式和描述
  11. 做你想让宏做的事情。
  12. 当您为一位投资者完成时点击停止记录
  13. 点击左上角的宏
  14. 选择刚刚制作的宏,点击编辑
  15. 应该有一个骨架例程来工作到你的循环中
于 2022-01-06T18:12:00.617 回答