从动态行排序

时间:2018-12-19 15:30:46

标签: excel vba excel-vba

我正在对电子表格的两个部分进行排序,顶部工作正常,而下半部分却有问题,因为该行根据数据而变化。这就是我所拥有的,问题是它最终对整个(两个)部分(由换行符分隔)进行排序。在正确方向上的任何帮助将不胜感激。

编辑说明: 我所拥有的是一个包含两个部分的电子表格。顶部可以是可变/动态范围。 IE可能是30行或300行。电子表格的后半部分由行插入(单元格的空白行)分隔,我需要进行排序并遇到问题。问题在于如何识别从A(可变/动态)行到CU的单元格。希望这有助于更好地解释事情,但是如果需要更多说明,请告诉我。

 Sub test()

 Dim lrow As Long

 lrow = Selection.End(xlDown).Row

Selection.End(xlDown).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Inseason Columns").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Inseason Columns").Sort.SortFields.Add Key:=Range( _
    "E" & lrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Inseason Columns").Sort
    .SetRange Range("A:CU", Selection.End(xlDown))
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub

1 个答案:

答案 0 :(得分:2)

如果“换行符”是空白行,请将其隐藏,然后可以在Range.Rare.Areas of Range.SpecialCells(xlCellTypeVisible)中循环浏览。

Option Explicit

Sub sortAreas()

    Dim a As Long

    With Worksheets("sheet10")

        .range("1:2").entirerow.hidden = true
        .Columns("E").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True

        With Intersect(.Range("A:CU"), .UsedRange).SpecialCells(xlCellTypeVisible)

            For a = 1 To .Areas.Count

                With .Areas(a)

                    .Cells.Sort Key1:=.Columns(5), Order1:=xlAscending, DataOption1:=xlSortTextAsNumbers, _
                                Orientation:=xlTopToBottom, Header:=xlNo

                End With
            Next a

        End With

        .Columns("E").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = False
        .range("1:2").entirerow.hidden = false

    End With

End Sub