在excel中对不同大小的表进行排序

Chr*_*ris 1 excel vba excel-vba

我要做的是在电子表格中选择一个表,然后根据2个不同的列进行排序

我用记录宏选项生成了这段代码.该表的大小发生了变化,这就是我使用xlDown的原因,不幸的是,代码后来引用了确切的单元格"B4:B52".知道如何解决这个问题吗?

Range("B4:J4").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range( _
    "B4:B52"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range( _
    "G4:G52"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("B4:J52")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Run Code Online (Sandbox Code Playgroud)

Dou*_*ncy 11

由于您要对Table(ListObject在VBA中)进行排序,因此您需要引用它.这将动态调整以包含整个表列.在此示例中,要排序的列标题/名称是"Data1"和"Data3":

Sub SortTable()
Dim lo As Excel.ListObject

'change this assignment to suit your table location and name
Set lo = ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1")
With lo
.Sort.SortFields.Clear
    .Sort.SortFields.Add _
        Key:=Range("Table1[data1]"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    .Sort.SortFields.Add _
        Key:=Range("Table1[data3]"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub
Run Code Online (Sandbox Code Playgroud)