Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1164to1168
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

In Spalte Gleiche Kat. suchen und addieren (VBA)

In Spalte Gleiche Kat. suchen und addieren (VBA)
Jockel
Hallo,
in meinem Datenbestand habe ich in der Spalte V sowas wie Kategoriene. Die Kategorien können mehrmals vorkommen. Hinter den Kategorien in Spalte W hat es Preise. Beispiel:
V__________W
Werkzeug___100,00
Essen______300,00
Urlaub______50,00
Werkzeug___300,00
Essen______150,00
Urlaub______280,00
usw.
Ich möchte nun die komplette Spalte mit einer Schleife durcharbeiten und alle Datensätze mit gleichen Kategorien zu einem neuem datensatz addieren, damit ich jeweils die Gesamtsumme sehen kann. Als Ergebnis sollte dann das raukommen:
Werkzeug___400,00
Essen______450,00
Urlaub______330,00
Dieses Ergebnis soll dann zB. auf das Blatt "Zusammenfasssung" ab dem Bereich A5 geschrieben werden.
Kann sich das jemand vorstellen, wie man das machen könnte, Würde mir viel weiterhelfen.
Danke und Grüße
Joachim

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Entweder PIVOT-Tabelle oder per VBA
07.07.2010 12:01:41
NoNet
Hallo jockel,
eigentlich ist das eine klassische Aufgabe für eine PIVOT-Tabelle, also auch einfach ohne VBA lösbar !
Da Du aber nach einer VBA-Lösung gefragt hattest, hier der entsprechende Code :
Sub SummeWerteProKategorie()
Dim lngZ As Long, lngP As Long
Dim colKat As New Collection
Dim arrKat(), arrWerte()
On Error Resume Next 'Zur Fehlervermeidung bei bereits vorhandenen Kategorien
For lngZ = 2 To Cells(Rows.Count, 22).End(xlUp).Row
Err.Clear 'Fehler löschen
colKat.Add Cells(lngZ, 22), Cells(lngZ, 22)
If Err = 0 Then
ReDim Preserve arrKat(colKat.Count - 1)
arrKat(UBound(arrKat)) = Cells(lngZ, 22)
ReDim Preserve arrWerte(colKat.Count - 1)
arrWerte(UBound(arrWerte)) = Cells(lngZ, 23)
Else
lngP = Application.Match(Cells(lngZ, 22), arrKat, 0) - 1
arrWerte(lngP) = arrWerte(lngP) + Cells(lngZ, 23)
End If
Next
Sheets.Add 'Neues Blatt anlegen und aktivieren
[A1:B1] = Array("Kategorien :", "Summe :")
'Kategorien und Werte in das neue Blatt übertragen :
For lngZ = 1 To colKat.Count
Cells(lngZ + 1, 1) = arrKat(lngZ - 1)
Cells(lngZ + 1, 2) = arrWerte(lngZ - 1)
Next
End Sub

Finale :   gegen   &nbsp  2:1 - Revival 2010 ?
Anzeige
AW: Entweder PIVOT-Tabelle oder per VBA
07.07.2010 13:04:31
Jockel
Hi NoNet,
der Code scheint (fast) zu funktionieren. Die Kategorieen werden ermittelt, Preise ausgerechnet, das neue Blatt angelegt aber die ermittelten daten landen nicht auf dem neuen Tabellenblatt, sondern auf dem, wo meine Daten waren, sprich auf dem Datensheet.
Da werden dann meine alten Daten überschrieben.
Mache ich was falsch oder wechselt der Code wirklich nicht auf das neue Blattt ?
Dank, vielleicht kannst Du noch mal drüber schauen.
Gruss
Jockel
MEIN Originalcode wechselt das Blatt !
07.07.2010 14:31:37
NoNet
Hallo Jockel,
also auf meinem PC (ebenfalls XL2003) funktioniert der code einwandfrei : Die Daten werden in dem neuen Blatt ausgegeben.
Sicherheitshalber kann man dieses Blatt aber auch noch explizit aktivieren
Änderungen zur vorherigne Codeversion siehe rote Codezeilen
Sub SummeWerteProKategorie()
Dim lngZ As Long, lngP As Long, shNeu As Worksheet
Dim colKat As New Collection
Dim arrKat(), arrWerte()
On Error Resume Next 'Zur Fehlervermeidung bei bereits vorhandenen Kategorien
For lngZ = 2 To Cells(Rows.Count, 22).End(xlUp).Row
Err.Clear 'Fehler löschen
colKat.Add Cells(lngZ, 22), Cells(lngZ, 22)
If Err = 0 Then
ReDim Preserve arrKat(colKat.Count - 1)
arrKat(UBound(arrKat)) = Cells(lngZ, 22)
ReDim Preserve arrWerte(colKat.Count - 1)
arrWerte(UBound(arrWerte)) = Cells(lngZ, 23)
Else
lngP = Application.Match(Cells(lngZ, 22), arrKat, 0) - 1
arrWerte(lngP) = arrWerte(lngP) + Cells(lngZ, 23)
End If
Next
Set shNeu = Sheets.Add 'Neues Blatt anlegen und aktivieren
shNeu.Activate
[A1:B1] = Array("Kategorien :", "Summe :")
'Kategorien und Werte in das neue Blatt übertragen :
For lngZ = 1 To colKat.Count
Cells(lngZ + 1, 1) = arrKat(lngZ - 1)
Cells(lngZ + 1, 2) = arrWerte(lngZ - 1)
Next
End Sub
Gruß , NoNet
PS: Deutschland spielt "Vier gewinnt" :
gegen 4:0    gegen 4:1    gegen 4:0    gegen ?:?
;-)
Anzeige
AW: MEIN Originalcode wechselt das Blatt !
07.07.2010 14:45:24
Jockel
Hallo NoNet,
hmmm komisch, auch bei diesem Code landen die Daten wieder auf meinem ersten Sheet. Ist sicher ein Problem bei mir.
Konnte mir aber gerade weiter helfen, schreiben die Daten einfach in ein Sheet , das schon besteht, das funktioniert.
Trotzdem vielen Dank, hast mir sehr geholfen
PS: zu Deiner Fusszeile, ich hoffe, du behälst recht :-))))
Gruss
Jockel
AW: MEIN Originalcode wechselt das Blatt !
10.07.2010 12:13:20
BoskoBiati
Hallo Jörg,
wahrscheinlich hast Du den Code von NoNet hinter die Tabelle gepackt. Er funktioniert aber nur richtig, wenn er in einem eigenen Modul steht.
In der Tabelle ginge es hiermit:
 Sheets.Add.Name = "Zusammenfassung"
'Neues Blatt anlegen und aktivieren
With Sheets("Zusammenfassung")
.[A1:B1] = Array("Kategorien :", "Summe :")
'Kategorien und Werte in das neue Blatt übertragen :
For lngZ = 1 To colKat.Count
.Cells(lngZ + 1, 1) = arrKat(lngZ - 1)
.Cells(lngZ + 1, 2) = arrWerte(lngZ - 1)
Next
End With
End Sub

nach dem ersten NEXT wird ein Blatt mit dem Namen "Zusammenfassung" hinter Dein aktives Blatt eingefügt, in das dann die Daten eingetragen werden.
Gruß
Bosko
Anzeige

341 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige