Vba 使用两个数组对表进行排序

Vba 使用两个数组对表进行排序,vba,excel,excel-2010,Vba,Excel,Excel 2010,请耐心等待我解释这个困境。我正在尝试编写一个宏来帮助我对下表进行排序: Sale ID S Class B Class Balance Month Rate 9 P F 900 60 5 Sale ID S Class B Class Balance Month Rate 12 M A 1200 45 8 Sale ID S Class B Class Balance Month Rate 13 Sp B 1300 40 9 Sa

请耐心等待我解释这个困境。我正在尝试编写一个宏来帮助我对下表进行排序:

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
并尝试将销售ID排序到另一个工作表(在同一工作簿中),其中包含以下预格式化的表格:

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
最终结果应如下图所示,我需要做的只是填写sales ID和sales ID列右侧的公式计算或执行查找:

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
问题是,我的团队一直在手动填写表格,或者使用排序功能的组合来手动填写表格。问题是,当我们有10000多个销售ID并且没有自动化时,这可能是一个痛苦。我试图编写此代码以帮助我的团队,但我有限的vba知识并没有帮助我-非常感谢任何帮助:

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
编辑:我对开尔文的代码做了一些修改(谢谢@Kelvin!),我想澄清的是,我所要做的就是根据预格式化表格的位置将那些销售ID的特殊值粘贴到我的“表格”选项卡中。请参阅下面的新图像以及重新设置的代码。注意“我的表格”选项卡中没有销售ID的公式(我不清楚是我的错)

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
最后一点注意:我试图解决的最后一件事是扫描两个范围,并将唯一对过滤到一个数组中,以使下面的数组CFValues动态-如果您知道如何做得比我好,请帮助

Option Explicit

Sub SortNCopy2TablesV2()

Dim CFValues As Variant

Dim r As Integer
Dim i As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim CombStr As Variant
Const startRow As Long = 7 'kelvin added

CFValues = Array("P A", "P B", "P C", "P F", "M A", "SP A", "SP B", "SP C")


Set ws1 = Worksheets("Cashflow")
Set ws2 = Worksheets("Tables")

r = startRow 'kelvin changed

'kelvin added
Application.ScreenUpdating = False
On Error Resume Next
For i = LBound(CFValues) To UBound(CFValues)
    Worksheets.Add
    ActiveSheet.Name = CFValues(i)
    If Err.Number = 1004 Then
        Application.DisplayAlerts = False
        Worksheets(CFValues(i)).Cells.Clear
        ActiveSheet.Delete
        Application.DisplayAlerts = True
    End If
Next i
On Error GoTo 0

With ws1 'kelvin added

    Do Until .Range("C" & r).Value = ""

        CombStr = .Range("C" & r).Text + " " + .Range("D" & r).Text 'kelvin changed

        For i = LBound(CFValues) To UBound(CFValues)

            If StrComp(CombStr, CFValues(i), vbTextCompare) = 0 Then 'kelvin changed
                                    'kelvin added 1 lines of code:
                .Range("B" & r).Copy _
                        Worksheets(CFValues(i)).Range("B" & Application.WorksheetFunction.CountA(Worksheets(CFValues(i)).Range("B:B")) + 1)

            End If
        Next i
        r = r + 1
    Loop
End With

'kelvin added
Dim nextRow As Long
Dim tempRow As Long
Dim numRows As Long

nextRow = 5

For i = LBound(CFValues) To UBound(CFValues)
    tempRow = Application.WorksheetFunction.CountA(Worksheets(CFValues(i)).Range("B:B"))

    If tempRow > 0 Then

        numRows = Application.WorksheetFunction.CountA(Worksheets(CFValues(i)).Range("B:B"))

        ws2.Range("B" & nextRow + 1).EntireRow.Resize(numRows).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ws2.Range("C" & nextRow & ":" & "F" & nextRow + numRows).FillDown
        Worksheets(CFValues(i)).Range("B2").CurrentRegion.Copy ws2.Range("B" & nextRow + 1)
        ws2.Range("B" & nextRow + 2 + tempRow) = CFValues(i)
        nextRow = nextRow + tempRow + 5

    End If
Next i

Application.ScreenUpdating = True

End Sub
Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10

根据您的代码,第一个表的标题从单元格B6开始,第一行数据从B7开始。通过修改宏,我可以进行排序,并将结果放在表格工作表上。然而,我不能为你计算净现值,因为我不知道确切的公式。请查找代码:

 Option Explicit

    Sub SortNCopy2TablesV2()

    Dim CFValues As Variant
    'Dim InsertRow As Variant
    Dim R As Integer
    Dim i As Long
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim CombStr As Variant
    Const startRow As Long = 7 'kelvin added

    CFValues = Array("P A", "P B", "P C", "P F", "M A", "SP A", "SP B", "SP C")
   ' InsertRow = Array(6, 11, 16, 21, 26, 31, 36, 41)

    Set ws1 = Worksheets("Cashflow")
    Set ws2 = Worksheets("Tables")

    R = startRow 'kelvin changed

    'kelvin added
    Application.ScreenUpdating = False
    On Error Resume Next
    For i = LBound(CFValues) To UBound(CFValues)
        Worksheets.Add
        ActiveSheet.Name = CFValues(i)
        If Err.Number = 1004 Then
            Application.DisplayAlerts = False
            Worksheets(CFValues(i)).Cells.Clear
            ActiveSheet.Delete
            Application.DisplayAlerts = True
        End If
    Next i
    On Error GoTo 0

    With ws1 'kelvin added
       'org: Do Until ws1.Range("C" & R).Value = ""
        Do Until .Range("C" & R).Value = ""

           'org:  CombStr = ws1.Range("C" & R).Text + "" + ws1.Range("D" & R).Text
            CombStr = .Range("C" & R).Text + " " + .Range("D" & R).Text 'kelvin changed

            For i = LBound(CFValues) To UBound(CFValues)
                'org: If StrComp(CombStr, CFValues(i), vbTextCompare) Then
                If StrComp(CombStr, CFValues(i), vbTextCompare) = 0 Then 'kelvin changed
                    'Return value of first insert row in InsertRow[] array -
                    ' i.e. if P A, then it should return row 6 for insertion, if P B, then row 11, etc.
                    'insert new row, copying and pasting the formulas down and copying the sales ID
                    'Insert Sales ID value into Table tab
                    'org: ActiveCell.Offset(1, 0).EntireRow.Copy
                    'org: ActiveCell.Offset(2, 0).EntireRow.Insert Shift:=xlDown
                    'org:  ActiveCell.Offset(2, 0).EntireRow.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats
                    'org:  Application.CutCopyMode = False
                    'org:  ws1.Range("B" & R).Value = ws2.Range("B" & InsertRow(i) + 1).Value

                    'kelvin added 1 lines of code:
                    .Range("A" & R).EntireRow.Copy _
                            Worksheets(CFValues(i)).Range("A" & Application.WorksheetFunction.CountA(Worksheets(CFValues(i)).Range("B:B")) + 1)

                    'decrement InsertRow[] array, so that the
                    'program always knows where to find the next tables for insertion
                'Else
                End If
            Next i
            R = R + 1
        Loop
    End With

    'kelvin added
    ws2.Cells.Clear
    Dim nextRow As Long
    Dim tempRow As Long
    nextRow = startRow
    For i = LBound(CFValues) To UBound(CFValues)
        tempRow = Application.WorksheetFunction.CountA(Worksheets(CFValues(i)).Range("B:B"))
        If tempRow > 0 Then
            ws1.Range("A" & startRow - 1).EntireRow.Copy ws2.Range("A" & nextRow - 1)
            Worksheets(CFValues(i)).Range("B2").CurrentRegion.Copy ws2.Range("B" & nextRow)
            ws2.Range("A" & nextRow + tempRow) = CFValues(i)
            nextRow = nextRow + tempRow + 5
        End If
    Next i
    Application.ScreenUpdating = True

End Sub
Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
(哦…我无法发布图像。请查找输入和输出的粘贴文本) 样本输入:

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
销售ID S B类余额月利率 1 P A 100 20 5 2 P A 200 25 4 3 P A 300 30 3 4 SP C 400 35 2 5 SP C 500 40 1 6米C 600 45 2 7米B 700 50 3 8米B 800 55 4 9 P F 900 60 5 10 SP F 1000 55 6 11米F 1100 50 7 12米A 1200 45 8 13 Sp B 1300 40 9 14 Sp C 1400 35 10

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
样本输出:

