分享

成绩等级划分:自定义函数;类模块、集合的运用

 冷茶视界 2024-05-11 发布于江苏

内容提要

  • 成绩等级划分:优秀、良好、合格
  • 类模块、集合
  • 自定义函数
大家好,我是冷水泡茶。
前两天在论坛上看到一个求助贴:[求助]成绩分数转等级

详细需求:

说明:大于等于“优秀”分数的,赋值“优秀” 

大于等于“良好”分数且小于“优秀”分数的,赋值“良好” 

大于等于“合格”分数且小于“良好”分数的,赋值“合格” 

小于“合格”分数的,赋值“待合格“

具体数据表格:

1、原始成绩:

2、参数设置:等级划分标准

3、成绩等级(结果):格式与原始成绩类似,少了一列“考号”

这种划分等级的需求,用LookUp函数应该也可以处理,不过,他这个每个科目的等级分标准并不完全相同,处理起来还是有点麻烦,我们就不去费这个脑筋了,我们还是来看看用VBA如何来处理吧

基本思路:

1、我们准备设计一个自定义函数,根据科目、分数,可以出得等级;
2、我们设置一个类模块SubjectGrade,定义三个变量:
Public SubjectName As String  '//科目名称Public GradeName As String    '//等级名称Public MinimumScore As Single '//等级分下限
3、我们定义一个过程,把各科目、各等级的下限分数按从高到低的顺序添加到集合;
4、我们定义一个自定义函数GetGrade,根据科目、分数,到集合中查找以应的等级;
5、我们在成绩等级(结果)表中,使用getGrade函数,根据原始成绩表中的科目、分数,得出相应等级

VBA代码

代码详见第二条推文

后记

1、在公式中我们用了Index函数,准确匹配姓名与科目成绩,如果“成绩等级(结果)与“原始成级”的表头科目顺序、表列姓名顺序完全一致,那就可以简化处理,不需要用Index函数来查找匹配
2、如果不想在工作表中使用函数,只需要一次性得出等级结果的话,也可以把“原始成绩表装入数组arr,循环每个成绩,根据表头科目,把每个成绩改写为等级,最后,再把arr写入工作表“成绩等级(结果)
3、“参数设置”表,在我们的自定义函数中没有用到,可以删除,相关等级标准已写到代码里了,换言之,如果要修改等级标准,需要在代码中修改,而在“参数设置”表中修改是不起作用的。当然,这个表也可留着,作为一个参考。
好,今天就到这里,我们下期再会!
~~~~~~End~~~~~~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多