Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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

Duplikate Entfernen und Aufsummieren mit Array

Duplikate Entfernen und Aufsummieren mit Array
21.01.2020 16:48:06
Nermin
Hallo zusammen,
ich kriege mein Problem mit Schleifen gelöst allerdings dauert die Prozedur zu lange (ca. 3 min). Um es schneller hinzukriegen benötige ich ein Array, womit ich mich garnicht auskenne. Ausgangstabelle sieht ungefähr so aus, dass ich in Spalte A die Bezeichnung habe und Spalte B die Teilenr und dann in den Spalten C bis H die Menge des Bauteils abhängig vom Produkt und das Bauteil kommt öfter vor in der Tabelle. Als Ausgabe soll dann eine Tabelle sein wo das Bauteil nur einmal vorkommt aber die Menge wie oft im jeweiligen Produkt aufsummiert wird. Also Bauteil A kommt 16 mal vor in der Tabelle mit den jeweiligen mengen des Produktes und als Ergebnis soll dann Bauteil A nur einmal vorkommen (in einer Zeile) und in der jeweiligen Spalte (abhängig vom Produkt) die Menge. Bauteil A kommt 16 mal vor, davon bei Produkt A 2 mal, Produkt B, 5 mal und Produkt C 9 mal. Wie kriege ich das mit einem Array hin? Die Lösung die ich gefunden habe, addiert nur eine Spalte und gibt nur diese Spalte aus, wie erweitere ich das, damit es auch die anderen Spalten aufsummiert?
Kann den Code einer entsprechend anpassen?

Public Sub Zusammenfassen()
Dim MyDict   As Object  ' As Dictionary
Dim vTemp    As Variant ' ein temporärer Array
Dim lTemp    As Long    ' der For/Next Schleifen Index zum Array
Dim sText    As String  ' Zusammenfassung der ggf. noch doppelten
Dim lLetzte  As Long    ' die letzte belegte Zeile in Spalte E
Dim lZeile   As Long    ' der For/Next Schleifen-Index - hier die Zeile
Dim lngLastRow As Long
Dim lngCounter As Long
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = "Test"
Set MyDict = CreateObject("Scripting.Dictionary")
'     die Eingabe-Daten aus Performance-Gründen in ein Array kopieren
With ThisWorkbook.Worksheets("Teilematrix")  ' den Tabellenblattnamen ggf. anpassen!
vTemp = .Range("A4:H4" & .Cells(.Rows.Count, 1).End(xlUp).Row) ' ggf. anpassen!
End With
'     zusammenfassen der Begriffe und addieren der Werte
For lTemp = 1 To UBound(vTemp)
sText = vTemp(lTemp, 1)
MyDict(sText) = MyDict(sText) + Val(vTemp(lTemp, 8))
Next lTemp
For i = 4 To ThisWorkbook.Worksheets("Teilematrix").Cells(Rows.Count, "A").End(xlUp).Row
ThisWorkbook.Worksheets("Teilematrix").Cells(i, 1).EntireRow.Delete
Next i
'   Application.ScreenUpdating = False ' kein Bildschirm-Update mehr zulassen
'     Ausgeben. Die Zielzellen müssen ggf. angepasst werden
With ThisWorkbook.Worksheets("Test")
lLetzte = 4 + .Cells(.Rows.Count, 1).End(xlUp).Row
'         die im Dictionary gesammelten und addierten Werte ausgeben
.Range("A4").Resize(MyDict.Count) = WorksheetFunction.Transpose(MyDict.keys)
.Range("C4").Resize(MyDict.Count) = WorksheetFunction.Transpose(MyDict.Items)
End With
'   Application.ScreenUpdating = True ' das Bildschirm-Update wieder zulassen
End Sub

