【问题标题】:What does the range in a VBA filter function refers toVBA过滤器函数中的范围指的是什么
【发布时间】:2018-11-05 18:51:11
【问题描述】:

要检查下 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

【问题讨论】:

    标签: excel vba filter


    【解决方案1】:

    ActiveSheet.Range("$A$1:$O$1583") 是要过滤的范围。 A1 是左上角的单元格,O1583 是右下角的。此单元格在 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 列进行过滤。

    【讨论】:

    • 一开始我也是这么想的。我尝试将 ActiveSheet.Range 更改为 A1:O1,但仍然得到相同的结果。我能断定范围是多余的吗?
    • @cheesengng - 没有。请参阅更新的答案以获取想法。在您的情况下,可能没有空行。在第 100 行和第 101 行制作 2 个空行以查看差异。
    • 我说得对吗,只要中间没有空白/行,过滤器范围会相应地自动增加吗?
    • @cheesengng - 是的。
    • 此外,您不能按列过滤到超出范围的字段。 Range("$A$2:$B$1583").AutoFilter Field:=3 不起作用,因为您希望按 2 列范围中的第 3 列进行过滤。
    猜你喜欢
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多