Thema Datum  Von Nutzer Rating
Antwort
02.07.2016 20:59:45 David
NotSolved
02.07.2016 21:58:28 Gast46573
NotSolved
02.07.2016 22:15:12 David
NotSolved
03.07.2016 11:21:09 David
Solved
03.07.2016 12:39:56 David
NotSolved
03.07.2016 12:43:16 David
NotSolved
03.07.2016 14:00:25 Gast47093
NotSolved
04.07.2016 18:23:41 David
NotSolved
04.07.2016 18:59:35 Gast37512
NotSolved
04.07.2016 19:53:31 David
NotSolved
04.07.2016 19:55:05 David
NotSolved
04.07.2016 22:07:06 Gast8341
NotSolved
05.07.2016 08:20:00 David
NotSolved
05.07.2016 08:39:39 David
NotSolved
05.07.2016 14:15:14 Gast11023
NotSolved
05.07.2016 15:36:33 David
NotSolved
05.07.2016 16:01:36 Gast57337
NotSolved
05.07.2016 16:16:05 David
NotSolved
05.07.2016 20:31:06 Gast54830
NotSolved
05.07.2016 20:56:15 David
NotSolved
05.07.2016 21:35:14 Gast20964
NotSolved
05.07.2016 22:53:49 David
NotSolved
05.07.2016 22:54:49 David
NotSolved
05.07.2016 23:12:48 Gast89092
NotSolved
06.07.2016 07:47:45 David
NotSolved
06.07.2016 09:16:19 Gast62569
NotSolved
06.07.2016 09:23:44 David
NotSolved
06.07.2016 19:13:39 David
NotSolved
06.07.2016 19:29:48 Gast26981
NotSolved
06.07.2016 19:49:42 David
NotSolved
06.07.2016 20:00:07 David
NotSolved
06.07.2016 20:03:55 David
NotSolved
06.07.2016 20:19:51 Gast80888
NotSolved
06.07.2016 20:22:56 David
NotSolved
06.07.2016 20:21:41 David
NotSolved
06.07.2016 20:30:19 David
NotSolved
06.07.2016 20:32:24 David
NotSolved
06.07.2016 20:35:49 David
NotSolved
06.07.2016 20:45:07 David
NotSolved
06.07.2016 20:53:25 David
NotSolved
06.07.2016 22:00:32 Gast41758
NotSolved
07.07.2016 01:46:53 Gast21922
NotSolved
07.07.2016 08:11:14 David
NotSolved
07.07.2016 09:31:03 Gast98925
NotSolved
07.07.2016 09:42:47 David
NotSolved
07.07.2016 18:27:22 David
NotSolved
07.07.2016 19:17:22 Gast95680
NotSolved
07.07.2016 19:55:19 David
NotSolved
07.07.2016 19:56:14 David
NotSolved
07.07.2016 21:57:48 Gast58517
NotSolved
07.07.2016 23:13:14 David
NotSolved
07.07.2016 23:18:34 David
NotSolved
07.07.2016 23:28:41 David
NotSolved
07.07.2016 23:45:40 David
NotSolved
08.07.2016 07:45:22 Gast41963
NotSolved
08.07.2016 08:54:12 David
NotSolved
08.07.2016 18:47:16 David
NotSolved
Blau Worksheet_Change hier notwendig? - "Dynamische Summenbildung"
08.07.2016 22:11:02 Gast54508
NotSolved
09.07.2016 10:33:15 David
NotSolved
09.07.2016 11:34:37 Gast73060
NotSolved
10.07.2016 14:13:32 David
NotSolved
10.07.2016 14:48:56 Gast40854
NotSolved
10.07.2016 15:07:10 David
NotSolved

Ansicht des Beitrags:
Von:
Gast54508
Datum:
08.07.2016 22:11:02
Views:
379
Rating: Antwort:
  Ja
Thema:
Worksheet_Change hier notwendig? - "Dynamische Summenbildung"

Moin! Kein Problem. Also die Sub heißt ja wie folgt:

Private Sub Worksheet_Change(ByVal Target As Range)

Das heißt, wenn sich was ändert springt sie an. Der Sub wird dabei der Bereich der sich geändert hat übergeben. Der Bereich ist Target. Da der Code am Anfang abfragt, ob target.count = 1 ist (also nur eine Zelle) wird sichergestellt, dass es nicht ein Bereich ist. Das ist wichtig für die weiteren Bezüge auf Target.

