美文网首页
Excel VBA 实例(22) - 一键筛选其他工作表或工作簿

Excel VBA 实例(22) - 一键筛选其他工作表或工作簿

作者: 永恒君的百宝箱 | 来源:发表于2019-11-18 13:56 被阅读0次

    今天说的这个vba实例还是和学校有关。

    需求

    情况是这样的,这里有一张学校所有班级的总成绩表,简化如下图:

    能否实现一键把各个班级的成绩筛选出来,显示在“班级成绩表”当中,如下图:

    也就是实现这样的效果,点击“3班”,就出现3班所有同学的成绩:

    这样的话,各个班级的老师只需要鼠标一点就可以查看到自己班级的成绩,并且完全不会对原数据产生损坏。

    大体思路

    1、设计一个下拉菜单,里面含有所有的班级名。
    2、编写vba事件,一旦班级名发生变化,则进行筛选。
    3、编写筛选vba代码。

    具体步骤

    1、设计下拉菜单。这个比较简单,选中要设计下拉菜单的单元格,数据 - 数据验证,弹出的窗口选择序列,来源把所有班级都加入(注意:班级直接用逗号隔开,要用英文输入法下的逗号),如下图:

    2、编写vba事件。这个需要选择worksheet的change事件,如下图:

    下拉菜单改变的是B3单元格,一旦检测到B3单元格的内容发生变化,则做出筛选相应班级的成绩的动作,也就是下面的"call 班级"代码(调用班级函数)。

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$B$3" Then
            Call 班级
        End If
    End Sub

    3、编写筛选vba代码,即上面"call 班级"代码中的“班级”函数,如下:

    Public Sub 班级()
        Sheets("班级成绩").Select
        '1.删除旧资料
        Range("A6:C15").ClearContents
        '1.输出的列数
        k = 6
        '2.循环判断
        For i = 2 To 10
            If Sheets("总成绩").Cells(i, "A") = Range("B3") Then            
                Cells(k, "A") = Sheets("总成绩").Cells(i, "B")
                Cells(k, "B") = Sheets("总成绩").Cells(i, "C")
                Cells(k, "C") = Sheets("总成绩").Cells(i, "D")
                k = k + 1
            End If
        Next
    End Sub

    新建模块,将代码保存进去即可。

    大功告成!

    另外,这个实例所有数据在同一个worksheet中,其实如果数据在不同的worksheet当中也基本是一样的操作,只是代码部分需要加上数据所在的worksheet即可。

    如果你在操作过程中有疑问,欢迎来交流。源文件准备好,需要的话再后台回复「一键筛选」即可。

    如果你觉得文章还不错,请大家点个好看、分享一下。你的肯定是我最大的鼓励和支持。

    Excel vba 实例(21) - 如何快速准确录入数据


    Excel vba 实例(20) - 一键填充每月员工拜访地区

    Excel vba 实例(19) -  一键汇总不完全相同的sheet到总表


    Excel vba 实例(18) - 一键将单列长数据平均拆成多列

    收藏 | 17个Excel vba实例汇总

    Excel vba 实例(17) - 遍历多个工作簿并提取内容到总表

    Excel vba 实例(16) - 按指定字段分类批量提取内容

    相关文章

      网友评论

          本文标题:Excel VBA 实例(22) - 一键筛选其他工作表或工作簿

          本文链接:https://www.haomeiwen.com/subject/aqzvictx.html