vba autofilter 筛选

国外网站介绍VBA autofilter 很不错

https://trumpexcel.com/vba-autofilter/#Example-Multiple-Criteria-With-Different-Columns

说实话国外的网站对于VBA的资料相对于国内来说内容更丰富更具有实用性。当然是Bing搜索引擎与百度引擎相比较。

1  显示所有数据,不隐藏数据 (仅在Autofilter模式下使用)

If Worksheets("Function").FilterMode = True Then
    
Worksheets("Function").AutoFilter.ShowAllData
Worksheets("Function").Rows.Hidden = False
    
End If

但是如果是需要VBA高级筛选的话就不能用AutoFiler.ShowAllData 方法,否则报错。因为这个方法只针对AutoFilter情况。可以换成Worksheets("XXX").ShowAllData 

 

 

2 多条件筛选(仅限于两个筛选条件,如果多条件必须是高级筛选)

With w.Range("A1")
.AutoFilter Field:=2, Criteria1:= _
        Array("Teller", "AIO","Plan"), Operator:=xlFilterValues
.AutoFilter Field:=7, Criteria1:="<>t*", Operator:=xlFilterValues
End With

其实有很多博客都写了关于autofilter的函数方法,包括参数用途。但是这里我还是最终想讲一下通配符的作用,没错就是“*”,“?”,“~”。这个坑的我好苦啊(应该是寻找答案的时间比较长,2天时间)

先简要介绍一下这三种通配符。

通配符 意义
~ 类似于转义字符“\” 如果匹配的字符串中含有特殊字符,在特殊字符前加“~”
代表一个字符
* 代表一个或者多个字符

我的需求是第七列(也就是G列)筛选出不含有开头为字母t的内容。一开始以为Criteria筛选可以用正则表达式进行筛选,结果多次尝试后根本就不行,然后无意间找到通配符这个功能,研究了一下,好像也不可以。VBA script regular express 引用也不可以。可能是想得太多了,下班在车上突然想到用<>也就是不等于试一试,没想到成功了。VBA的正则还是有一些不同的。我要好好记住它。

Criteria1:= "<>t*"

 

 

3 高级筛选

国外有一个网站写的很好,不得不说国外的资料比较全。这是因为什么呢?我认为是他们很认真,国内就恐怕做不到。谢谢这位作者。

https://www.thespreadsheetguru.com/blog/2015/2/16/advanced-filters-with-vba-to-automate-filtering-on-and-out-specific-values

上面网站讲述了一个很好的例子。具体情况具体分析。

高级条件筛选

首先要创建一个筛选标准的Excel。如果是逻辑与的话,需要在同一行。反之逻辑或则是非同一行。如下

Assigned To Assigned To Assigned To Sub Category
<>t* <>y* <>io* 01.  Test1
<>t* <>y* <>io* 01.  Test2

 

说明一下"<>"这个符号在Like 函数中无法使用,但是可以再高级筛选中使用。

https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/like-operator

内置模式匹配为字符串比较提供了一个功能多样的工具。 利用模式匹配功能,您可以将通配符、字符列表或字符范围任意组合使用来匹配字符串。 下表显示了 pattern 中允许使用的字符以及它们的匹配项:

_模式_中的字符 _字符串_中的匹配项
? 任意单个字符。
* 零个或多个字符。
# 任何单个数字 (0-9)。
charlist ] charlist 内的任意单个字符。
!charlist ] charlist 外的任意单个字符。

Code

w.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
     Sheets("Critical").Range("A1").CurrentRegion, Unique:=True

 

你可能感兴趣的:(Excel,VBA,autofilter)