vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(1)

这是一个战斗力爆表,能够飞速提高筛选效率的宏。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(2)

EXCLE的筛选功能人人都会,但启动筛选后,还要手工输入要筛选的文字。所以这个宏的作用,就在于简化输入,鼠标点到什么内容,就筛选什么内容,提高筛选效率。

比如:可以在明细账中按月份和凭证号快速地筛选出凭证:

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(3)

又如:可以按科目筛选出“银行存款”的明细账:

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(4)

怎么样,效率是不是大大提高?

这其实是一个很简单的宏能够实现的效果。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(5)

宏是通过计算机语言组织到一起能够作为独立命令使用的一系列指令。

通俗点说,就是给计算机预设好一系列的命令,然后启动——执行。并且,可以把宏绑定到快捷键上,通过快捷键实现快速操作。上面的gif示例就是利用了快捷键启动宏,因此图像中看不到任何操作。

当然,就像磁盘上的文件一样,宏也要一个储存的地方。

我们点击录制宏就是对宏所保存的位置做了一个选择。(新建宏有很多方式,对于新手来讲,录制无疑是最容易上手的方式)

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(6)

接下来输入宏的名称,以及自定义快捷键。这里设置的快捷键优先级比EXCEL自带的要高。比如这里的快捷键设置为Ctrl C,那下次再按下Ctrl C,出现的将是宏命令,而不再是大家所熟知的“复制”功能。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(7)

为了避免和EXCEL常用的快捷键冲突,我个人使用的是Ctrl T,当然,这会覆盖默认的“插入表格”功能的快捷键。

把宏保存在不同的地方,未来在使用的范围也会有所差别。

个人宏工作簿:宏保存在Personal.xlsb文件上,针对本台电脑的excel软件都可以使用(Personal.xlsb文件通常会随着excel启动而加载)。

当前工作簿:宏保存在当前工作簿上,仅在当前工作簿打开的情况下可以使用这个宏。

新工作簿:宏保存着新建的工作簿上,只能在新建工作簿打开的时候才能发挥作用。

点击确定以后,发现对话框消失了。这个时候,已经进入了录制宏的状态,在EXCEL上的行为都会被计算机翻译成宏语言记录下来。比如我们试着点一下A1单元格。然后再到录制宏的位置上找到停止录制。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(8)

停止录制以后,我们就完成了一次录制宏。

再回到宏-点击查看,可以看到自己录制的宏,然后点击编辑,进入编辑菜单(因为我Personal上已经录制过了,所以在这里我保存的位置是单签工作簿,对于首次录制的同学而言,可以根据需要选择把宏保存在当前工作簿或者Personal工作簿上)。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(9)

可以看到录制的动作是“点一下A1单元格”。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(10)

Range("A1").Select

翻译过来就是:范围(A1单元格).选择

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(11)

这个时候我们的电脑上已经有了一个宏。下一步我们要做的,就是把

Range("A1").Select

这个宏命令替换成我们GIF动图中的宏命令。

复制下面的命令,把Range的那条命令覆盖掉。

Dim k As Integer

k = ActiveCell.Column

k2 = ActiveCell

Selection.AutoFilter Field:=k, Criteria1:="=*" & k2 & "*"

完成后如下图:

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(12)

前面加'的绿色句子,为注释段落,不起作用的。

翻译一下:

Dim K as Integer:定义K为变量

K = ActiveCell.Column: K等于鼠标当前单元格的列的值(如在B列,则K=2)

K2 = ActiveCell : K2等于当前单元格的内容。

Selection.AutoFilter Field:=k, Criteria1:="=*" & k2 & "*" :自动筛选,列数=K,内容= 包含当前单元格。

这个时候关闭-保存,宏就可以使用啦。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(13)

1、这个宏在计算列数的时候,必须是第一列开始计算的,因此在自动筛选的时候,务必保证第一列也在筛选范围内。

如下图这样(第一列没有出现筛选的下三角标识),宏是会发生错位的。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(14)

2、宏所筛选的是包含,意味着只要选销售,销售收入,销售商品这一类的字样都会被筛选出。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(15)

如果想严格筛选,也可以在命令中修改。这个有兴趣的大家可以自己琢磨。

3、宏的筛选是在已建立筛选的基础上再筛选,而不是取消原来的筛选重新筛选。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(16)

如上图,第一次筛选是月份,第二次筛选是凭证号,合在一起就筛选出了1月X002号凭证。当然如果想把命令改成重新筛选,也可以。

4、如果想要清除已经建立的筛选,也可以做一个宏。(大家只要简单录制就可以)。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(17)

PS:我个人习惯使用快捷键 Alt-D - F - S(逐次按下)来完成。

学习宏这个东西,要敢折腾会琢磨。他山之石可以攻玉,一个小技能带给我们工作的帮助很可能是巨大的。

vba彻底隐藏掉宏工作簿(天职经验谈一个提高筛选效率的VBA宏)(18)

周垚

供职于天职国际上海分所

会计、审计行业从业10余年

倾力原创

,