ET疑难千寻千解丛书之EXCEL2010编程与实践 罗刚君 章兰新 黄朝阳 编著
疑难14
如何优化过程“成绩评语” 在成绩表中,B列存放学生成绩,要求对不及格成绩添加蓝色背景,在C列标识“不及格”,而对95分以上者标识“优秀”,最后在E1单元格显示不及格人数。实现此需求可以用以下代码,如何对它进行优化?
- Sub 成绩评语() ‘成绩评语及不及格数量计算
- Dim rng As Range, i As Integer
- For Each rng In Range([b2], Cells(Rows.Count, 2).End(xlUp))
- '遍历所有成绩
- If rng < 60 Then '如果小于60
- i = i + 1 '累计不及格人员数量
- [c1] = "评语" '写标题
- rng.Offset(0, 1) = "不及格" '对不及格成绩写标语
- rng.Interior.ColorIndex = 5 '对不及格成绩着色
- [d1] = "不及格:" & i & "人" '记录不及格人员数量
- ElseIf rng > 95 Then '如果大于95分
- rng.Offset(0, 1) = "优秀" '大于95分者评为优秀
- End If
- Next rng
- End Sub
复制代码è解决方案 清除循环语句中不必要的代码,将其移到循环之外,减少对象写入次数。 í操作方法 步骤1
将不需要循环的语句置于循环体之外,可以减少代码重复执行,完整代码如下:
- Sub 成绩评语及不及格数量计算2() '将不需要循环的代码移到循环语句外
- Dim rng As Range, i As Integer
- [c1] = "评语" '写标题
- For Each rng In Range([b2], Cells(Rows.Count, 2).End(xlUp))
- '遍历所有成绩
- If rng < 60 Then '如果小于60
- i = i + 1 '累计不及格人员数量
- rng.Offset(0, 1) = "不及格" '对不及格成绩写标语
- rng.Interior.ColorIndex = 5 '对不及格成绩着色
- ElseIf rng > 95 Then '如果大于95分
- rng.Offset(0, 1) = "优秀" '大于95分者评为优秀
- End If
- Next rng
- [d1] = "不及格:" & i & "人" '记录不及格人员数量
- End Sub
复制代码步骤2
分别执行两段代码,它们可以实现相同的功能,执行结果如图所示。
============================= 以上摘自《EXCEL2010编程与实践》 |