我已经有一段时间没有使用VBA了,我非常生锈。 我有一个Excel工作表,其中有几列数据。 例如,现在我在A到E列中有数据。A列中的所有行都已满,但是对于下一列,某些单元格可以为空。我正在尝试编写一个宏,该宏将按以下顺序自动对数据进行排序: 对A列中的数据进行排序,然后对B列中的数据进行排序,然后对C列中的数据进行排序,依此类推。 我希望宏具有自适应性,并且如果将数据添加到下一列(在这种情况下为F),仍然能够对数据进行排序。
我尝试了在线找到的不同解决方案,但是它们都不起作用,因为它们都暗示了预定义的列数。我记录了一个宏并尝试对其进行调整,但是我看不到如何使其足够灵活以至于看到一个新列。 我有一个宏,可以给我最后一列和最后一行包含数据。我正在尝试使用它,所以我可以告诉我的排序宏需要处理多少列,但是我看不到如何实现它。 这是我从录制宏后得到的内容:
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add
Key:=Range("A1:F80") _
, SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add
Key:=Range("B1:B80") _
, SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add
Key:=Range("C1:C80") _
, SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add
Key:=Range("D1:D80") _
, SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add
Key:=Range("E1:E80") _
, SortOn:=xlSortOnValues, Order:=xlAscending,
DataOption:=xlSortNormal
这行不通,因为这意味着我已经知道我有多少列。处理额外一列的唯一方法是在宏运行时添加一行代码(在本例中为F列)。那可能吗? 是否有更好/不同的方法提供更大的灵活性? 谢谢。
答案 0 :(得分:2)
浏览排序范围的列,将其添加到排序顺序,如下所示:
Sub tgr()
Dim rSort As Range
Dim i As Long
Set rSort = ActiveWorkbook.ActiveSheet.Range("A1").CurrentRegion
With rSort.Parent.Sort
.SortFields.Clear
For i = 1 To rSort.Columns.Count
.SortFields.Add rSort.Columns(i), xlSortOnValues, xlAscending, , xlSortNormal
Next i
.SetRange rSort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub