MS Excel Makro - Gleiche Einträge in Spalte erkennen und zählen
Und wieder mal Hallo zusammen,
ich arbeite an einem Makro, das für jeden Kunden eine Zählung durchführen soll. In Spalte "A" steht hierbei der Kundenname, in Spalte "J" dann das Produkt.
Das Makro soll nun die Einträge in Spalte "J" durchsuchen und die gleichen zusammenzählen.
Die Ausgabe wiederum soll in einem neuen Tabellenblatt erfolgen und wie folgt aufgebaut sein. Spalte A: Kundenname Spalte B: Produkt Spalte C: addierte Anzahl des jeweiligen Produkts
Der Kundenname soll aber, wenn möglich, nur einmal ausgegeben werden so dass eine schöne Übersicht entsteht.
Die Produkte haben die unterschiedlichsten Bezeichnungen, wiederholen sich aber definitiv öfters in Spalte "J".
ich hoffe hier kann mir jemand helfen :)
Danke und viele Grüße Chris
2 Antworten
VBA wirkt für diese Aufgabe overpowert. Versuche, mit ZÄHLENWENN und Filtern dein Ziel zu erreichen. Das ist weniger komplex und sollte dafür ausreichend sein.
Wenn du es unbedingt in VBA gelöst bekommen willst, wäre dein Ansatz nicht schlecht. Würde uns eine Menge Arbeit ersparen.
okey, mal ein Ansatz:
clsListe
Option Explicit
Dim saWerte(1000)
Dim iaAnzahl(1000)
Public Sub Add(sWert)
Dim i
Dim bGefunden
bGefunden = False
For i = 0 To UBound(saWerte)
If (saWerte(i) = "") Then _
Exit For
If (saWerte(i) = sWert) Then
iaAnzahl(i) = iaAnzahl(i) + 1
bGefunden = True
Exit For
End If
Next
If Not bGefunden Then
saWerte(i) = sWert
iaAnzahl(i) = 1
End If
End Sub
Public Sub Out()
Dim i
For i = 0 To UBound(saWerte)
If saWerte(i) = "" Then _
Exit For
Debug.Print saWerte(i) & ": " & iaAnzahl(i)
Next
End Sub
Die Arrays kannst du noch versuchen, dynamisch zu machen.
Aufruf:
Sub ListeZaehleWerte()
Dim oListe
Dim rZelle
Worksheets(1).Activate
Set oListe = New clsListe
For Each rZelle In Range("J1:J100")
If rZelle.Value <> "" Then _
oListe.Add rZelle.Value
Next
oListe.Out
Set oListe = Nothing
End Sub
Puh! Vielen Dank für den Code! Ich muss aber zugeben dass ich ihn nicht ganz versetehe...
Wo wird denn zum Beispiel nun der Suchbereich (die Spalte) definiert? Die Länge des Suchbereichs, ich nehme an im Teil "J1:J100" definiert, sollte auch flexibel sein da die Liste sich monatlich ändern kann. Die Länge aktuell umfasst ca. 30.000 Zeilen...
Für Testzwecke habe ich den Bereich eingegrenzt. Willst du über die gesamte Spalte laufen, musst du Range("J:J") eingeben.
Für die Klasse machst du ein Klassenmodul (Einfügen → Klassenmodul → Name der Klasse bei der Eigenschaft des Moduls ändern)
Eigentlich ist das ein typisches Datenbankproblem. Wenn es aber Excel sein soll oder muss, dann ist VBA nur eine Möglichkeit, besser löst du das mit einer Pivot-Tabelle!
Das Skript soll als weiterer Bestandteil eines größeren Skripts in den Code implementiert werden, daher scheiden die Excel-eigenen Funktionen aus.
Ansatz habe ich so noch keinen da mein Wissen 12 Jahre alt ist, ich mir die bisherigen Parts aber Dank vielen versuchen und Recherchen im Internet zusammenschustern konnte :)
Vom Prinzip her sollte der Wert aus Spalte J in eine Variable geschrieben und die Anzahl auf "1" gesetzt werden. Wenn der gleiche dann noch mal auftaucht eben wieder "+1" usw. Das gilt natürlich für alle unterschiedlichen Einträge in der Liste.