分享

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

 昵称41617132 2019-12-22
将永恒君的百宝箱设为星标 精品文章第一时间读

今天说的这个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即可。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多