So konsolidieren Sie ähnliche Einträge in einer sortierten Liste ohne Ausgabe in ein Arbeitsblatt mit VBA / Excel
Ich habe ein Array, das seine Werte in einer sortierten Liste speichert. Ich habe diese sortierte Liste verwendet, um Daten nach Datum in mehreren anderen Arbeitsblättern zu organisieren.
Meine Quelldaten sind eine Reihe von 12 Arbeitsblättern in einer Arbeitsmappe. Jedes Arbeitsblatt spiegelt einen einzelnen Kalendermonat wider. Die Anzahl der Transaktionen / Läufe ist dynamisch - durchschnittlich 60 pro Monat. Daher habe ich ein Limit für meine Schleife von 200 festgelegt, da dies mehr als genug sein sollte, um jedes Wachstum des Geschäfts abzudecken.
Mein aktueller Datensatz ist so, dass ich mehrere Wiederholungslieferungen habe (verschiedene Ladungen / Gewichte ua, aber derselbe Lieferort). Ich möchte diese "wiederholten" / ähnlichen Zeilen in einem einzigen Eintrag in der Liste zusammenfassen, die Anzahl der gelieferten Teile, das Gewicht und die Lieferkosten summieren und einen Zähler erhöhen, um die Anzahl der wiederholten Lieferungen an den jeweiligen Standort anzuzeigen.
Example: January, 2016
Delivered from: Delivered to: No. Pieces: Weight: Cost:
Site A Site B 10 100 $120.00
Site A Site C 5 20 $80.00
Site B Site C 2 30 $45.00
Site A Site C 20 460 $375.00
Summary:
Delivered to: No. of Deliveries: No. Pieces: Weight: Cost:
Site B 1 10 100 $120.00
Site C 3 27 510 $500.00
Ich kann mir Möglichkeiten überlegen, wie ich Daten auf ein Arbeitsblatt "scrap" kopieren kann. Ich möchte jedoch eine "interne" VBA-Lösung, sodass kein solches "scratch pad" erforderlich ist.
Die Anzahl der Lieferungen ist insgesamt dynamisch. Die Anzahl der Wiederholungslieferungen für einen bestimmten Standort ist ebenfalls dynamisch.
Ich finde es sehr schwierig, eine effiziente Methode zum Konsolidieren der Informationen in meiner Liste mit den oben genannten Parametern zu erstellen, da ich in VBA / Excel noch sehr neu bin.
Alle Vorschläge sind willkommen, insbesondere wenn Sie Beispielcode haben. Ich weiß, was ich will. Ich bin mir nur nicht sicher, wie ich ihn in VBA implementieren soll.
Ein Beispiel für das Laden und Übertragen meines Arrays in die Liste ist unten dargestellt (wobei Variablendefinitionen ua weggelassen wurden).
Set List = CreateObject("System.Collections.SortedList")
'Grab Monthly Data by Route
For Each ws In Worksheets
If ws.Name <> "Summary" Then
Call DeleteHidden 'Delete Hidden Rows/Columns in the active worksheet if any
With ws
'loop through the sheet to 207 (~3x greatest number of deliveries)
For RowCount = 7 To 207
'Check for dates for each row (Month/Day/Year)
d = DateValue(.Cells(RowCount, 1))
If List.Containskey(d) Then
arTemp = List(d)
Else
ReDim arTemp(12)
End If
'Monthly Totals
arTemp(0) = arTemp(0) + .Cells(RowCount, 1) 'Grab Entry Date/Time
arTemp(1) = arTemp(1) + .Cells(RowCount, 2) 'Grab Delivery Date/Time
arTemp(2) = arTemp(2) + .Cells(RowCount, 3) 'Grab PU Location
arTemp(3) = arTemp(3) + .Cells(RowCount, 4) 'Grab PU Street
arTemp(4) = arTemp(4) + .Cells(RowCount, 5) 'Grab PU City/Province/PC
arTemp(5) = arTemp(5) + .Cells(RowCount, 6) 'Grab Del Location
arTemp(6) = arTemp(6) + .Cells(RowCount, 7) 'Grab Del Street
arTemp(7) = arTemp(7) + .Cells(RowCount, 8) 'Grab Del City/Province/PC
arTemp(8) = arTemp(8) + .Cells(RowCount, 9) 'Grab No. Pieces
arTemp(9) = arTemp(9) + .Cells(RowCount, 10) 'Grab Cargo Weight (LBS)
arTemp(10) = arTemp(10) + .Cells(RowCount, 11) 'Grab Cost
'potential add point of a sort and consolidate function if working with the array prior to data being added to the list (but then such would run for each record of each worksheet---seems too inefficient)
arTemp(12) = arTemp(12) + 1
List(d) = arTemp
Next RowCount
Call QuickSort(arTemp, 0, RowCount - 1) 'Sort the Monthly Array at the end of the Month (can manipulate the array but the list is already loaded..how to manipulate/consolidate the list???)
End With
End If
Next