我需要按四列对表格进行排序。经常。这就是我写宏的原因。我写的那个(我不会在这里给出它的代码,因为:1.这个问题与他无关;2.我不想“夸大”这个问题),没有工作到最后。出于这个原因,我通过在编辑组中找到排序和过滤工具并单击自定义排序,使用宏记录器录制了一个宏。在现有的基础上添加了三个级别,并选择了我需要的列。这是输出:
Sub macro_record()
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort. _
SortFields.Add Key:=Range("A2:A1000000"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort. _
SortFields.Add Key:=Range("C2:C1000000"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort. _
SortFields.Add Key:=Range("E2:E1000000"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortTextAsNumbers
ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort. _
SortFields.Add Key:=Range("G2:G1000000"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").AutoFilter. _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
问题是:Excel 如何“理解”要排序的范围?换句话说,程序在哪一行代码中为计算机提供了要排序的范围地址?
关于自动过滤器(数据过滤器选项卡)
受自动过滤器影响的范围取决于数据的位置和在设置过滤器之前选择的范围。
最简单的(选项 1):选择包含数据的整个范围 - 所有选定的都在过滤器中,包括位于空行下方的行(数据中断)。
未选择包含数据的整个范围。过滤器包括来自所选范围(var. 2)的所有列的数据,但它以行开头......您需要了解自动过滤器本身会尝试确定标题和过滤范围。
在包含数据的区域(变量 3)中选择了一个单元格 - 在过滤器中,包含数据的整个单元格区域,受空列和行的限制(即,如果空行下方有数据,它们不属于筛选)。如果选择的范围包括所有包含数据的列并且第一行是包含数据的第一行 (var.4),则相同。
选择了一个单元格,周围没有数据 - 过滤器中没有过滤的单元格,只有标题(var.5)
选择了不是来自第一行数据的范围(var.6,var.7) - 上面的行不属于过滤器。
如果单元格为空并且与上面包含数据的行有联系,则过滤器还将包括具有所选单元格的行(var.8,var.9)
如果单元格为空并且没有与包含数据的单元格联系,则不会安装自动过滤器(var.10)。
等等
关于排序(选项卡Data-Sort)
在这里您可以设置自定义排序:顺序(按列或行)、顺序(升序、降序、列表)、类型(按值、颜色)。
有几个细微差别。
如果未选择所需范围,则会自动确定过滤范围(几乎就像在自动过滤器中一样) - 相对于活动单元格。
如果选中的范围与未选中的数据相邻,则需要确认过滤范围(扩大范围或保持选中状态进行排序)。
确定排序范围内是否会有标题的复选框:如果未选中该复选框,则将过滤所选范围的第一行(即使这些是自动过滤标题)
录制宏时必须考虑所有这些点。
指定范围(
.Range("A1:G2000"));要在设置过滤器时排除错误,请删除过滤器(.AutoFilterMode = False);放一个过滤器(.AutoFilter);设置排序参数(.SortFields);标题 - 是的,是的(.Header = xlYes);不需要区分大小写 (.MatchCase = False);我们要求您将给定的排序应用于我们的对象 (.AutoFilter.Sort.Apply)但是自动过滤器真的有必要吗?没有它你也可以排序。同时添加范围高度的定义(变量
LastRow)排序范围由字符串给出
并且由于指示有标题(
Sort.Header = xlYes),因此可排序范围从第二行开始指示。显示的代码在活动工作表上工作