首页 > 解决方案 > VBA过滤器函数中的范围指的是什么

问题描述

想检查下 ActiveSheet.Range("$A$1:$O$1583").AutoFilter Field:=7, Criteria1:="=", range $O$1583" 指的是什么?

 sub Filter  
       ‘Remove empty cell in column G,K,L’
            Range("A2").Select
            Selection.End(xlDown).Select
            Selection.End(xlUp).Select
            Range("B2").Select
            ActiveSheet.Range("$A$1:$O$1583").AutoFilter Field:=7, Criteria1:="="
            ActiveSheet.Range("$A$1:$O$1583").AutoFilter Field:=11, Criteria1:="="
            ActiveSheet.Range("$A$1:$O$1583").AutoFilter Field:=12, Criteria1:="="
            Rows("10:10").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Delete Shift:=xlUp
        ActiveSheet.ShowAllData
    End sub

标签: excelvbafilter

解决方案


ActiveSheet.Range("$A$1:$O$1583")是要过滤的范围。A1是左上角的单元格,而是O1583右下角的。此单元格位于第 1583 列O的第 1583 行。

这些$标志可以被删除,在 VBA 中它们并不重要。在 Excel 中$,符号表示美元符号之后的行或列是锚定的或绝对的。当您复制 Excel 公式时,它们将复制该公式中相对于它们被复制到的位置引用的单元格。

试试这行来查看选择的范围:

Sub TestMe
    ActiveSheet.Range("$A$1:$O$1583").Select
End Sub

范围很重要,因为它显示了过滤后的范围。想象一下这个数据:

在此处输入图像描述

运行此Range("A1:G10").AutoFilter命令后,您会看到过滤器中只有 1 到 6 的值,并且MORE不存在。但是,如果您在从过滤器末尾到MORE(第 11、12、13、14 行)的所有单元格中写入值,它将存在,因为 Excel 会认为值已增加。

同样按列,您不能过滤到超出范围的字段。Range("$A$2:$B$1583").AutoFilter Field:=3不起作用,因为您希望按 2 列范围中的第 3 列进行过滤。


推荐阅读