VBA过滤超过2个条件

Dek*_*eke 0 excel vba filter

我正在寻找一种简单的解决方案来解决我遇到的过滤问题。我想在现场9过滤掉下面的字母组合:RBRCRG。我尝试了几种方法。我尝试的第一种方法是:

  Set Bigpic = Workbooks.Open("S:\NFInventory\groups\CID\CID Database\BigPic Files\BigPic 2018.xlsx", , , , , , , , True)
     lrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
     Rows("1:1").Select
     Selection.AutoFilter
     ActiveSheet.Range("A1:CU" & lrow).AutoFilter Field:=9, Criteria1:="<>RB", Operator:=xlAnd, Criteria2:="<>RC", Operator:=xlAnd, Criteria3:="<>RG"
Run Code Online (Sandbox Code Playgroud)

这失败了,所以我尝试使用一个数组,但这似乎也失败了。它返回时仅RG被过滤,而其他则保留。向正确方向的任何推动都会有所帮助。

 Set Bigpic = Workbooks.Open("S:\NFInventory\groups\CID\CID Database\BigPic 
 Files\BigPic 2018.xlsx", , , , , , , , True)
     lrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
     Rows("1:1").Select
     Selection.AutoFilter
     ActiveSheet.Range("A1:CU" & lrow).AutoFilter Field:=9, 
 Criteria1:=Array("<>RB", "<>RC", "<>RG")
Run Code Online (Sandbox Code Playgroud)

小智 5

您不能使用超过2个不等于。根据不相等的值构建字典或数组列表,并将其用作带有xlfiltervalues的数组过滤器。

dim i as long, lr as long, arr as object

set arr = createobject("scripting.dictionary")

with ActiveSheet

     lr = .Cells(Rows.Count, 1).End(xlUp).Row

     for i=2 to lr
         select case ucase(.cells(i, "I").value2)
             case "RB", "RC", "RG"
                 'do nothing
             case else
                 arr.item(.cells(i, "I").value2) = vbnullstring
         end select
     next i

     .Range("A1:CU" & lr).AutoFilter Field:=9, criteria1:=arr.keys, operator:=xlfiltervalues

end with
Run Code Online (Sandbox Code Playgroud)