所以我有四列数据,但只有两列(C列和D列)我希望排序。一列是工作中心名称列表(C列),另一列是操作号码(列D)。我想知道的是如何按字母顺序对工作中心名称进行排序,然后在每个工作中心名称内,按升序排序操作号。
所以数据最终看起来像:(假设x是随机列值)
x x LDHF 10
x x LDHF 20
x x LDHF 30
x x SHFT 10
x x SHFT 20
x x SHFT 30
目前,这是我的代码。它对一列进行排序,但是当它对第二列进行排序时,它会覆盖第一个排序并对另一列进行加扰。
ActiveWorkbook.Worksheets("Percent").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Percent").Sort.SortFields.Add Key:=Range( _
"D1:D" & DailyLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Percent").Sort
.SetRange Range("A1:D" & DailyLastRow)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Worksheets("Percent").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Percent").Sort.SortFields.Add Key:=Range( _
"C1:C" & DailyLastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Percent").Sort
.SetRange Range("A1:D" & DailyLastRow)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
答案 0 :(得分:1)
您可以使用range.sort。
您可以选择定义多列以使用key1 := range.columns(3), key2 := range.columns(4)
这是
之前的表格Col1 Col2 Col3 Col4
x x LDHF 30
x x SHFT 10
x x LDHF 20
x x SHFT 20
x x SHFT 30
x x LDHF 10
这是脚本
Sub RangeSort()
Dim rng As Range
Set rng = Range("a1:D7")
rng.Sort key1:="Col3", order1:=xlAscending, Key2:="Col4", Header:=xlYes
End Sub
这是输出:
Col1 Col2 Col3 Col4
x x LDHF 10
x x LDHF 20
x x LDHF 30
x x SHFT 10
x x SHFT 20
x x SHFT 30
我想这就是你想要的。
答案 1 :(得分:0)
使用以下代码。这将完成你的工作。如果它不起作用,请告诉我。
Sub PSortData()
Dim rngData As Range
Set rngData = Worksheets("Percent").Range("A1:D" & DailyLastRow)
rngData.Sort Key1:=Range("C1"), Order1:=xlAscending, Key2:=Range("D1"), Order2:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
Set rngData = Nothing
End Sub