Excel精英培训网

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

[已解决]如何写VBA代码实现 筛选出 包含 指定字符串 的内容???

[复制链接]
发表于 2014-4-7 18:18 | 显示全部楼层 |阅读模式
本帖最后由 caipiaofans 于 2014-4-7 21:04 编辑

附件下载:
0407.rar (2.3 KB, 下载次数: 26)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-4-7 18:42 | 显示全部楼层
  1. Sub A()
  2.     Dim SR
  3.     Dim ARR, BRR()
  4.     Dim K%, I%, M%, Z%
  5.     SR = Split([C1], " ")
  6.     ARR = Range("B1:B" & Cells(Rows.Count, 2).End(3).Row)
  7.     For K = 1 To UBound(ARR)
  8.         For I = 0 To UBound(SR)
  9.             If InStr(ARR(K, 1), SR(I)) <> 0 Then
  10.                 M = M + 1
  11.             End If
  12.         Next
  13.         If M = 2 Then
  14.             Z = Z + 1
  15.             ReDim Preserve BRR(1 To 1, 1 To Z)
  16.             BRR(1, Z) = ARR(K, 1)
  17.         End If
  18.         M = 0
  19.     Next
  20.     Range("A:A").ClearContents
  21.     [A1].Resize(UBound(BRR, 2)) = Application.Transpose(BRR)
  22. End Sub
复制代码

Book1.rar

9.51 KB, 下载次数: 20

回复

使用道具 举报

发表于 2014-4-7 19:15 | 显示全部楼层
本帖最后由 liu-aguang 于 2014-4-7 21:06 编辑
  1. Sub test()
  2.     Dim arr, ar, i&
  3.     arr = Range([b1], [b65536].End(3))
  4.     If [c1] = "" Then Exit Sub Else ar = Split([c1], " ")
  5.     Set regx = CreateObject("vbscript.regexp")
  6.     regx.Pattern = "^(?=.*?\b" & ar(0) & "\b)(?=.*?\b" & ar(1) & "\b).+$"
  7.     For i = UBound(arr) To 1 Step -1
  8.         If Not regx.test(arr(i, 1)) Then Cells(i, 2).Delete Shift:=xlUp
  9.     Next
  10. End Sub
复制代码
回复

使用道具 举报

发表于 2014-4-7 19:52 | 显示全部楼层
布局略做调整,用高级筛选就可以了

效果图
QQ截图20140407194450.jpg

代码如下

  1. Sub cc()
  2.   Range("B:B").AdvancedFilter 2, Range("D1:G2"), Range("D5")
  3. End Sub
复制代码
代码解释
Range("B:B") 数据源位置,
2  ,表示将结果复制到新地方
Range("D1:G2")  条件区域,
D2:G2中对应的内容为条件

图片中虽有3个数据列,但是有一个条件是空,所以不影响结果
Range("D5")   结果显示位置

需要注意的是,条件行数必需按量使用,只要一行,是 And,,如果有2行或者多行,则是 or ,此时如果后面几行是空的,则会筛选出很多内容

把 range("D1:G2") 修改为 Range("D1:G3")  其它不变,运行一下能看出区别

回复

使用道具 举报

 楼主| 发表于 2014-4-7 20:19 | 显示全部楼层
冠军欧洲2010 发表于 2014-4-7 18:42

冠军老师好

经测试..

要是C1=01
执行代码 提示 下标越界

能不能再改下代码

让代码通用些
支持
01
01 02
01 02 03
等不同个数的筛选.

即 同时符合一个,两个,三个甚至更多 都可以筛选
回复

使用道具 举报

发表于 2014-4-7 20:24 | 显示全部楼层
........

Book1.rar

9.37 KB, 下载次数: 11

回复

使用道具 举报

 楼主| 发表于 2014-4-7 20:35 | 显示全部楼层
冠军欧洲2010 发表于 2014-4-7 20:24
........

冠军老师....

哈...还有一个 没考虑到的...

if c1要筛选的 不存在.弹对话框 提示不存在...

现在是 下标越界/

呵呵

现在代码很好了
回复

使用道具 举报

发表于 2014-4-7 20:38 | 显示全部楼层

Book1.rar

8.5 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2014-4-7 20:46 | 显示全部楼层
冠军欧洲2010 发表于 2014-4-7 20:38


冠军老师,,

我刚才说的是这个意思..
呵呵

QQ图片20140407204541.jpg

C1=3时..恰巧 那B1-B5 没3哦

我不是故意的啊..

只想要代码更完美...

回复

使用道具 举报

发表于 2014-4-7 20:51 | 显示全部楼层    本楼为最佳答案   
不是。
是我的原因。是我没有考虑仔细 。
谢谢提醒。。

Book1.rar

9.64 KB, 下载次数: 131

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 20:37 , Processed in 0.355151 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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