2

私は 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

リストになくてもスプレッドシートに表示されるものはすべて、リストの最後に分類されます。以下は、近いが完全ではない 2 つのマクロです。(原文に修正を加えています)

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 に答える