Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 18452|回复: 7

[已解决]用VBA代码实现多条件筛选

[复制链接]
发表于 2014-9-16 21:22 | 显示全部楼层 |阅读模式
    对于多条件筛选,发现有很多公式实现,但领导要求编个VBA脚本,弄个快捷键直接跑出来==。我的方法是借用excel的筛选功能,先录了个宏再修改代码。关键问题如下:
1.excel的筛选功能同时只能筛两个条件,多条件就只能反复调用。
2.对于筛选出的数据要在空白列进行标注,我就只能循环判断单元格是否是被隐藏的,再标注。
结果导致运行速度较慢,有时候还会筛不出来,不晓得是啥原因。

求各位大师帮忙看看,能不能通过更简便稳定的方法实现,比如数组或者数据字典?十分感谢。

SalesReport1.rar (23.51 KB, 下载次数: 592)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-9-16 21:50 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, i&
  3. If [a1] = "产品" Then [a:a].Insert
  4. arr = Range("b1:g" & Cells(Rows.Count, "g").End(xlUp).Row)
  5. ReDim brr(1 To UBound(arr), 1 To 1)
  6. For i = 2 To UBound(arr)
  7.     If (InStr(arr(i, 1), "蒙古") Or InStr(arr(i, 1), "上海") Or InStr(arr(i, 1), "意大利") Or InStr(arr(i, 1), "法国")) _
  8.     And (InStr(arr(i, 2), "AN") Or InStr(arr(i, 2), "BO")) Then brr(i, 1) = "重要"
  9. Next
  10. Range("a1").Resize(UBound(brr)) = brr
  11. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-9-16 22:11 | 显示全部楼层
dsmch 发表于 2014-9-16 21:50

非常感谢,就是这样的。学习到了。
回复

使用道具 举报

 楼主| 发表于 2014-9-16 23:12 | 显示全部楼层
dsmch 发表于 2014-9-16 21:50

再问一下,如果是要“不包含”的话是用IIf吗?像这样?  IIf(InStr(arr(i, 2), "TO") > 0, 0, 1))
还有,如果中间用And连接,为什么(2 And 1)判断出来是0啊?那么包含“AN”且不包含“TO”应该怎么表述呢?谢谢。
回复

使用道具 举报

发表于 2014-9-17 04:06 | 显示全部楼层
1、不包含InStr(arr(i, 2), "TO") = 0
2、InStr(arr(i, 2), "AN") > 0 and InStr(arr(i, 2), "TO") =0
回复

使用道具 举报

 楼主| 发表于 2014-9-17 07:18 | 显示全部楼层
dsmch 发表于 2014-9-17 04:06
1、不包含InStr(arr(i, 2), "TO") = 0
2、InStr(arr(i, 2), "AN") > 0 and InStr(arr(i, 2), "TO") =0

非常感谢。
回复

使用道具 举报

发表于 2016-6-10 13:47 | 显示全部楼层
dsmch 发表于 2014-9-16 21:50

老师你好!请问在你已解决完的这个帖子中,如何实现筛选条件的自动读取(把要筛选的条件输入在一个固定的区域,比如工作表“要求”中的(k5:l10),然后VBA程序能读取这些条件要)?
回复

使用道具 举报

发表于 2022-4-15 10:39 | 显示全部楼层
相同的困惑
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-23 16:24 , Processed in 0.315915 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表