簡體   English   中英

循環瀏覽投資者列表並計算每個投資者的 XIRR 以實現流程自動化

[英]Cycle through a list of Investors and calculate the XIRR for each one to automate process

所以我已經被這個問題困擾了幾天。 我已經查看了其他一些代碼,但我仍然不足。 我在 VBA 方面也不是最好的。

我有一份投資者名單,附有他們的付款和日期。 我正在嘗試運行一個命令按鈕,該按鈕將通過每個帳戶 go,找到它們的相關付款和日期,運行 XIRR function,然后將 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

所以我咨詢了一所大學,他幫助我將代碼簡化為更簡單、更干凈的代碼。 我用數據運行了這段代碼,效果很好。 如果 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

我建議嘗試使用宏記錄器。 有很多次,當我可以記錄我的步驟時,我感到沮喪並嘗試到處尋找解決方案......如果你不確定如何做到這一點,這里是步驟!

在 excel 中:

  1. 文件
  2. 選項
  3. 自定義功能區(左面板)
  4. 從以下位置選擇命令:(dropbox)select“主選項卡”
  5. Select 開發人員
  6. 點擊添加>>
  7. 點擊確定
  8. 現在單擊頂部功能區上的開發人員選項卡
  9. 點擊錄制宏(左上角)
  10. 命名宏,根據需要設置快捷方式和描述
  11. 做你想讓宏做的事情。
  12. 當您為一位投資者完成時單擊停止記錄
  13. 點擊左上角的宏
  14. select 你剛剛創建的宏然后點擊編輯
  15. 應該有一個骨架例程來工作到你的循環中

希望這會有所幫助:快樂編碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM