How to consolidate similar entries in a sorted list without output to a worksheet using VBA/Excel

后端 未结 3 722
不思量自难忘°
不思量自难忘° 2020-12-18 17:11

I have an array which stores it\'s values in a sorted list. I have been using this sorted list to organise data, by date in several other spreadsheets.

My source dat

3条回答
  •  执笔经年
    2020-12-18 18:13

    I added a month column in the summary.

    Sub Summary()
        Dim ws As Worksheet
        Dim iMonth As Integer, x As Long, x1 As Long
        Dim Data, key
        Dim list(1 To 12) As Object
    
        For x = 1 To 12
            Set list(x) = CreateObject("System.Collections.SortedList")
        Next
    
        For Each ws In Worksheets
            If ws.Name <> "Summary" Then
               Call DeleteHidden    'Delete Hidden Rows/Columns in the active worksheet if any
                With ws
    
                    For x = 1 To 207
                        If IsDate(.Cells(x, 1)) Then
                            iMonth = Month(.Cells(x, 1))
                            key = .Cells(x, 6)    'Grab Del Location
    
                            If list(iMonth).ContainsKey(key) Then
                                Data = list(iMonth)(key)
                            Else
                                ReDim Data(5)
                                Data(0) = iMonth
                                Data(1) = .Cells(x, 6)    'Grab Del Location
                            End If
    
                            Data(2) = Data(2) + 1
                            Data(3) = Data(3) + .Cells(x, 9)    'Grab No. Pieces
                            Data(4) = Data(4) + .Cells(x, 10)    'Grab Cargo Weight (LBS)
                            Data(5) = Data(5) + .Cells(x, 11)    'Grab Cost
    
                            list(iMonth)(key) = Data
                        End If
                    Next
                End With
            End If
        Next
    
        With Worksheets("Summary")
            For x = 1 To 12
                For x1 = 0 To list(x).Count - 1
                    .Range("A" & .Rows.Count).End(xlUp).Offset(1).Resize(1, 6).Value = list(x).GetByIndex(x1)
                Next
            Next
        End With
    End Sub
    

提交回复
热议问题