Moin!
Also die ganze Schleifen beziehen sich ja immer auf die Zeilen E5, E6, E7 und E8 (analog natürlich auch für die anderen Spalten). Diese 4 sind ja die Startwerte aber denen, je nach Zeile, im Datensatz jeder vierte Wert addiert wird. Da es 4 Zeilen sind, nehme ich immer die Zeile der geänderten Zellen ( = target.row) und bilde den Rest zu vier. Jeder vierte Zeile hat dann den selben Rest. Das war notwendig, um bei Änderung von bspw. E25 zu sehen, welche der Startwert für die Summe ist. Um die Summe zu addieren wurde der Versatz so gebildet.
versatz = (Target.Row Mod 4)
Damit kamen dann diese Reste raus.
Zeile 5 Divison durch 4 ist Rest 1
Zeile 6 Divison durch 4 ist Rest 2
Zeile 7 Divison durch 4 ist Rest 3
Zeile 8 Divison durch 4 ist Rest 0
Um es dann nicht zu kompliziert zu machen, habe ich dann für die Summe den Versatz + 4 gerechnet. Mit den Resten von darüber kommt dann also entweder Zeile 5, 6, 7 oder 4 raus. DAs war dann meine Startzeile (außer bei 4 weil dort ja nix teth) für die Summe. Unkreativ halt nur mit l als Variabel bezeichnet.
For l = 4 + versatz To zeilesum - 1 Step 4
summe = summe + ActiveSheet.Cells(l, spalte)
Das hat für die Addition gepasst, weil ich mir hier meinen Startpunkt selber suchen konnte. Habe ja einfach die 4 genommen und zum Versatz addiert. War also flexibel.
Bei der Summe ganz unten dann, war ich nicht mehr so flexibel. Die sollte ja in die Zeile , in welcher in Spalte A das Wort Summe auftaucht. Die Zeile ist ja die, welche direkt unter dem Datenfeld kommt. Als Startpunkt, um für die 3 Summen die richtige Zeile zu finden, habe ich also die Zeile von der "Summe" (dem Wort) genommen. Das ist ja aber nun schon gleich die Zeile für die Summe ab E5. Wenn ich jetzt den Versatz vom Anfang hinzuaddiert hätte, wäre ich ja eine Zeile zu tief rausgekommen. Also habe ich die Berechnung des Versatzes leicht geändert. Nun wird noch vom REst wie am Anfang noch 1 abgezogen.
versatz = Target.Row Mod 4 - 1
Das Ergebnis sieht dann so aus.
Zeile 5 Divison durch 4 ist Rest 1 -1 = 0
Zeile 6 Divison durch 4 ist Rest 2 -1 = 1
Zeile 7 Divison durch 4 ist Rest 3 -1 = 2
Zeile 8 Divison durch 4 ist Rest 0 -1 = -1
Da in der vierten Zeile (ab E8) ja nix steht und auch nichts gemacht werden sollte, habe ich geprüft, ob der Versatz -1 ist. Wenn ja sind wir in einer 8ter Zeile und machen nix. Ansonsten wurde dann so die Summe eingetragen.
ActiveSheet.Cells(zeilesum + versatz, spalte) = summe
Und mit dem jetzt geänderten Versatz , kommen wir direkt in die 3 Zeilen für die Summe. Bei E5 wird zur zeilesum nix addiert passt, für E6 1 dazu passt usw.
Wäre zugegeben vllt. einfacher gewesen, den (schon berechneten) Versatz zu lassen und unten einfach bei der Zeile für die Summe 1 abzuziehen. Also so: zeilesum + versatz -1
Würde sogar ein paar Zeilen Code und damit Rechenzeit sparen, jetzt wo ich so drüber nachdenke vllt. sogar besser. Sieht dann so aus. (Summe berechnen und gleich eintragen mit nur einem Versatz)
If versatz = 0 Then
'also nix machen, da wir in der vierten Zeile sind
Else
For l = 4 + versatz To zeilesum - 1 Step 4
' zur summe wird also immer der Wert aus der nächsten Zeile mit Versatz 4 aus der Spalte die geändert wurde addiert
summe = summe + ActiveSheet.Cells(l, spalte)
Next l
ActiveSheet.Cells(zeilesum + versatz - 1, spalte) = summe
End If
Hoffe das lässt den letzten Codeabschnitt besser nachvollziehen und die Modifikation hier verwirrt nicht zu sehr. :-)
Schönen Sonntag noch VG
|