如何按两个不同的列

时间:2018-05-23 12:05:05

标签: excel vba excel-vba sorting

让我们假设一个图表只包含前两列A和B中的值,如下所示

enter image description here

首先,我想按字母A按字母顺序对图表进行排序,即顶部的X,然后是Y和Z。

第二步应该是考虑到A列的B列的排序,即保留X的块并在B列中对它们进行排序。与Y和Z的块相同。

第一步可以正常使用以下代码:

Sub sort()
Dim SortClmn As String
Dim Area As String
Area= "A1:B10"
SortClmn = "A"
ActiveSheet.Range(Area).Sort _
Key1:=Range(SortClmn & "1"), Order1:=xlDescending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

如何更改此代码以应用第二步?

提前致谢

4 个答案:

答案 0 :(得分:1)

最简单的方法是对B列进行排序,然后对A列进行排序,这将达到您想要的效果。 使用您使用的相同方法,但是先排列第b列,然后排列a。

如果我修改你的代码,它将如下所示

Sub sort()
Dim SortClmn As String
Dim Area As String
Area = "A1:B10"
SortClmn = "B"
ActiveSheet.Range(Area).sort _
Key1:=Range(SortClmn & "1"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
Area = "A1:B10"
SortClmn = "A"
ActiveSheet.Range(Area).sort _
Key1:=Range(SortClmn & "1"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub

答案 1 :(得分:0)

  1. 录制宏;
  2. 选择表格;
  3. 在功能区中 - 数据>排序;
  4. enter image description here

    1. 选择要排序的第一列;
    2. 添加级别;
    3. 选择要排序的第二列;
    4. 查看生成的代码;;
    5. 重构它,避免SelectActivate并放入字符串变量;
    6. Range.Sort Method MSDN

答案 2 :(得分:0)

Sub sort()
    lastRow = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
    With ActiveWorkbook.ActiveSheet.sort
     .SortFields.Clear
     .SortFields.Add Key:=Range("A1:A" & lastRow), Order:=xlAscending
     .SortFields.Add Key:=Range("B1:B" & lastRow), Order:=xlAscending
     .SetRange Range("A2:B" & lastRow)
     .Header = xlNo
     .Apply
    End With
End Sub

这样的东西?

答案 3 :(得分:0)

虽然我(就像@Vityata)认为你可以只记录一个宏并相应地编辑代码....我会给你一个直接的例子:

Activesheet.Range("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1"), Order2:=xlAscending, Header:=xlNo, MatchCase:=False, Orientation:=xlTopToBottom