Como consolidar entradas semelhantes em uma lista classificada sem saída para uma planilha usando VBA / Excel
Eu tenho uma matriz que armazena seus valores em uma lista classificada. Eu tenho usado essa lista classificada para organizar dados, por data, em várias outras planilhas.
Meus dados de origem são uma série de 12 planilhas em uma pasta de trabalho. Cada planilha refletindo um único mês do calendário. O número de transações / execuções é dinâmico - em média 60 ou mais por mês, portanto, defino um limite para meu loop de 200, pois isso deve ser mais que suficiente para cobrir qualquer crescimento nos negócios.
Meu conjunto atual de dados é tal que eu tenho várias entregas repetidas (cargas / pesos diferentes, etc., mas o mesmo local de entrega). Desejo consolidar essas linhas "repetidas" / semelhantes em uma única entrada da lista, somar o número de peças entregues, peso e custo de entrega e incrementar um contador para mostrar o número de entregas repetidas no site respectivo.
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
Posso pensar em maneiras de fazer isso, transferindo dados para uma planilha "sucata"; no entanto, quero uma solução VBA que seja "interna" para que não seja necessário "bloco de anotações".
O número de entregas, no total, é dinâmico. O número de entregas repetidas, para qualquer local, também é dinâmico.
Estou achando muito difícil compor uma maneira eficiente de consolidar as informações da minha lista com os parâmetros acima, pois ainda sou muito novo no VBA / Excel.
Todas as sugestões são bem-vindas, especialmente se você tiver um código de exemplo - eu sei o que quero, apenas não tenho certeza de como implementá-lo no VBA.
Uma amostra do meu array carregando e transferindo para a lista é mostrada abaixo (com definições de variáveis e outros omitidas).
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