Danke! Beste Grüße,
Nermin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Duplikate Entfernen und Aufsummieren mit Array
21.01.2020 22:53:11
Oberschlumpf
Hi,
zuerst wäre es schön, wenn du uns per Upload eine Bsp-Excel-Datei mit genügend vielen Datenzeilen zeigst, in denen eben auch gleiche Bauteile mehrmals vorkommen.
Die Datei sollte so wie in deiner Beschreibung oben aussehen.
Ciao
Thorsten
AW: Duplikate Entfernen und Aufsummieren mit Array
22.01.2020 09:35:10
Nermin
Hi Thorsten,
hier die Beispieldatei, extra ohne Makros und mit Tabellennamen "Tabelle1", da du/ihr eine andere herangehensweise als ich habt.
https://www.herber.de/bbs/user/134610.xlsm
Danke und beste Grüße!
Nermin
AW: Duplikate Entfernen und Aufsummieren mit Array
22.01.2020 15:38:42
volti
Hallo Nermin,
anbei mal eine Möglichkeit, um Dein Anliegen umzusetzen.
Hierbei kannst Du entscheiden, ob die zusammengefassten Daten auf dem gleichen Blatt die alten erstzen sollen (die sind dann weg) oder ob Du ein anderes Blatt als Ziel bevorzugst.
Teste mal, ob es in Funktionalität und Performance Deiner Vorstellung entsptricht.
Da ich mich heute auch zum ersten Mal mit dem Dictionary beschäftigt habe, habe ich ein mehrspaltiges Dic (noch) nicht hinbekommen, so dass jetzt einfach mehrfach Dics erstellt werden.
Bei den paar Spalten dürfte es m.E. an der Performance nicht wesentlich mangeln.
Option Explicit
Sub Zusammenfassen()
 Dim QWSh  As Worksheet, ZRng As Range
 Dim oDict As Object
 Dim vArr  As Variant
 Dim iRow  As Long, iCol As Long
 Dim sKey  As String
 Set QWSh = ThisWorkbook.Sheets("Tabelle1")
 Set ZRng = ThisWorkbook.Sheets("Tabelle1").Range("$A$4")
'Eingangsdaten in ein Array übernehmen
 iRow = QWSh.Cells(Rows.Count, "A").End(xlUp).Row   'Letzte Zeile
 vArr = QWSh.Range("$A$4:$H" & iRow)                 'Alles ins Array übertragen
 Application.ScreenUpdating = False                 'Da mehrfach ausgegeben wird
'Zielbereich ggf. löschen
 With ZRng.Parent
   iRow = .Cells(.Rows.Count, "A").End(xlUp).Row    'Letzte Zeile
   .Range(ZRng.Address, .Range("$H" & iRow)).Clear
 End With
'Zusammenfassen der Begriffe und addieren der Werte
 For iCol = 2 To 8                                  'Alle Spalten einzeln
   Set oDict = CreateObject("Scripting.Dictionary")
   For iRow = 1 To UBound(vArr)
     sKey = vArr(iRow, 1)
     If Not oDict.Exists(sKey) Or iCol > 2 Then
        oDict(sKey) = oDict(sKey) + vArr(iRow, iCol)
     End If
   Next iRow
   ZRng.Offset(0, iCol - 1).Resize(oDict.Count) = WorksheetFunction.Transpose(oDict.Items)
 Next iCol
'Keys ausgeben
 ZRng.Resize(oDict.Count) = WorksheetFunction.Transpose(oDict.Keys)
 Application.ScreenUpdating = True
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Duplikate Entfernen und Aufsummieren mit Array
22.01.2020 16:34:48
Nermin
Hallo Karl-Heinz,
ich vermute mal dass es super funktioniert hat bei dir, aber ich bekomme den Fehler: "Index außerhalb des gültigen Bereichs!" in der Zeile "oDict(sKey) = oDict(sKey) + vArr(iRow, iCol)" Kannst du mir hier behilflich sein?
Vorab vielen Dank!
Beste Grüße,
Nermin
AW: Duplikate Entfernen und Aufsummieren mit Array
22.01.2020 17:18:54
volti
Hallo Nermin,
habe das Tool jetzt in Deine Datei eingebaut. Es funktioniert bei mir.
Probier mal die Datei aus..
Falls wieder Fehler kommt und eine gelb unterlegte Zeile zu sehen ist, mal den Cursor über iRow und iCol positionieren.
Oder mal Haltepunkt setzen, z.B. vor Set oDict =…und schauen, in welcher Spalte Fehler kommt usw.. Ansonsten ist Diagnose schwierig, da müssen wir mal schauen.
https://www.herber.de/bbs/user/134624.xlsm
viele Grüße
Karl-Heinz
Anzeige
AW: Duplikate Entfernen und Aufsummieren mit Array
23.01.2020 08:47:58
Nermin
Hallo Karl-Heinz,
habe den Code für die Originaldatei angepasst. Funktioniert super!
Bester Mann!
Danke!!!!
Beste Grüße,
Nermin
AW: Duplikate Entfernen und Aufsummieren mit Array
23.01.2020 08:50:43
volti
Danke Nermin,
für die Rückmeldung und schön, dass es jetzt funktioniert.
viele Grüße
Karl-Heinz

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige