按行sorting

有没有什么办法让人们用下面的例子来模仿macros中的sorting命令?

我有60行53列的数据。 在使用sorting命令时,我确实能够得到我想要的结果,但是相信如果我可以有一个macros,它会为我节省很多时间。 你可以看到之前和之后的图像有一个我一直在努力完成的视觉。

[ Sort之前 ]

[ 排序后 ]

例如

SORT LEFT TO RIGHT SORT BY [ROW 2] | SORT ON [VALUES] | ORDER [SMALLEST TO LARGEST] SORT BY [ROW 3] | SORT ON [VALUES] | ORDER [SMALLEST TO LARGEST] ... ... SORT BY [ROW 59] | SORT ON [VALUES] | ORDER [SMALLEST TO LARGEST] SORT BY [ROW 60] | SORT ON [VALUES] | ORDER [SMALLEST TO LARGEST] 

更新:我运行macroslogging器,看看会是什么样子,这是从第2行到第61行缩短的代码。

 Sub Macro3() ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B2:BB2") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B3:BB3") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B4:BB4") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B5:BB5") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ...MORE ROWS HERE IN THE PATTERN AS SHOWN ...MORE ROWS HERE IN THE PATTERN AS SHOWN ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B57:BB57" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B58:BB58" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B59:BB59" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B60:BB60" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet11").Sort.SortFields.Add Key:=Range("B61:BB61" _ ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet11").Sort .SetRange Range("B1:BB63") .Header = xlYes .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With End Sub 

有没有办法使这个更简洁?

您可以直接在Excel中按行sorting,不需要VBA:

 Data->Sort->Options...->Sort left to right 

我想从vba中sorting,指定行作为条件字段:

 Sub SortByRows() With ActiveSheet.UsedRange .Sort Key1:=.Rows(1), Key2:=.Rows(2), Key3:=.Rows(3) End With End Sub 

不过,您的标准数量有限。 既然你需要更多的标准领域,这是棘手的:

 Sub SortByRows() With ActiveSheet Set target = .Range(.Cells(2, 2), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)) End With With ActiveSheet.Sort .SortFields.Clear .SetRange target .Orientation = xlLeftToRight .Header = xlNo For Each r In target.Rows .SortFields.Add r Next .Apply End With End Sub