Excel VBA筛选超过2个条件

Excel VBA筛选超过2个条件,excel,vba,filter,Excel,Vba,Filter,我正在寻找一个简单的解决方案,我有一个过滤问题。我试图过滤掉字段9中的以下字母组合:RB、RC和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).R

我正在寻找一个简单的解决方案,我有一个过滤问题。我试图过滤掉字段9中的以下字母组合:
RB
RC
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:="<>RB", Operator:=xlAnd, Criteria2:="<>RC", Operator:=xlAnd, Criteria3:="<>RG"

您不能使用多于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

您不能使用多于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

我通过按颜色过滤手动排除了2个以上的条件。如果您的表没有定义填充,则此代码将起作用

ActiveSheet.Range("A1:CU" & lrow).AutoFilter Field:=9, Criteria1:=Array("RB", _
    "RC", "RG"), Operator:=xlFilterValues
ActiveSheet.Range("A1:CU" & lrow).SpecialCells(xlCellTypeVisible).Interior.Color = 1 
' 1 is a black fill, change to your preference
ActiveSheet.Range("A1:CU" & lrow).AutoFilter Field:=9, Operator:= _
    xlFilterNoFill
'ActiveSheet.Range("A1:CU" & lrow).Autofilter Field:=9 
'this code will unfilter the range, can be used for testing to confirm everything you  _ 
expected to filter was filtered

我通过按颜色过滤手动排除了2个以上的条件。如果您的表没有定义填充,则此代码将起作用

ActiveSheet.Range("A1:CU" & lrow).AutoFilter Field:=9, Criteria1:=Array("RB", _
    "RC", "RG"), Operator:=xlFilterValues
ActiveSheet.Range("A1:CU" & lrow).SpecialCells(xlCellTypeVisible).Interior.Color = 1 
' 1 is a black fill, change to your preference
ActiveSheet.Range("A1:CU" & lrow).AutoFilter Field:=9, Operator:= _
    xlFilterNoFill
'ActiveSheet.Range("A1:CU" & lrow).Autofilter Field:=9 
'this code will unfilter the range, can be used for testing to confirm everything you  _ 
expected to filter was filtered

如果在工作表中包含条件不是问题(可以隐藏)

在代码中,您可以将条件放在隐藏表中

Range("C1:D9").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Sheets("Sheet2").Range("G1:I2"), Unique:=False      

如果在工作表中包含条件不是问题(可以隐藏)

在代码中,您可以将条件放在隐藏表中

Range("C1:D9").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Sheets("Sheet2").Range("G1:I2"), Unique:=False      

您不能创建一个筛选器列并在其中放入if语句吗?比如:

=IFERROR(FIND("RB",UPPER(C9)),0)+IFERROR(FIND("RC",UPPER(C9)),0)+IFERROR(FIND("RG",UPPER(C9)),0)

然后在该列上筛选=0以排除所有RB、RC、RGs

难道不能创建一个筛选列并在其中放入if语句吗?比如:

=IFERROR(FIND("RB",UPPER(C9)),0)+IFERROR(FIND("RC",UPPER(C9)),0)+IFERROR(FIND("RG",UPPER(C9)),0)

然后在该列上过滤=0以排除所有RB、RC、RGs

您不能使用多于2个不相等项。用不相等的值构建字典或数组列表,并将其用作数组筛选器。我担心。。。那就太难了(不能使用多于2个不相等的值。用不相等的值构建一个字典或数组列表,并将其用作数组筛选器。我担心这一点……当时的情况很难做到。)(