小伙伴们还记得上次的【财务人员必会之凭证查询】吗,设置简单使用方便,真是个一会儿就能学会的神技啊。
今天我们就来用被大家遗忘了的高级筛选做个更强大的筛选出来
高级筛选之所以被遗忘,是因为用起来实在太不方便了,可是用到vba里的话,那简直就是初学者的福音啊。
(使用wps的小伙伴就当看戏吧,因为你的wps可能根本无法使用vba,即使能使用,也有可能不能正常运行,wps遇到的问题我是不解答的哟。)
百闻不如一见,就先来看一下数据源和设置吧!
图01
图02
执行筛选按钮指定了宏(右键,指定宏,选对相应的名称就行)
来看下这一行代码能有多强大
图03
接下来请看测试动画吧,
动画片看了,代码也这么少,应该能学会吧,还是先来个解释吧。
Range.AdvancedFilter(Action As XlFilterAction, [CriteriaRange], [CopyToRange], [Unique]) 这是高级筛选的语法
Range 是要使用高级筛选的数据区域 我用的是 Sheet1.Range("A:G") 翻译成白话就是筛选 序时薄 这张工作表 的 a:g 列里的数据
Action: 是指筛选结果显示方式 我使用的是 xlFilterCopy 表示 将结果复制出来
CriteriaRange; 是筛选条件区域 我使用的是 Range("k1:k2")
CopyToRange:是把结果复制到那里,我用的是 Range("A3:G3")
Unique:是否筛选不重复记录,这里我没做设置,意思是提取所有记录
好啦,大致意思理解了,那再来详细说一下里面的“坑”吧。
第一坑:条件区域
条件K2单元格不使用公式的话,k1单元格字段名必须要指定,使用了公式就不能指定了。
来,从动画片里看区别吧。
雨夜:咳咳!!这需求难道不能用 ?建* 嘛?要写那么长的公式,真是个逗比!!
当然,这个例子用 ?建* 会更省事些,如果建是在第8个字符呢?难道你加8个问号嘛?
在用例子用来说明它特征的时候,请不要去考虑最优步骤!(只怪这数据源不好)
接下来看第二坑:结果区域
结果区域中字段名必须与数据源中字段名一致,字段顺序可与数据源中不一致。
也就是说,你可以只要其中几个字段,代码中结果区域大小也要做相应的调整哟。
接着看一下这动画片吧:
结果区域中字段名不存在会报错的
怎么样,用vba来筛选数据香不香,就这么一行代码就能实现这么666的功能。
有vba相助,使用高级筛选的话,它的功能可以强大到让你无法相像
比如我想看一级科目是 现金 或者是包含 存款 二字的信息,只需要做简单的修改就可以了。
接着看动画片04
看到这里,有没有在想,如果增加了条件,能不修改代码直接就能用吗?
这想法对vba来说也不是事儿啊,不过今天就不讲这个了,还是来讲一下条件规则吧。
高级筛选中 同一列里的条件是 或(或者) (or 函数功能)动画片03已经演示了,同一行里的条件是 且(并且) (and函数功能)
再来看个同一行的效果吧。
这的需求是 一级科目是 现金 并且 借方金额 大于 0 给我筛选出来
怎么样,用vba来做的查询是不是很方便呢?赶紧动手练习吧!!