首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VBA筛选2个以上的条件

VBA筛选2个以上的条件
EN

Stack Overflow用户
提问于 2019-01-08 02:33:32
回答 4查看 1.3K关注 0票数 0

我正在寻找一个简单的解决方案来解决我的过滤问题。我正在试着过滤掉第九栏中的以下字母组合:RB__,RCRG。我尝试了几种方法来做到这一点。我尝试的第一种方式是:

代码语言:javascript
复制
  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被过滤掉了,而其他的则留了下来。任何推动正确方向的努力都将是有帮助的。

代码语言:javascript
复制
 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")
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-08 02:47:35

你不能使用2以上的不等于。使用不相等的值构建一个字典或数组列表,并将其用作具有xlfiltervalue的数组过滤器。

代码语言:javascript
复制
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
票数 5
EN

Stack Overflow用户

发布于 2019-01-08 03:42:13

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

在代码中,您可以将条件放在hide sheet中

代码语言:javascript
复制
Range("C1:D9").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
    Sheets("Sheet2").Range("G1:I2"), Unique:=False      
票数 1
EN

Stack Overflow用户

发布于 2019-01-08 03:35:28

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54079906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档