Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何按两列对Excel工作表进行排序_Vba_Excel_Sorting - Fatal编程技术网

Vba 如何按两列对Excel工作表进行排序

Vba 如何按两列对Excel工作表进行排序,vba,excel,sorting,Vba,Excel,Sorting,让我们假设一个图表只有前两列a和B中的值,如下所示 首先,我想按字母顺序将图表按列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

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

首先,我想按字母顺序将图表按列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
我需要如何更改此代码以应用第二步

提前谢谢

  • 记录一个宏
  • 选择表格
  • 在功能区中-数据>排序

  • 选择要排序的第一列
  • 按添加级别
  • 选择要排序的第二列
  • 查看生成的代码
  • 重构它,避免
    选择
    激活
    并放入字符串变量

    最简单的方法是对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
    

    类似这样的内容?

    谢谢@Ricards,但此代码仅对第2列进行排序。第一步不知何故被否决了。我做了一个测试,对两列进行了排序,所以a列被排序在B列之后,但B仍然被细分为a列。这对我来说确实有效。。。
    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