Das mod steht für Modulo und bedeutet Division mit Rest. In VBA gibt dies den Rest an der übrig bleibt. 15 mod 5 ist also 0 das 15 durch 5 keinen Rest hat. 14 mod 3 ist 2 da 14 = 3 * 4 +2 ist.

Soweit zur Einleitung. Jetzt bnen bissl was zum Lesen.

'für den weiteren Code von Bedeutung. Du startest in Zeile 5 und hast eine Überlappung von 4. Deswegen wird auch 5, 9, 13 usw. addiert.
'die ersten Zeilen mit untersch. WErten sind also ( schon mal mit den Resten)
'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
'jetzt geht es zwar weiter, es beginnt aber ein neuer Zyklus von dem viererpack an Werten, die Reste sind dann wieder die selben

'Summe in Spalte D
'da der vierte Wert unten nicht summiert werden soll und auch nicht in D, braucht dort nix eingtragen werden. dei vierte Reihe ist wenn de Rest 0 ist.
'wenn als die Reihe als Rest mehr als 0 hat, wird in der Reihe der Änderunge = target.row (die Reihe der geänderten Zeile) die Summe von der Zellen in
'Spalte 5 = E bis 32 = EF :-) gerechnet
If (Target.Row Mod 4) <> 0 Then Cells(Target.Row, 4).Value = Application.WorksheetFunction.Sum(Range(Cells(Target.Row, 5), Cells(Target.Row, 32)))
   
'jetzt summieren
'jetzt die Spalte summieren
'Spalte nimmt den Werte der Spalte der geänderten Zellen auf, wird dann für das Eintragungen der Summe unten genutzt
spalte = Target.Column
               
'so hier mal die Summe auf 0 setzen, damit nicht da noch was falsches drin steht
summe = 0
                    
'jeden vierten wert addieren
'jetzt wird noch ein Versatz berechnet. Das ist eigentlich der Rest von der Division oben. Den nutze ich um dann unten durch alle Zeilen zu gehen
' und den jeweiligen ersten, zweiten bzw. dritten zu addieren
versatz = (Target.Row Mod 4)
'versatz 0 ist immer beim vierten WErt in Zeile 8 beginnend dort nix machen, deshalb ist der Zweig von if then leer
If versatz = 0 Then
'also nix machen, da wir in der vierten Zeile sind
Else
'einer der 3 anderen Zeilen
' 4 + versatz ergibt die richtige Anfangszeile
' bspw. Zeile 5 ergibt Rest 1 plus 4 also 5 als Startwert, dann wird in jedem Durchlauf immer 4 addiert - gilt durch step 4
' kanst das ja mal für Zeile 6 beginnend durchrechnen
' das ganze bis zeilesum -1 ; zeilesum ist die Zeile mit dem Wort Summe in A, in der Zeile wird ja die erste Summe eingetragen
' deshalb gehen deine Daten bis eine Zeile davor , also -1, ist das erreicht, bricht die Summe ab

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
End If

'jetzt eintragen
' dazu wird aber ein andere Versatz gebraucht. Wir wissen ja, dass zeilesum die Zeile ist, in der die erste Summe eingetragen wird
'die zweite Summe dann eins tiefer.
' bei der Resten wie oben past dass nicht. Also ziehen wir eins ab.
'somit gilt bei den Zeilen von Spalte 5 beginnend einen Versat 0
' ab 6 beginnend Versatz 1 usw.
' Zeile ab 8 hat -1, da soll ja nix eingetragen werden.
' der GEdanke ist, zur zeilesum den neuen Versatz zu addieren und dann in der zeile zu sein, wo die Summe hi nsoll
' also versatz berechnen
versatz = (Target.Row Mod 4 - 1)
' wenn -1 dann nix ,ist ja immer die 4te Zeile
If versatz = -1 Then
Else
'jetzt also eintragen, zeilesum + versatz ergibt bei R5 beginend also zeilesum +0 = zeilesum, da wollte wir ja hin
' bie E6 beginnend ist versatz 1 also zeilesum +1 die nächste Zeile past auch , spalte ist immer noch die Spalte der Änderung
'also in  die Zelle die SUmme eintragen
    ActiveSheet.Cells(zeilesum + versatz, spalte) = summe
End If
             