Sale ID S Class B Class Balance Month   Rate
1   P   A   100 20  5
2   P   A   200 25  4
3   P   A   300 30  3
Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
p A

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
p F

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
我是

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
SP B

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
SP C

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10

请评论。谢谢。

在我编写此代码时,我看到您收到了另一个答案,但无论如何我都会发布它。下面的代码应粘贴到表格工作表的vba部分。然后,您应该在该工作表(在“开发人员”选项卡中)上创建一个按钮,并将其指定给宏StartSortClick

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
此代码假定存在以下情况,必须对不正确的情况进行相应更改。如果你在下面评论我的假设是错误的,我可以为你更新,或者你可以自己做

Sale ID S Class B Class Balance Month   Rate
9   P   F   900 60  5
Sale ID S Class B Class Balance Month   Rate
12  M   A   1200    45  8
Sale ID S Class B Class Balance Month   Rate
13  Sp  B   1300    40  9
Sale ID S Class B Class Balance Month   Rate
4   SP  C   400 35  2
5   SP  C   500 40  1
14  Sp  C   1400    35  10
  • “现金流”选项卡在第1行中有标题,销售ID在A1中,卖家类别在B1中,等等
  • 在tables选项卡中,您希望第一个表从第10行和A列开始,以便第一个表的Sale ID写入A10
  • 我还没有输入价格和净现值的公式,如果您愿意,请提供您的公式
  • 字体也是可变的。只需在代码末尾对整个工作表执行此操作(代码将在运行代码之前覆盖手动字体更改,以确保正确放置表格边框)
  • 我相信它可以做得更整洁,我认为10000多行可能会很慢,但它做到了你要求的。我现在明白了,使用二维数组会更快。开发一个版本(因为我自己需要更好地使用数组,而您的问题是很有趣的)

    Sale ID S Class B Class Balance Month   Rate
    9   P   F   900 60  5
    
    Sale ID S Class B Class Balance Month   Rate
    12  M   A   1200    45  8
    
    Sale ID S Class B Class Balance Month   Rate
    13  Sp  B   1300    40  9
    
    Sale ID S Class B Class Balance Month   Rate
    4   SP  C   400 35  2
    5   SP  C   500 40  1
    14  Sp  C   1400    35  10
    

    编辑:

    Sale ID S Class B Class Balance Month   Rate
    9   P   F   900 60  5
    
    Sale ID S Class B Class Balance Month   Rate
    12  M   A   1200    45  8
    
    Sale ID S Class B Class Balance Month   Rate
    13  Sp  B   1300    40  9
    
    Sale ID S Class B Class Balance Month   Rate
    4   SP  C   400 35  2
    5   SP  C   500 40  1
    14  Sp  C   1400    35  10
    
    嗯。在将单元格值写入表格工作表之前,使用数组存储单元格值的Redid代码。它的速度稍快,15000排1分57对2分22。这是替代代码。如果您希望使用此公式,请更改按钮单击以调用此公式。注意:这段代码可能有点不整洁,因为我现在需要注销stackExchange

    Sale ID S Class B Class Balance Month   Rate
    9   P   F   900 60  5
    
    Sale ID S Class B Class Balance Month   Rate
    12  M   A   1200    45  8
    
    Sale ID S Class B Class Balance Month   Rate
    13  Sp  B   1300    40  9
    
    Sale ID S Class B Class Balance Month   Rate
    4   SP  C   400 35  2
    5   SP  C   500 40  1
    14  Sp  C   1400    35  10
    
    Private Sub SortNCopyTables2()
    Application.ScreenUpdating = False
    
    Dim saleIDs() As Variant
    Dim sellerClass() As Variant
    Dim bucketClass() As Variant
    
    
    
    Dim cashFlowSheet As Worksheet
    Set cashFlowSheet = Worksheets("CashFlow")
    
    Dim lastSaleIDRow As Long
    lastSaleIDRow = cashFlowSheet.Cells.SpecialCells(xlCellTypeLastCell).row
    
    saleIDs = cashFlowSheet.Range("A2:A" & lastSaleIDRow).Value
    sellerClass = cashFlowSheet.Range("B2:B" & lastSaleIDRow).Value
    bucketClass = cashFlowSheet.Range("C2:C3" & lastSaleIDRow).Value
    
    Dim classPairsArray() As Variant
    Dim classPairs() As String
    ReDim Preserve classPairs(0)
    ReDim Preserve classPairsArray(0)
    Dim size As Long
    size = 0
    Dim saleID As String
    
    Dim tempArray() As String
    For counter = 1 To UBound(saleIDs, 1)
        sellerBucketString = sellerClass(counter, 1) + " & " + bucketClass(counter, 1)
    
        If UBound(Filter(classPairs, sellerBucketString)) < 0 Then
    
            ReDim Preserve classPairs(size)
    
            classPairs(size) = sellerBucketString
    
            ReDim Preserve classPairsArray(size)
    
            ReDim Preserve tempArray(0)
            tempArray(0) = sellerBucketString
    
            classPairsArray(size) = tempArray
    
            size = size + 1
        End If
    
        Dim position As Long
    
        For i = 0 To UBound(classPairsArray)
            tempArray = classPairsArray(i)
    
            If sellerBucketString = tempArray(0) Then
                tempArray = classPairsArray(i)
                ReDim Preserve tempArray(UBound(tempArray) + 1)
                tempArray(UBound(tempArray)) = saleIDs(counter, 1)
    
                classPairsArray(i) = tempArray
                Exit For
            End If
    
        Next i
    
    Next counter
    
    'loop through array and write to worksheet
    Dim tablesSheet As Worksheet
    Set tablesSheet = Worksheets("Tables")
    'clear the tableSheet, just in case
    tablesSheet.Rows(10 & ":" & tablesSheet.Rows.Count).Clear
    
    Dim SaleIDRange, BalanceRange, MonthlyRange, RateRange As Range 'Change the letters and starting rows as necessary
    Set SaleIDRange = cashFlowSheet.Range("A2:A" & cashFlowSheet.Cells.SpecialCells(xlCellTypeLastCell).row)
    Set BalanceRange = cashFlowSheet.Range("D2:D" & cashFlowSheet.Cells.SpecialCells(xlCellTypeLastCell).row)
    Set MonthlyRange = cashFlowSheet.Range("E2:E" & cashFlowSheet.Cells.SpecialCells(xlCellTypeLastCell).row) ' not used now but assume is used for npv / price calcs
    Set RateRange = cashFlowSheet.Range("F2:F" & cashFlowSheet.Cells.SpecialCells(xlCellTypeLastCell).row)
    
    Dim tRow As Long
    tRow = 10 ' this is where I start to build my table
    Dim row As Long
    Dim tempSumRow As Range
    
    For i = 0 To UBound(classPairsArray)
        Dim tableStartRow As Long
        tableStartRow = tRow + 1
        Dim tableSellerBucketGroup As String
        Dim tableArray() As String
        tableArray = classPairsArray(i)
        With tablesSheet
            .Cells(tRow, 1).Value = "Sale ID"
            .Cells(tRow, 1).Font.Underline = xlUnderlineStyleSingleAccounting
            .Cells(tRow, 2).Value = "NPV"
            .Cells(tRow, 2).Font.Underline = xlUnderlineStyleSingleAccounting
            .Cells(tRow, 3).Value = "Price"
            .Cells(tRow, 3).Font.Underline = xlUnderlineStyleSingleAccounting
            .Cells(tRow, 4).Value = "Balance"
            .Cells(tRow, 4).Font.Underline = xlUnderlineStyleSingleAccounting
            .Cells(tRow, 5).Value = "Rate"
            .Cells(tRow, 5).Font.Underline = xlUnderlineStyleSingleAccounting
            tRow = tRow + 1
            For j = 1 To UBound(tableArray)
                .Cells(tRow, 1).Value = tableArray(j)
                '.Cells(tRow, 2).Value = ??? NPV formula?
                '.Cells(tRow, 3).Value = ??? price formula?
                .Cells(tRow, 4).Formula = "=INDEX(" + cashFlowSheet.Name + "!" + BalanceRange.Address + ",MATCH(A" + CStr(tRow) + "," + cashFlowSheet.Name + "!" + SaleIDRange.Address + ",0))"
                .Cells(tRow, 4).NumberFormat = "$#,##0.00"
                .Cells(tRow, 5).Formula = "=INDEX(" + cashFlowSheet.Name + "!" + RateRange.Address + ",MATCH(A" + CStr(tRow) + "," + cashFlowSheet.Name + "!" + SaleIDRange.Address + ",0))"
                .Cells(tRow, 5).NumberFormat = "0.0 %"
                tRow = tRow + 1
            Next j
            .Cells(tRow, 1).Value = tableArray(0)
            .Cells(tRow, 1).Font.Bold = True
            .Cells(tRow, 2).Formula = "=SUM(B" + CStr(tableStartRow) + ":B" + CStr(tRow - 1) + ")"
            .Cells(tRow, 3).Formula = "=AVERAGE(C" + CStr(tableStartRow) + ":C" + CStr(tRow - 1) + ")"
            .Cells(tRow, 4).Formula = "=SUM(D" + CStr(tableStartRow) + ":D" + CStr(tRow - 1) + ")"
            .Cells(tRow, 5).Formula = "=AVERAGE(E" + CStr(tableStartRow) + ":E" + CStr(tRow - 1) + ")"
            Set tempSumRow = tablesSheet.Range("A" + CStr(tRow) + ":E" + CStr(tRow))
            With tempSumRow.Borders(xlEdgeTop)
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
            With tempSumRow.Borders(xlEdgeBottom)
                .LineStyle = xlDouble
                .Weight = xlThick
            End With
            tRow = tRow + 2
        End With
    Next i
    tablesSheet.Activate
    Application.ScreenUpdating = True
    End Sub
    
    私有子SortNCopyTables2()
    Application.ScreenUpdating=False
    Dim saleIDs()作为变量
    Dim sellerClass()作为变量
    Dim bucketClass()作为变量
    将现金流表设置为工作表
    设置现金流表=工作表(“现金流”)
    黯淡的最后一缕光,如长
    lastSaleIDRow=现金流表.Cells.SpecialCells(xlCellTypeLastCell).row
    saleIDs=cashFlowSheet.Range(“A2:A”和lastSaleIDRow).值
    sellerClass=现金流量表。范围(“B2:B”和lastSaleIDRow)。值
    bucketClass=现金流量表。范围(“C2:C3”和lastSaleIDRow)。值
    Dim CLASSPAIRASARRAY()作为变量
    Dim classPairs()作为字符串
    ReDim保留类对(0)
    ReDim保留类对数组(0)
    尺寸和长度一样小
    大小=0
    作为字符串的Dim saleID
    Dim tempArray()作为字符串
    对于计数器=1到uBond(saleIDs,1)
    sellerBucketString=sellerClass(计数器,1)+“&”+bucketClass(计数器,1)
    如果UBound(Filter(classPairs,sellerBucketString))<0,则
    ReDim保留类对(大小)
    类对(大小)=sellerBucketString
    ReDim保留类对数组(大小)
    ReDim保留临时数组(0)
    tempArray(0)=sellerBucketString
    ClassPairArray(大小)=临时数组
    尺寸=尺寸+1
    如果结束
    暗位置与长位置相同
    对于i=0到UBound(类成对排列)
    tempArray=classpairsaray(i)
    如果sellerBucketString=tempArray(0),则
    tempArray=classpairsaray(i)
    重拨保留临时数组(UBound(临时数组)+1)
    tempArray(UBound(tempArray))=saleid(计数器,1)
    ClassPairArray(i)=临时数组
    退出
    如果结束
    接下来我
    下一个柜台
    '循环遍历数组并写入工作表
    将工作表设置为工作表
    Set tablesheet=工作表(“表”)
    “清理桌子,以防万一
    tablesheet.Rows(10&“:”&tablesheet.Rows.Count)。清除
    Dim SaleIDRange,Ang