宏仅对突出显示的文本进行Excel排序

时间:2018-05-30 16:43:30

标签: excel vba excel-vba sorting

所以这是我第一次尝试在Excel中创建一个宏,所以想知道是否有人可以帮助我。我有一个长达几页的电子表格,有几个不同但相似的数据集。不同的数据集适用于不同的客户,我需要将它们分开,但我想创建一个宏来按列B组织不同的数据集,然后按列D.我从这个宏开始:

Sub Sort_Twice()
'
' Sort_Twice Macro
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B12") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("D2:D12") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:G12")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

因此,这将对A1和G12之间的所有内容进行排序,因为这是我开始录制时突出显示的内容。有关如何允许我突出显示新块并仅在这些字段上运行宏的任何建议?我能找到的唯一的东西就是在这里更改游侠中列出的细胞,但这似乎与我正在尝试做的事情相违背。

2 个答案:

答案 0 :(得分:1)

如果您可以命名每个数据集的范围,您可以执行以下操作:

Sub SortRanges()
    Dim TargetSheet As Worksheet
    Dim RangeName As Variant
    Dim CurrentRange As Range
    Set TargetSheet = ThisWorkbook.Worksheets(1)
    For Each RangeName In Array("Range1", "Range2", "Range3")
        Set CurrentRange = TargetSheet.Range(RangeName)
        CurrentRange.Sort key1:=CurrentRange.Columns(2), key2:=CurrentRange.Columns(4)
    Next
End Sub

它将采用范围名称列表并在第2列和第4列上逐一对其进行排序。如果您无法命名范围,请在代码中创建一系列范围。

答案 1 :(得分:1)

您可以对整个列进行排序。 我不知道你是否必须清除排序字段,我只是把它留在那里。

Sub CDER()
    Dim sh As Worksheet
    Set sh = Sheets("Sheet1")

    With sh
        .Sort.SortFields.Clear
        .Range("B:B").Sort key1:=.Range("B:B"), order1:=xlAscending, Header:=xlYes
        .Range("G:G").Sort key1:=.Range("G:G"), order1:=xlAscending, Header:=xlYes
    End With


End Sub