【发布时间】:2015-04-30 11:36:47
【问题描述】:
我正在尝试编写代码,其中有人可以输入列名列表,数据应该按照这些列名进行排序:
用于排序的数据是位于同一工作表上的动态范围:
下面是我目前的代码:
updateTab = Sheets("RAW_DATA_SO").Range("B8")
lastRow = Sheets("RAW_DATA_SO").Range("A1048576").End(xlUp).Row
Dim sortBy() As String
ReDim sortBy(lastRow - 12)
For rowNumber = 12 To lastRow
sortBy(rowNumber - 12) = Sheets("RAW_DATA_SO").Range("A" & rowNumber)
Next
lastColumnAddress = Sheets("RAW_DATA_SO").Range("XFD1").End(xlToLeft).Address(False, False)
serchrange = "A1:" & lastColumnAddress
Set sortRange = Range(Cells(1, 10), Cells(lastRow, lastColumn))
For i = 0 To UBound(sortBy)
Set FindColumn = Sheets("RAW_DATA_SO").Range(serchrange).Find(What:=sortBy(i), LookIn:=xlValues, LookAt:=xlWhole)
sortByColumn = FindColumn.Address(ReferenceStyle)
sortRange.Sort key1:=Range(sortByColumn), order1:=xlAscending, Header:=xlYes
Next
问题是数据一次只排序一列。如何重写数据按多列排序的排序过程?我找到了可以添加更多列的代码,但它们并不灵活,总是假设我们现在按数据将被排序的列数。我想让添加排序方式列表成为可能......
【问题讨论】:
-
您可能对这篇最近的帖子感兴趣:Sort predetermined fields with a macro.
-
如果您要添加所有这些动态自动化,您是否考虑过使用 C 列(B8:B10 旁边)进行升序/降序?