我正在寻找一个解决过滤问题的简单方法。我正在尝试过滤掉Field 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"
这失败了,所以我试图使用一个数组,但似乎也失败了。它返回时只有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")
你不能使用超过2不相等。使用不相等的值构建字典或arraylist,并将其用作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
难道你不能只创建一个Filter列并在其中放入一个if语句吗?就像是:
=IFERROR(FIND("RB",UPPER(C9)),0)+IFERROR(FIND("RC",UPPER(C9)),0)+IFERROR(FIND("RG",UPPER(C9)),0)
然后过滤该列= 0以排除所有RB,RC,RG