如何在排序列VBA中对数字进行排序

时间:2014-10-24 12:35:26

标签: excel vba sorting

所以我有四列数据,但只有两列(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 

2 个答案:

答案 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