For - Next - Schleife rückwärts
06.10.2017 22:18:29
Bernd
mal wieder benötige als Anfänger eure Mithilfe.
Ich habe per csv-Datei einen Aktienkurs eingefügt:
1. In den Zeilen rechts der Tabelle möchte ich den EMA (eine Art gleitenden Durchschnitt) berechnen.
Die Formel hierfür lautet: EMAt = EMAt-1 +(SF*(Ct-EMAt-1)), also der EMA von heute ist gleich der EMA von gestern + (einem Glättungsfaktor - (EMA von gestern)).
Folgendes habe ich nun programmiert (Auf Anfängerfehler darf gerne hingewiesen werden):
Sub Test()
'Berechnung EMA
Dim EMA_Tage As Integer
Dim Anfang As Integer
Dim Ende As Integer
Dim zaehler1 As Integer
Dim m As Long
EMA_Tage = 5
Anfang = 4
Ende = Cells(Rows.Count, 1).End(xlUp).Row
Hier werden die Variablen definiert.EMA_Tage ist der Zeitraum der Berechnung des gleitenden Durchschnittes
Anfang ist der Beginn der Tabelle
Ende ist die Ermittlung der letzten Reihe mit Inhalt
Range("H3").Value = "EMA5"
H3 bekommt eine Überschrift.
'Formel laut Internet: EMAt = EMAt-1 +(SF*(Ct-EMAt-1))
Cells(Ende, 5).Copy Cells(Ende, 8)
Der Schlusskurs der letzten Zeile wird kopiert, ist sozusagen der Anfangswert der Berechnung.Und nun soll in die vorletzte Zeile die obige EMA Formel geschrieben werden. Diese habe ich mangels Erfahrung von Hand ins Excel geschrieben, ein Makro währenddessen aufgenommen und somit doe unten stehende Formel erhalten. Diese Formel soll nun nach oben "gezogen" werden bis in die erste Reihe.
For m = Ende To Anfang + 1 Step -1
Cells(Ende - 1 - Ende + m, 8).FormulaR1C1 = "=R[1]C+(0.8*(RC[-3]-R[1]C))"
Next m
End Sub
So wie sie jetzt ist funktionierts, aber nur weil ich an allen möglichen Stellen mit +1 bzw. -1 solange nachgebessert habe, bis das rauskam was ich wollte... :-DWie programmier ich das richtig? (Weil manchmal Range und manchmal Cells steht... da ist viel ausm Internet zusammenkopiert :-D )
2. In der obigen Formel steht in der Klammer "0,8". Eigentlich sollte dort die Variable "SF" stehen, die dem Glättungsfaktor entspricht. Für diesen gibt es eine einfache Formel. Aber mit der Variable SF funktioniert die Formel nicht mehr.... Wieso? :)
3. In der Spalte H rechne ich ja oben mit einem EMA_Tage = 5 und einem Glättungsfaktor von 0,8 (oder so). In Spalte I möchte ich mit EMA_Tage = 10 und anderem Glättungsfaktor rechnen. In Spalte J mit EMA_Tage = 20 und so weiter und so fort. Wie kann ich das vereinfachen, dass ich nur schreiben Spalte = J und EMA_Tage = 20? Nicht dass ich jedes mal die gleiche Formel einprogrammiere?
Vielen Dank für Eure Hilfe vorab! :)