使用自定义列表分别对每行进行排序

时间:2012-10-08 19:50:18

标签: excel-vba customization sorting vba excel

我已经研究了几个网站两天了,并且已经提出了几个接近我需要但不完全正确的宏。如果我不在正确的地方,请有人指导我到我需要去的地方吗?

我希望那里的某个人能够调整我所拥有的东西,这样才能奏效。下面是我正在使用的Excel行的副本。

MT MD BB AA CC
MT MD AK
MT MD LX A2
MT MD LA SO VL AH PH

A7 LW A1
SC
MT MD GL A1
MT MD
A7 A1 A2
MT MD A1 AH

MT MD A4 AD A7 AK A1 AH PH A2 A7 AH AJ PH

。我需要使用自定义列表对每一行进行排序:

MT MD BU ED TI作为CI MP FF NF A1 A2 A7 LX GL CR BA WS

列表中没有但显示在电子表格上的任何内容都将落在列表的末尾。 下面是两个接近但不完全的宏。 (我对原件进行了修改)

Sub test()
ActiveWorkbook.Worksheets("Sheet1").Range("3:100").Sort _
    Key1:=ActiveWorkbook.Worksheets("Sheet1").Range("3:100").Row(2), _
    Header:=xlYes, _
    Orientation:=xlSortRows, _
    MatchCase:=False, _
    SortMethod:=xlPinYin
End Sub     


Sub Macro5()

    Rows("3:30").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Rows("2:2"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        "MT,BU,MD,ED,TI,AS,CI,MP,FF,NF,A1,A2,A7,LX,CR,BA,GL,WS", DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Rows("3:30")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub         

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可能需要单独对行进行排序,请尝试:

Dim lRow As Long

Application.ScreenUpdating = False

For lRow = 3 To 30
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SortFields.Clear
        .SortFields.Add Key:=.Parent.Rows(lRow & ":" & lRow), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        "MT,BU,MD,ED,TI,AS,CI,MP,FF,NF,A1,A2,A7,LX,CR,BA,GL,WS", DataOption:=xlSortNormal
        .SetRange .Parent.Rows(lRow & ":" & lRow)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
Next lRow

Application.ScreenUpdating = True