对多列进行排序 Excel VBA



这是我的代码

Sub SortMultipleColumns(myline As String)
With Worksheets("Result-Inactive").Sort
.SortFields.Add Key:=Range("A1"), Order:=xlAscending
.SortFields.Add Key:=Range("D1"), Order:=xlAscending
.SortFields.Add Key:=Range("J1"), Order:=xlAscending
.SetRange Range("A1:C" & myline)
.Header = xlYes
.Apply
End With
End Sub

我收到以下错误,但我不明白为什么"运行时错误'1004'排序引用无效。确保它在您要排序的daya中,然后首先按框排序不相同或空白。当我单击调试时。.apply 被突出显示

有什么建议吗?

只是在这里重申吉佩德的回答,但看法略有不同:

1(myline实际上应该定义为长整型或整数

2(用Key:=Range("A1")声明的范围应定义为相同的工作表

3(DJ的键在.setRange之外,同样应该定义为在同一工作表上

我坚持使用相同的代码,但将ws工作表定义添加到所有范围,并更改了您的设置范围以包含最多列J

Sub SortMultipleColumns(myline As Long)
Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Result-Inactive")
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=ws.Range("A1"), Order:=xlAscending
.SortFields.Add Key:=ws.Range("D1"), Order:=xlAscending
.SortFields.Add Key:=ws.Range("J1"), Order:=xlAscending
.SetRange ws.Range("A1:J" & myline)
.Header = xlYes
.Apply
End With
End Sub

我假设myline在那里,因为有时您只想对一系列数据的顶部集进行排序。我还添加了一行来clear所有排序字段,以防万一您在此工作表上运行许多不同的排序器。

您正在尝试将 D 列和 J 列为辅助排序条件,但将它们从排序范围中排除。此外,Range("xn")不一定属于"结果非活动"工作表,除非语法为.Range("xn")。尝试使用备用VBA排序,而不是"宏"记录器生成的方法。

Sub SortMultipleColumns()
With Worksheets("Result-Inactive")
with .cells(1, "A").currentregion
.Cells.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
Key2:=.Range("D1"), Order2:=xlAscending, _
Key3:=.Range("J1"), Order3:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlYes
end with
End With
End Sub

试试这个:

Sub SortingColumnsInRange
' Selecting range
Range("A:X").Select
' Sort column C, after column N and after column P
Selection.Columns.Sort key1:=Columns("C"), Order1:=xlAscending, Key2:=Columns("N"), Order2:=xlAscending, key3:=Columns("P"), Order3:=xlAscending, Header:=xlYes
End Sub

将数据转换为表,然后使用 vba,使用 listObjects 使用工作表查找我的表。 然后,我找到第 1、2 和 3 列的索引。 然后,我使用表范围和列索引添加排序字段。

这不起作用:

Set data_table = MyWorksheet.ListObjects("Tbl_Name")
column1_index = data_table.ListColumns("Column 1").index
column2_index = data_table.ListColumns("Column 2").index
column3_index = data_table.ListColumns("Column 3").index

With data_table.Sort
.SortFields.Add Key:=data_table.Range(column1_index), Order:=xlAscending
.SortFields.Add Key:=data_table.Range(column2_index), Order:=xlAscending
.SortFields.Add Key:=data_table.Range(column3_index), Order:=xlDescending
.Header = xlYes
.Apply
End With

这奏效了:

ProbabilitiesWorksheet.Range("B5").Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlYes
ProbabilitiesWorksheet.Range("B5").Sort Key1:=Range("D5"), Order1:=xlDescending, Header:=xlYes
ProbabilitiesWorksheet.Range("B5").Sort Key1:=Range("C5"), Order1:=xlAscending, Header:=xlYes
Sub SortingColumnsInRange
' Selecting range
Range("A:X").Select
' Sort column C, after column N and after column P
Selection.Columns.Sort key1:=Columns("C"), Order1:=xlAscending, Key2:=Columns("N"), Order2:=xlAscending, key3:=Columns("P"), Order3:=xlAscending, Header:=xlYes
End Sub

最新更新