有朋友问了个问题,顺带就来分享一下。万一你也碰上了,看看能不能用吧。
也就是说,通过对一张工作表里面的数据进行筛选,其他的工作表也一起跟着筛选,而且后面也得知筛选的条件都是同一个列中的内容。这就好办了。
我的第一个想法是:可以使用数据透视表中的切片器功能,毕竟切片器这玩意儿是可以对表格的筛选进行联动的。不过稍微麻烦一点的就是,每一张表中的数据我们都要提前去对其创建数据透视表,而且这个也要占地方,算了。
第二个想法就是用VB了,因为不管怎么样,当你选中了一个表进行筛选的时候,要想让其他的工作表跟着变化,很明显要有一个东西进行响应,直接用函数貌似是无法直接实现的。那就看看这个简单的函数怎么写吧。
打开准备好的案例数据:
这里我准备了4张工作表,每张工作表的数据基本都是一样的,实在是懒得举例了,就采用了直接复制粘贴的办法(后面对数据进行修改,用这个方法同样也是可以的哈,真的纯属懒!)
我们假设她要筛选的表格就是最后那个Sheet2吧,那我们就先把光标定位到工作表Sheet2中,既然妹子要筛选的是序号,所以其他各表在序号上肯定有与Sheet2中的序号内容是一样的。为了方便选择后面的筛选条件,我这里直接先做好一个下拉菜单。如图:(筛选条件其实就是序号中的所有不重复的内容)
接下来我们要达到的效果是:当选择下拉菜单中的1时,所有的表格都自动筛选序号为1的内容,同理2和3。最后加一个按钮来控制筛选的执行操作吧。
使用快捷键CTRL+F11打开VB编辑器界面,如下:
直接在左侧的这个Sheet2上单击鼠标右键,弹出的菜单中选择-插入-模块,如图所示:
这个时候,就变成了这个样子:
下面我们可以直接在右侧的空白框中输入我们简单的代码了,看不懂没关系,照着抄一下,我逐句解释一下:
VB这里呢,一个模块小程序都是sub开头,End sub结束,Sub后面跟一个名称,再来个括号,相当于就是我们给这个小程序取的个名字,方便你日后的调用。
中间看不懂不要紧,但是可以知道该怎么改?因为毕竟很多同学都没有这个代码的基础,解释起来有点费劲。我们先看这里,field:=1
这里的1就是指的我们筛选区域的第一列,对应到工作表中就是序号那个列了,我们所有的工作表筛选区域都是序号那个列,而且都在第一列。后面Criteria是条件的意思,条件后面还有个数字1,所以是Criteria1。我们和条件很显然是Sheet2工作表中的E1单元格啊,所以你后面要有什么改动,就改这些地方就可以了。
抄写完了,直接关闭这个VB编辑器界面就可以了。接下来,我们再来插入一个执行这个筛选操作的按钮就好了。
打开开发工具,截图如下:
点击表单控件中的第一个小图标,这个就是插入按钮的了,鼠标呈现十字形,按住鼠标左键不放,在任意单元格区域画一个矩形就好了,松开鼠标的时候,系统自动弹出来一个对话框,长这样:
我们选中里面的这个find,这里的find其实就是我们刚才给小程序取的那个名字了。然后点击确定,你就会看到按钮出来了。
你可以比较任性的给这个按钮取个名字,换掉这个上面默认的”按钮11“的字样。完成之后不慌按下按钮,因为它的大小会根据单元格的变化而变化。所以我们要在运行之前再做个动作。鼠标右键单击这个按钮,选择-设置控件格式。
弹出的设置对话框中,找到属性选项卡,把这个大小和位置固定一下。
完成之后点击确定,这下你就可以愉快的点击你的小按钮了。我们来看看结果吧。是不是都发生了同步的筛选。
当然,如果你的其他表格中的数据不在第一列和第二列,也不要紧,代码中控制的是你的筛选区域,只要你筛选的数据是保持在第一列就好了。比如我们来验证一下,我打乱了一下前三张工作表数据原有的位置:
再重新选择一下筛选条件,执行筛选吧。
来看看其中一张表结果:
是不是就得到了想要的结果?
好了,如果你有更多好的方法,欢迎一起分享,毕竟一个人的力量有限,团队的智慧才更牛叉。
网友评论