'Gesamtsumme aber in Spalte B
' jetzt in Spalte B eins unter der zeilesum ddie Summe aus Spalte 5 eintragen. Dabei wird ab Zeile 5 bis eine Zeile vor zeilesum addiert, das war jader der Beriech der DAten
ActiveSheet.Cells(zeilesum + 1, 2) = Application.WorksheetFunction.Sum(Range(Cells(5, 4), Cells(zeilesum - 1, 4)))

Ich hoffe das war verständlich. Ansonsten einfach nochmal fragen, wenn was unklar ist. An Stelle von dem mod Wert, könnte man das auch mit Versatz machen und dort immer 4 dazuaddieren. Finde das so aber immer schöner. VG


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
02.07.2016 20:59:45 David
NotSolved
02.07.2016 21:58:28 Gast46573
NotSolved
02.07.2016 22:15:12 David
NotSolved
03.07.2016 11:21:09 David
Solved
03.07.2016 12:39:56 David
NotSolved
03.07.2016 12:43:16 David
NotSolved
03.07.2016 14:00:25 Gast47093
NotSolved
04.07.2016 18:23:41 David
NotSolved
04.07.2016 18:59:35 Gast37512
NotSolved
04.07.2016 19:53:31 David
NotSolved
04.07.2016 19:55:05 David
NotSolved
04.07.2016 22:07:06 Gast8341
NotSolved
05.07.2016 08:20:00 David
NotSolved
05.07.2016 08:39:39 David
NotSolved
05.07.2016 14:15:14 Gast11023
NotSolved
05.07.2016 15:36:33 David
NotSolved
05.07.2016 16:01:36 Gast57337
NotSolved
05.07.2016 16:16:05 David
NotSolved
05.07.2016 20:31:06 Gast54830
NotSolved
05.07.2016 20:56:15 David
NotSolved
05.07.2016 21:35:14 Gast20964
NotSolved
05.07.2016 22:53:49 David
NotSolved
05.07.2016 22:54:49 David
NotSolved
05.07.2016 23:12:48 Gast89092
NotSolved
06.07.2016 07:47:45 David
NotSolved
06.07.2016 09:16:19 Gast62569
NotSolved
06.07.2016 09:23:44 David
NotSolved
06.07.2016 19:13:39 David
NotSolved
06.07.2016 19:29:48 Gast26981
NotSolved
06.07.2016 19:49:42 David
NotSolved
06.07.2016 20:00:07 David
NotSolved
06.07.2016 20:03:55 David
NotSolved
06.07.2016 20:19:51 Gast80888
NotSolved
06.07.2016 20:22:56 David
NotSolved
06.07.2016 20:21:41 David
NotSolved
06.07.2016 20:30:19 David
NotSolved
06.07.2016 20:32:24 David
NotSolved
06.07.2016 20:35:49 David
NotSolved
06.07.2016 20:45:07 David
NotSolved
06.07.2016 20:53:25 David
NotSolved
06.07.2016 22:00:32 Gast41758
NotSolved
07.07.2016 01:46:53 Gast21922
NotSolved
07.07.2016 08:11:14 David
NotSolved
07.07.2016 09:31:03 Gast98925
NotSolved
07.07.2016 09:42:47 David
NotSolved
07.07.2016 18:27:22 David
NotSolved
07.07.2016 19:17:22 Gast95680
NotSolved
07.07.2016 19:55:19 David
NotSolved
07.07.2016 19:56:14 David
NotSolved
07.07.2016 21:57:48 Gast58517
NotSolved
07.07.2016 23:13:14 David
NotSolved
07.07.2016 23:18:34 David
NotSolved
07.07.2016 23:28:41 David
NotSolved
07.07.2016 23:45:40 David
NotSolved
08.07.2016 07:45:22 Gast41963
NotSolved
08.07.2016 08:54:12 David
NotSolved
08.07.2016 18:47:16 David
NotSolved
Blau Worksheet_Change hier notwendig? - "Dynamische Summenbildung"
08.07.2016 22:11:02 Gast54508
NotSolved
09.07.2016 10:33:15 David
NotSolved
09.07.2016 11:34:37 Gast73060
NotSolved
10.07.2016 14:13:32 David
NotSolved
10.07.2016 14:48:56 Gast40854
NotSolved
10.07.2016 15:07:10 David
NotSolved