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

Excel 如何在已排序列VBA中对数字进行排序,excel,vba,sorting,Excel,Vba,Sorting,所以我有四列数据,但只有两列(C列和D列)需要排序。一列是工作中心名称列表(C列),另一列是操作编号(D列)。我想知道的是如何按字母顺序对工作中心名称进行排序,然后在每个工作中心名称中,按升序对操作编号进行排序 因此,数据最终会如下所示:(假设x是一个随机列值) 目前,这是我的代码。它对一列进行排序,但在对第二列进行排序时,会覆盖第一个排序并对另一列进行置乱 ActiveWorkbook.Worksheets("Percent").Sort.SortFields.Clear Acti

所以我有四列数据,但只有两列(C列和D列)需要排序。一列是工作中心名称列表(C列),另一列是操作编号(D列)。我想知道的是如何按字母顺序对工作中心名称进行排序,然后在每个工作中心名称中,按升序对操作编号进行排序

因此,数据最终会如下所示:(假设x是一个随机列值)

目前,这是我的代码。它对一列进行排序,但在对第二列进行排序时,会覆盖第一个排序并对另一列进行置乱

   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 

您可以使用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

我想这就是你想要的。

使用下面的代码。这将完成你的工作。如果不起作用,请告诉我

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

谢谢你的回复,但是这段代码对数据的排序与我上面发布的代码几乎相同。它对一列或另一列进行排序,而不是在另一列中进行排序。@ksmit144那么您在寻找什么呢?你能再重复一遍你的问题吗?你能再解释一下吗?我只是试着用那个代码,出于某种原因,尽管工作中心的字母顺序是正确的,但数字仍然不符合顺序。我不确定代码有什么问题,但这就是我使用的:
Dim rng As Range Set rng=Range(“A1:D”&dailyllastrow)rng.Sort key1:=Range(“C1:C”&dailyllastrow),order1:=xlAscending,Key2:=Range(“D1:D”&dailyllastrow),Header:=xlYes
在对第4列排序之后,是否要对第3列进行排序?这意味着您将获得“101020030”和“LDHF SHDF LDHF SHDF LDHF SHDF”抱歉,我刚刚更正了它。我在sub中使用了正确的代码,只是在这里输入了错误的代码。然后尝试设置rng=Range(“A1:D”&dailyllastrow)rng.Sort key1:=rng.Columns(3),order1:=xlAscending,key2:=rng.Columns(4),Header:=xlYes
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