所以我已經被這個問題困擾了幾天。我已經查看了其他一些代碼,但我仍然不足。我也不是最擅長 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
uj5u.com熱心網友回復:
所以我咨詢了一所大學,他幫助我將代碼簡化為更簡單、更干凈的代碼。我用資料運行了這段代碼,效果很好。如果 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
uj5u.com熱心網友回復:
我建議您嘗試使用宏記錄器來記錄您的步驟...如果您不確定如何執行此操作,請按照以下步驟操作!
在 Excel 中:
- 檔案
- 選項
- 自定義功能區(左面板)
- 從以下位置選擇命令:(下拉框)選擇“主選項卡”
- 選擇開發商
- 點擊添加>>
- 點擊確定
- 現在單擊頂部功能區上的開發人員選項卡
- 點擊錄制宏(左上角)
- 命名宏,根據需要設定快捷方式和描述
- 做你想讓宏做的事情。
- 當您為一位投資者完成時點擊停止記錄
- 點擊左上角的宏
- 選擇剛剛制作的宏,點擊編輯
- 應該有一個骨架例程來作業到你的回圈中
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407583.html
標籤:
