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,你爱了吗?

(0)

相关推荐