【发布时间】:2019-05-10 03:43:33
【问题描述】:
我有一段时间没有使用 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 列)。那可能吗? 是否有更好/不同的方法提供更大的灵活性? 谢谢。
【问题讨论】: