2016-07-31 6 views
0

Это моя первая попытка написать код VBA, поэтому я знаю, что это, вероятно, довольно неудобно с некоторыми увольнениями. Я пытаюсь создать кнопку, которая определит, сколько времени потребуется, чтобы погасить общий долг, учитывая еженедельную сумму выплаты.Петля для начисления процентов на калькулятор долговых обязательств - VBA exel

У меня возникла проблема с процентными начислениями по кредитам, в которых платежи еще не применяются. Это то, что моя таблица выглядит следующим образом:

Debt calculator

И это мой код VBA с моей попыткой при начислении интереса **:

Private Sub CommandButton1_Click() 
Dim x As Single 
Dim y As Single 
Dim z As Single 
Dim Weeks As Integer 
Dim Years As Single 


Range("C3:H10").Copy Range("C13") 
y = Range("H20") 
x = Range("H13").Activate 

Do While y > 0 
    x = ActiveCell - Range("A5") 
    **Range("H14").Value = Range("E14") * ((1 + Range("G14"))^Range("A3")) 
    Range("H15").Value = Range("E15") * ((1 + Range("G15"))^Range("A3")) 
    Range("H16").Value = Range("E16") * ((1 + Range("G16"))^Range("A3")) 
    Range("H17").Value = Range("E17") * ((1 + Range("G17"))^Range("A3")) 
    Range("H18").Value = Range("E18") * ((1 + Range("G18"))^Range("A3")) 
    Range("H19").Value = Range("E19") * ((1 + Range("G19"))^Range("A3"))** 
    If x < 0 And ActiveCell.Value = 0 Then 
    ElseIf x < 0 Then 
     ActiveCell.Value = 0 
     ActiveCell.Offset(0, -3).Value = 0 
     ActiveCell.Offset(1, 0).Activate 
     ActiveCell.Value = ActiveCell + x 
     x = ActiveCell 
    Else 
     ActiveCell.Value = x 
     ActiveCell.Offset(0, -3).Value = x 
     ActiveCell.Value = ActiveCell.Offset(0, -3).Value * ((ActiveCell.Offset(0, -1).Value + 1)^Range("A3")) 
     x = ActiveCell 
    End If 
    y = Range("H20") 
    Weeks = Weeks + 1 
Loop 

z = Range("H20") 
Years = Round((Weeks/52.14), 2) 
Range("C13:H20").ClearContents 
MsgBox ("It will take " & Years & " years to pay off your debt.") 

Worksheets("Investment Income").Range("B7").Value = Years 
Worksheets("Investment Income").Range("B8").Value = Abs(z) 


End Sub 

Любых мысли к этому вопросу конкретно и/или улучшения, чтобы сделать код более эффективным?

ответ