0

10 列 (列 A、列 B、...、列 J) のスプレッドシートがあります。行1と3のエントリに従ってこれらの列を並べ替えるマクロを作成しようとしています(つまり、列B、列D、列A、...、列Eのようなものになります)(最初の値によるソート)行 1 の A から Z まで、次に行 3 の値 A から Z まで)。

これは、自分がやっているのを記録すれば簡単です。ただし、将来、順序付けが必要な列の数が変更された場合 (たとえば、2 つの新しい列が追加された場合)、この方法で記録されたマクロは機能しなくなります。強調表示された列でこの順序付けを実行するマクロを作成するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0
Sub SortColumns()

    Dim rngSort As Range

    With ActiveSheet

        Set rngSort = .Range("A1").CurrentRegion

        With .Sort.SortFields
        .Clear

        .Add Key:=rngSort.Rows(1), SortOn:=xlSortOnValues, _
                             Order:=xlAscending, DataOption:=xlSortNormal

        .Add Key:=rngSort.Rows(3), SortOn:=xlSortOnValues, _
                             Order:=xlAscending, DataOption:=xlSortNormal
        End With

        With .Sort
            .SetRange rngSort
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlLeftToRight
            .SortMethod = xlPinYin
            .Apply
        End With

    End With


End Sub
于 2012-11-28T19:21:34.803 に答える
0

以前に投稿されたコメントには同意しますが、ここであなたの成長を少し励まします。コード 既知のヘッダー名の削除用

'   Delete Extranious Rows based on header name
    Dim cellcolumn As Integer
'   Replace each name in "" with the names of headers you do want
    For Each b In Array("Unit Type", "Unit Profile", "Drop Profile", "Delivery Type", "Activity Time", "Miles")
        On Error Resume Next
        rng1 = b
        strSearch = rng1
            Set aCell = Sheets("Sheet1").Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
                                        LookAt:=xlWhole, SearchOrder:=xlByRows, _
                                        SearchDirection:=xlNext, MatchCase:=False, _
                                        SearchFormat:=False)
            cellcolumn = aCell.Column
            Columns(cellcolumn).EntireColumn.Select
            Selection.Intert Shift:=xlToRight
    Next b

完了しようとしているタスクは、複数の方法で達成できます。このメソッドは無関係な情報を削除します。次のセグメントでは、何をどこに移動するかがわかっている場合に情報を整理します。

Sub Organize()

'   Organize Trip Stat
    Dim Heder(1 To 5) As String
    Heder(1) = "trip_id"
    Heder(2) = "driver_id"
    Heder(3) = "route_nbr"
    Heder(4) = "trailer_id"
    Heder(5) = "trip_type_code"
    For a = 1 To 5

Call Organize(Heder(a))

Next a
End Sub

プロセスを完了するために次のコードが呼び出されます

Function Organize(TheHeder)
For b = 1 To 50
If Cells(1, b).Text = TheHeder Then
Cells(1, b).EntireColumn.Select
    If Range("B1").Text = TheHeder Then GoTo nextstep:
    Selection.Cut
    Columns(2).Select
    Selection.Insert (xlToRight)
End If
Next b
nextstep:
End Function

この 2 つのステップは、私の努力において役に立ちました。探し続けて学びましょう!

于 2012-11-28T13:59:09.233 に答える