Excel VBA 8.46 vba打造CTRL+F无法实现的高级查找
vba打造CTRL+F无法实现的高级查找
点击上方“Excel和VBA”,选择“置顶公众号”
致力于原创分享Excel的相关知识,源码,源文件打包提供
一起学习,一起进步~~
上一届我们学习了如何通过VBA来实现模糊查找,并单独展示结果,小伙伴的反馈也是很实用,看来随着数据结构和容量的不断变化,我们对于数据的 查找要求也是不断的提升啊
同时也有小伙伴说,有一些场景并不是太适用于模糊查找,比方说数字,模糊查找确实比较适合文本的查询,而数字的查找,更多的还是适用于区域的查询,既然说到这里,那么今天我们就来实现用VBA实现数据的区间查找。
这个功能可不是CTRL+F就可以实现的功能哦
场景说明
今天的场景是这样的,我们现在不针对姓名列进行查找了,我们需要针对考试成功进行查找,当然并不是简单某科成绩的精确查找,而是多科成绩,按照不同的区间来进行查找
这在我们日常工作中,进行数据分析的时候会很常用
直接看代码
代码区
Sub test3()
ActiveSheet.Range("A1").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("k1:l2"), _
Unique:=False, _
CopyToRange:=ActiveSheet.Range("A17")
End Sub
咦,上节我们学习文本的模糊查找的时候,那个代码可是不少的
现在多列多条件的查找,条件多了,怎么代码量反而减少了呢?
因为我们今天没有使用range.find功能。我们使用的是range.AdvancedFilter
先来看看代码的效果
这个功能已经超出了CTRL+F的查找功能,这个是多条件的查找
从结果上来看,我们也是成功的将数据中语文成绩>90,数学>70的所有的成绩都一次查找出来,并且单独展示出来
效果和功能上就更加完美了。
代码解析
有了结果,我们回过头来看看代码是如何实现这样的结果的
我们前面也说了,我们今天不适用range.find方法了。
我们换一个方法,range.AdvancedFilter方法
我们直接来看代码,一个个的解释下
Action:=xlFilterCopy
这个是标准写法,无需改动,直接这样写就行
CriteriaRange:=Range("K1:L2")
这个是我们的条件区间,我们的条件在哪里,这个CriteriaRange后面的区间就是指向我们的查找的条件的
Unique:=False
这个,如果小伙伴中有学习python的话,应该之前在用python处理Excel常用的就是pandas模块,而这个模块下,有一个方法也是Unique,他的作用就是获取数据的唯一值,而今天这里的Unique也是一样的作用,他就是用来表示是否要获取数据的唯一值的,false就是代表不是,如果要最终结果展示唯一值,就改成True
我们演示下
可以看到当Unique:=False的时候,A8数据会展示出两行,因为这两行都是满足我们的筛选条件的,如果我们将代码修改下,将Unique:=True,来看看
我们看到最后的结果出现了不同,这就是这句代码的作用,用来提取唯一值
CopyToRange:=ActiveSheet.Range("A17")
这一句代码表示的就是最终的结果要展示的区间,案例中,我们的结果都是展示在A17为起点的一个单元格区间
不管数据有多少行,标头都是在A17这一行的。
怎么样,难度提升了,代码反而减少了,这样的VBA,你爱了吗?