Excel宏可对不同数量的列进行排序

Excel宏可对不同数量的列进行排序,excel,vba,Excel,Vba,我有一个10栏的电子表格(a栏,B栏,…,J栏)。我试图创建一个宏,根据第1行和第3行中的条目(首先按第1行中的值a到Z排序,然后按第3行中的值a到Z排序)对这些列进行排序(即,以B列、D列、a列、…、e列等形式结束) 如果我记录下自己的动作,这很容易。但是,如果将来需要排序的列数发生变化(例如,如果添加了两个新列),则以这种方式记录的宏将不再工作。如何创建对高亮显示的列执行此排序的宏 谢谢虽然我同意之前发表的评论,但这里有一点对你成长的鼓励。 用于删除已知标头名称的代码 ' Delete

我有一个10栏的电子表格(a栏,B栏,…,J栏)。我试图创建一个宏,根据第1行和第3行中的条目(首先按第1行中的值a到Z排序,然后按第3行中的值a到Z排序)对这些列进行排序(即,以B列、D列、a列、…、e列等形式结束)

如果我记录下自己的动作,这很容易。但是,如果将来需要排序的列数发生变化(例如,如果添加了两个新列),则以这种方式记录的宏将不再工作。如何创建对高亮显示的列执行此排序的宏


谢谢

虽然我同意之前发表的评论,但这里有一点对你成长的鼓励。 用于删除已知标头名称的代码

'   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

这两个步骤对我的努力很有用。继续搜索和学习

你应该张贴你尝试过的例子。我什么都没试过,因为我不知道该怎么做。你能张贴你记录步骤时得到的吗?修改它以处理不同的起始范围应该相对简单。我不认为这是OP想要的。Tim,我喜欢你的代码,它更干净一点。我只是尽量避免列引用,而更喜欢变量方法。很好,先生。
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