ich suche eine Möglichkeit die Summe einer Spalte zu bilden solange der Wert in einer anderen Spalte gleich bleibt. Diese Summe würde ich dann gerne in ein anderes Tabellenblatt schreiben mit dem dazugehörigen Wert von dem die Summe abhängig ist.
Z.B.
Spalte A Spalte B
A 2
A 1
B 5
B 2
B 3
C 7
In einem neues Tabellenblatt soll dann stehen
A 3
B 10
C 7
Ich habe folgenden Code gefunden, der auch funktionert.
Option Explicit
Public Sub WelcheSumme()
Dim myDict As Object ' das Scripting.Dictionary Object
Dim WkSh As Worksheet ' das jeweils zu bearbeitende Tabellenblatt
Dim lLetzte As Long ' die letzte belegte Zeile gemäß Spalte A
Dim vTemp As Variant ' ein temporärer Array zur Aufnahme der Eingabe-Daten
Dim iIndx As Integer ' der Index zum Array
Dim sGruppe As String ' der Gruppenbegriff aus Spalte A
Dim rZelle As Range ' die erste Ausgabezelle
Set myDict = CreateObject("Scripting.Dictionary")
Set WkSh = ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
lLetzte = WkSh.Cells(Rows.Count, 1).End(xlUp).Row
' die Eingabe-Werte in ein Array speichern
vTemp = WkSh.Range("A2:B" & lLetzte) ' ab Zeile 2 übernehmen!
' den Array abarbeiten
For iIndx = LBound(vTemp) To UBound(vTemp)
If Trim$(vTemp(iIndx, 1)) "" Then ' ist die Zelle gefüllt?
sGruppe = vTemp(iIndx, 1) ' den Gruppenbegriff speichern
End If
' in's Dictionary übernehmen und zählen
myDict(sGruppe) = myDict(sGruppe) + vTemp(iIndx, 2)
Next iIndx
' ausgeben der per Dictionary gesammelten Daten
Set WkSh = ThisWorkbook.Worksheets("Tabelle2") ' den Tabellenblattnamen ggf. anpassen!
WkSh.Range("A2:B" & lLetzte).ClearContents ' den Ausgabe-Bereich leeren/löschen
Set rZelle = WkSh.Range("A2") ' den Ausgabe-Bereich festlegen
rZelle.Resize(myDict.Count) = WorksheetFunction.Transpose(myDict.Keys)
rZelle.Offset(0, 1).Resize(myDict.Count) = WorksheetFunction.Transpose(myDict.Items)
Set myDict = Nothing ' die Ressourcen freigeben
Set WkSh = Nothing
End Sub
Quelle: http://www.office-loesung.de/ftopic499387_0_0_asc.php
Leider kann ich in dem Forum zur Zeit nicht schreiben, da das Forum down ist.
Der Code ist mir etwas zu komplex, jedenfalls bin ich nicht in der Lage in auf meine Bedürfnisse passend zu ändern.
Es fängt schon damit an, das ich nicht in Reihe 2 sondern 5 beginnen möchte.
Und ich keine zwei benachbarten Spalten habe sondern der zu summierende Wert in Q und der Wert mit der Abhängigkeit in Spalte G steht.
Ich verstehe leider einfach die Befehle nicht.
So z.B. verstehe ich nicht was mir die Zahl in diesem Code genau sagt.
vTemp(iIndx, 2)
Unabhängig davon das ich die ganze Funktion des Codes nicht verstehe.
Ursprünglich hatte ich an eine Schleife als Lösung gedacht.
Die erkennt ob sich der Wert ändert, dies dann als Startpunkt in eine Variable schreibt und dann sucht wo die nächste Änderung stattfindet und dies dann als Endpunkt in einer Variable schreibt.
So das ich dann eine Summe über den Bereich bilden kann und diese dann ausgebe.
Aber auch da finde ich irgenwie keinen Anfang dies umzusetzen.
Gruß
Markus