2016-07-31 51 views
0

Dies ist mein erster Versuch, VBA-Code zu schreiben, so dass ich weiß, dass es wahrscheinlich ziemlich klobig mit einigen Redundanzen ist. Ich versuche, einen Button zu entwerfen, der bestimmt, wie lange es dauern wird, um die Gesamtschuld abzubezahlen, bei einer wöchentlichen Auszahlungssumme.Loop für Zinsabgrenzung auf einem Schuldenrechner - VBA exel

Worauf ich ein Problem habe, sind die Zinsabgrenzungen für die Kredite, wo die Zahlungen noch nicht angewendet werden. Dies ist, was meine Tabelle wie folgt aussieht:

Debt calculator

Und das ist mein VBA-Code mit meinem Versuch ist das Interesse an ** bei anfallenden:

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 

Irgendwelche Gedanken zu diesem Thema gesagt und/oder Verbesserungen, um Code effizienter zu machen?

Antwort