根据列" L"排序范围按升序排列

时间:2017-02-10 17:26:53

标签: excel excel-vba sorting vba

我使用下面记录的宏来按升序排序列L,但是必须使用12行代码对某些内容进行排序似乎有点荒谬。是否有更多"高效"这样做的方法?

我需要它根据L列对整张纸进行排序。

Sheets("Sheet1").Range("A1").End(xlToRight).AutoFilter
Sheets("Sheet1").AutoFilter.Sort.SortFields.Clear
Sheets("Sheet1").AutoFilter.Sort.SortFields.Add Key:=Range _
    ("L1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortTextAsNumbers
With Sheets("Sheet1").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

2 个答案:

答案 0 :(得分:2)

以下行将按升序对L列进行排序。

 Sheets("Sheet1").Sort Key1:=Range("L1"), Order1:=xlAscending

这将对整个表单进行排序,对只是数据进行排序,我会声明几个变量,如下所示:

Dim lastRow As Long, lastColumn As Long, StartCell AS Range, s As Worksheet

Set s = Sheets("Sheet1")
Set StartCell = Range("A1")
lastRow = s.Cells(s.Rows.Count, StartCell.Column).End(xlUp).Row
lastColumn = s.Cells(StartCell.Row, s.Columns.Count).End(xlToLeft).Column

s.Range(StartCell, s.Cells(lastRow, lastColumn)).Sort _
 Key1:=Range("L1"), Order1:=xlAscending

编辑以反映包含整个表

答案 1 :(得分:1)

如果您的数据在第1行开始并且将保留在第1行,则可以使用此选项:

Columns.Sort key1:=Range("L1"), order1:=xlAscending

这将根据列L1中的值对所有列进行排序。