Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel 如何在VBA中根据一个参数,然后根据另一个参数进行排序?_Excel_Vba - Fatal编程技术网

Excel 如何在VBA中根据一个参数,然后根据另一个参数进行排序?

Excel 如何在VBA中根据一个参数,然后根据另一个参数进行排序?,excel,vba,Excel,Vba,我已经成功地编写了代码,一旦从下拉列表中选择了一个选项,该代码将自动对数据进行排序。该代码如下: Private Sub Worksheet_Change(ByVal Target As Range) Range("A7:AF200").Sort key1:=Range("D7:D200"), _ order1:=xlAscending, Header:=xlNo Dim lastrow As Long lastrow = Cells(Rows.Cou

我已经成功地编写了代码,一旦从下拉列表中选择了一个选项,该代码将自动对数据进行排序。该代码如下:

    Private Sub Worksheet_Change(ByVal Target As Range)

    Range("A7:AF200").Sort key1:=Range("D7:D200"), _
    order1:=xlAscending, Header:=xlNo

    Dim lastrow As Long
    lastrow = Cells(Rows.Count, 2).End(xlUp).Row
    Range("A7:AF" & lastrow).Sort key1:=Range("D7:D" & lastrow), _
    order1:=xlAscending, Header:=xlNo

    ActiveWorkbook.Worksheets("Job List").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Job List").Sort.SortFields.Add Key:=Range("D:D"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
    "Pre-Design,Design,Tender,Construction,Post Construction", DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Job List").Sort
    .SetRange Range("A7:AE9999")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With

    End Sub
但是,在按自定义顺序对作业列表进行排序之后,我需要按照单元格A7:A中输入的作业编号对数据进行升序排序

例如:

110.05客户端BC预设计 21.02客户端XYZ预设计 84.10客户新的预设计 变成

21.02客户端XYZ预设计 84.10客户新的预设计 110.05客户端BC预设计
通过添加额外的排序,可以自动对多个列进行排序

Private Sub Worksheet_Change(ByVal Target As Range)

    Range("A7:AF200").Sort key1:=Range("D7:D200"), _
    order1:=xlAscending, Header:=xlNo

    Dim lastrow As Long
    lastrow = Cells(Rows.Count, 2).End(xlUp).Row
    Range("A7:AF" & lastrow).Sort key1:=Range("D7:D" & lastrow), _
    order1:=xlAscending, Header:=xlNo

    ActiveWorkbook.Worksheets("Job List").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Job List").Sort.SortFields.Add Key:=Range("D:D"), _
    SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
    "Pre-Design,Design,Tender,Construction,Post Construction", DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Job List").Sort.SortFields.Add Key:=Range("A7:A9999"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Job List").Sort
    .SetRange Range("A7:AE9999")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With

    End Sub

你知道这是三种排序操作,它们做的几乎完全一样…?显然不是,我的编码教育可以追溯到5年前大学的一个短期初学者课程。从那以后就没用过!