начинающий VBA здесь. Я работаю с кодом (показанным ниже), который по сути создает таблицу амортизации ипотеки, затем вставляет результаты в мою таблицу и затем рассчитывает IRR для одного из диапазонов. Вместо того, чтобы ссылаться на диапазон «B35: HR35» для IRR, есть ли способ сослаться на «myarray (8, i)», то есть поле «cf»? Я хотел бы сделать это, чтобы избежать необходимости вставлять кучу данных в мой лист и просто иметь IRR. Я посмотрел вокруг определения массивов и их использования в моем IRR cal c, но пока не нашел ничего, что бы работало.
Application.ScreenUpdating = False
Dim myarray(1 To 15, 0 To 500)
Dim amort As Double
Dim sb As Double
Dim defb As Double
Dim payment As Double
Dim cf As Double
gr = Range("B3") / 12 'Gross Coupon
rm = Range("B4") 'Remaining Months
sb = Range("B2") 'Starting Balance
SMM = Range("B5") 'Single Month Mortality Rate
Term = Range("B4") 'Loan Term
defb = Range("B6") 'Deferral Balance
cf = -(sb + defb) ' Cashflow
myarray(8, 0) = cf 'Place initial cashflow in eighth row, first column
myarray(9, 0) = sb 'Place starting balance in ninth row, first column
TotalMonths = rm 'Set to remaining months
rm = rm + 1 ' Add one to remaining months (needed because the amortization starts out subtracting one month for each row)
For i = 1 To TotalMonths
ShowMonth = i
MOB = MOB + 1
rm = rm - 1
payment = -Pmt(gr, rm, sb, 0)
interest = gr * sb
principal = payment - interest
prepayment = SMM * (sb - principal)
amort = principal + prepayment
sb = sb - amort
cf = amort + interest
myarray(1, i) = ShowMonth
myarray(2, i) = sb + amort
myarray(3, i) = payment
myarray(4, i) = interest
myarray(5, i) = principal
myarray(6, i) = prepayment
myarray(7, i) = amort
myarray(8, i) = cf
myarray(9, i) = sb
Next i
1000 Range("b28").Resize(9, 500).Value = myarray
Range("B7") = (1 + (Application.WorksheetFunction.IRR(Range("B35:HR35")))) ^ 12 - 1
Application.ScreenUpdating = True
End Sub