Excel VBA AutoFilter 多字段筛选_用vba实现任意列包含字符的高级筛选


这段代码含义和上一段代码含义和作用一样,那为什么要写得更复杂呢?这是因为如果你写参数时严格按照Autofilter的顺序来表达每个参数,可以写成第一段代码形式,但是实际工作中大家不会需要所有字段,书写顺序也不一定严格按照Autofilter的顺序来写,为避免参数设定错误,将参数具体对应设定比较安全,同时代码可读性也更好。


Case2.筛选动态区域里的参数结果:



'选择啤酒字段的所有值
Worksheets(“Data”).range(“A1”,[C1].end(xldown)).Autofilter _

(Field:=2,Criteria1:=“啤酒”,Operator:=xlFilterValues)


这段代码和Case 1最大不同就是筛选范围是动态的,即A列和C列包含数据的区域,需要注意的是,range(“A1”,[C1].end(xldown))来表示活动区域时,如果运行的工作表不止一个,需要写成range(“A1”,sheets(“Data”).[C1].end(xldown)).


当有Criteria2时,与Criteria1 类似,在Autofilter里加进去即可,就可以用2个条件进行复合筛选;



'选择啤酒,面包字段的所有值
Worksheets(“Data”).range(“A1”,[C1].end(xldown)).Autofilter _

(Field:=2,Criteria1:=“啤酒”,Operator:=xlOr,Criteria2:=“面包”)

### 使用 VBA 实现多条件筛选并求和 为了实现Excel 中基于多个条件进行筛选并对特定中的数值求和,在 VBA 中可以采用 `AutoFilter` 方法结合 `Subtotal` 函数来完成这一操作。下面是一个具体的例子,展示如何针对给定范围内的数据执行此功能。 假设有一个工作表包含销售记录,其中 A 为地区名称,B 为客户类别,C 为产品线,D 则存储销售额度。目标是从这些数据中找出属于某个地区的某类客户购买某一类产品所花费的总金额。 #### 定义变量与初始化设置 首先定义必要的变量,并设定要处理的工作表对象以及待过滤的数据区域: ```vba Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' 将 "Sheet1" 替换为目标表格名 ``` 接着指明需要应用筛选器的具体单元格区间: ```vba With ws.Range("A1:D10") .AutoFilter Field:=1, Criteria1:="华北区", Operator:=xlAnd _ ,Field:=2, Criteria1:="VIP" End With ``` 上述代码片段设置了两个字段上的筛选标准——即第 1 字段 (A ) 的值应等于 “华北区”,而第 2 字段 (B ) 应匹配字符串 “VIP”。注意这里使用了 `Operator:=xlAnd` 参数表示这两个条件之间存在逻辑 AND 关系[^1]。 #### 执行子总计计算 一旦完成了初步筛选之后,则可以通过调用 `SubTotal` 来获取满足以上所有约束条件下 D 内各条目之累加结果: ```vba Dim sumResult As Double sumResult = Application.WorksheetFunction.Subtotal(9, ws.Range("D2:D10")) MsgBox ("符合条件的总额:" & sumResult) ``` 此处函数参数 `9` 对应于 SUM 操作符;因此这段程序会返回由当前视图可见范围内第四表项组成的数组经过求和运算后的最终值得到的结果。 通过这种方式即可轻松实现对复杂业务场景下的数据分析需求,同时保持良好的可读性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值