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

Antworten auf die Frage(6)

Ihre Antwort auf die Frage