Excel VBA Range.AutoFilter过滤等号(“=”)

时间:2017-03-03 11:01:26

标签: excel vba excel-vba autofilter

我有一个表tbl_recommendations,其中包含第13列中的以下值:---=+++

现在,我想过滤=+++。这可以手动正常工作,但是,在使用VBA进行=过滤时,我遇到了一些问题。只需使用宏录制器,它就会给我以下代码:

Sub Test()

ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", " = "), Operator:=xlFilterValues

End Sub

执行此宏时,它仅过滤+++,但不过滤=。有什么诀窍?

3 个答案:

答案 0 :(得分:0)

这是基于在进行过滤时录制宏并且似乎有效:

Sub Test()

ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", "="), Operator:=xlFilterValues

End Sub

答案 1 :(得分:0)

这很奇怪但是如果你运行宏录制器来过滤“+”,“++”和“=”(带空格)标准,那么:

  • 它写下面的代码:

    ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
    Criteria1:=Array("+", "++", "="), Operator:=xlFilterValues
    

    所以它删除了“=”字符

  • 之前和之后的“空格”
  • 它正确过滤了表格,其中显示了表格第13列中带有“+”,“++”和“=”(带空格)内容的记录

但如果您运行该宏,则不再过滤“=”(带空格)记录!

假设必须有一些巫术涉及过滤器和“=”字符,你可以用这个小解决方法来阻止它:

With ActiveSheet.ListObjects("tbl_recommendations").Range
    .columns(13).Replace what:=" = ", Replacement:="|=|", lookat:=xlWhole '<--| substitute "forbidden" " = " criteria with a "valid" one
    .AutoFilter Field:=13, Criteria1:=Array("+", "++", "|=|"), Operator:=xlFilterValues '<--| filter with "valid" criteria

        ' your code to act on filtered cells
        '....

    .columns(13).Replace what:="|=|", Replacement:=" = ", lookat:=xlWhole '<--| finally bring " = " back in place!
End With

答案 2 :(得分:0)

我试图在每个字符前添加一个附加的等号,这似乎可行:

ActiveSheet.ListObjects("tbl_recommendations").Range.AutoFilter Field:=13, _
Criteria1:=Array("=+", "=++", "=="), Operator:=xlFilterValues