打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
字典法筛选考语文的学生成绩 | VBA实例教程

除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www.zhanzhanrufeng.com/cat4/166.html,VBA交流群273624828。

今天利用一个在贴吧看到的例子来讲一下Excel中字典的应用。题目要求是这样的,我有如下面左图格式的一批学生成绩

              

现在呢想从这个表格中将考过语文的学生的成绩保留下来,而将没考过语文的学生所有成绩都删去,即如上面右图格式的结果。首先上面这种记录数据的方法就很不科学,因为从程序的角度来看这些数据的话,B3单元格的数学和A2单元格的小李是扯不上什么关系的,所以我们要先对数据进行一下预处理,将原数据中A列空的单元格都填充上相应的数据。熟悉Excel的朋友应该知道Excel本身有个向下自动填充的功能,不过一次只能真一块区域,这里我们用VBA程序来实现全部空白区域的一次性填充,填充的代码如下:

Sub test1()
Dim rng
For Each rng In Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Areas
Range(rng, rng(0)).FillDown
Next
End Sub

上面的代码稍微解释一下,Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row)表示A列有数据的区域,.SpecialCells(xlCellTypeBlanks)表示空白单元格.那Range("A1:A" & Range("B" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).Areas自然就表示A列的每个空白区域了,FillDown函数就是自动向下填充了,Range(rng,rng(0))就是空白区域及其上面的一个单元格,这步其实就是在模拟Excel的填充功能,你如果会了填充功能这步自然就了解了。

完成了上面的处理之后下面的思路就简单了,我们只要判断出哪些人考了语文哪些人没考语文,然后从A列按人名判断,没考语文的就把这行删除就可以了。这里自然就想到了字典,只要将所有考语文的学生名字放入字典,然后依次判断A列的人名是否在字典中,不在的就删除该行就可以了,直接看代码:

Sub test2()
Dim d, j, m
Set d = CreateObject("scripting.dictionary")
For j = 2 To Range("B" & Rows.Count).End(xlUp).Row   '遍历B列
If Range("B" & j) = "语文" Then          '如果B列出现语文
d(Range("A" & j).Value) = ""          '将A列的人名放入字典
End If
Next
For m = Range("B" & Rows.Count).End(xlUp).Row To 2 Step -1  '依次判断A列的人名
If Not d.exists(Range("A" & m).Value) Then       '如果人名不在字典中
Rows(m).Delete                                '删除该行
End If
Next
Set d = Nothing
End Sub

上面的代码思路也很简单了,这里只是需要你掌握字典的一些基本用法。到现在为止我们已经将没考语文的人的数据都删除了,不过现在的数据A列还是填充的,那为了所谓的好看我们再把那些填充的数据删除好了,看下面代码

Sub test3()
Dim i
For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1    '从下往上依次访问A列
If Range("A" & i) = Range("A" & i - 1) Then              '如果单元格和上一单元格的值相等
Range("A" & i) = ""                                                      '则让该单元格为空
End If
Next
End Sub

执行完了上面三步我们的目的也就达到了,有兴趣的朋友可以把这三步自己组合起来,当然更简单的是依次调用这三步就可以了

Sub 运行()
Call test1
Call test2
Call test3
End Sub

本节示例文件下载地址:http://pan.baidu.com/s/1ntNsJGH

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA 根据使用最后一个单元格的相邻列向下自动填充
Excel VBA
多工作表合并【Excel分享】
Excel Range(“b65536”).End(xlUp).Row 问题
VBA 删除特定行、空行、0行、替换0为空
VBA笔记:Range对象
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服