2017-02-10 118 views
2

我使用下面的宏记录按升序对列L进行排序,但似乎有点荒谬,必须使用12行代码来排序。有没有更高效的方法来做到这一点?根据列“L”按升序对范围进行排序

我需要它整个片材进行排序,根据列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

下面的行会以升序排序为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 

编辑,以反映纳入整个工作表

+0

虽然如上所述,这也起作用,我意识到我应该对列L上的整个工作表进行排序,而不是仅仅对L进行排序:BB – CC268

+0

@ CC268请参阅编辑。我包括第二个选项来排列L列中所有数据在您的工作表上 – cheshire

+0

您是否想要在某处定义StartCell? @SnWhte – CC268

1

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

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

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

+0

这个功能完美 - 我们可以修改它,只是将整个工作表排序,而不是L:BB?我只是意识到这是我需要做的。有没有一种方法可以指定整个工作表与硬编码列A,无论我的最后一列是什么? @TylerH – CC268

+0

@ CC268嘿,当然。我已经更新了我的答案。不过,我看到你也从SnWhte那里得到了帮助。使用哪个最适合你。 – TylerH

+0

Downvoter请注意评论你为什么觉得我的回答没有用,所以我可以改进它? – TylerH

相关问题