2

我研究了几个站点两天,并提出了几个接近我需要但不准确的宏。如果我不在正确的地方,有人会指导我去我需要去的地方吗?

我希望有人可以调整我所拥有的东西,这样它就可以工作了。下面是我正在使用的 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 AS 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         

有什么想法吗?

4

1 回答 1

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
于 2012-10-08T23:10:02.387 回答