VBA自定义函数:考试多项选择题判分;山东高考数学多选题判分解决方法

文摘   教育   2024-10-10 22:35   江苏  

点【关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • VBA自定义函数
  • InStr函数
大家好,我是冷水泡茶,今天在EXCELHOME论坛上看到一个求助贴:[求助] 求助山东高考数学多选题 判分解决方法
具体要求

山东高考数学多选题,1个6分。

1、若标准答案AB,学生选了A,则得6/3=2分

2、若标准答案AB,学生选了AC,则得0分

3、若标准答案ABC,学生选了A,得6/3=2,学生选了AB,得6/3*2=4分。

https://club.excelhome.net/forum.php?mod=viewthread&tid=1703380&page=1&_dsign=cb0ebcd2

案例比较简单,已经有人给出了解决方法。我本来不打算弄它的,但仔细研究了一下别人的代码,我忽然有了不同的思路。我们一起来看一下:

数据表格:

基本思路:
1、他这个要求,也就是判分规则,举了三个例子,我们给他总结一下:有错误选项该题得0分,没有错误选项,则答对几个相应得分
2、我们写一个自定义函数getScore,设置三个参数,1题分,2标准答案,3学生答
3、我们循环学生答案的每个字符,用InStr函数判断是不是包含在标准答案中,如果包含,则相应得分,累计到一个变量currScore中;如果直到循环结束,仍没有发现任何不包含在标准答案中的字符,那么该题得分为currScore,如果发现一个错误选项,则该题得零分,退出函数过程。
Function getScore( _        totalScore As Integer, _        rightAnswer As String, _        studentAnswer As String)    '//totalScore:单题总分    '//rightAnswer:正确答案    '//studentAnswer:学生答案    Dim unitScore As Double    Dim currScore As Double    Dim i As Integer    unitScore = Round(totalScore / Len(rightAnswer), 2)    For i = 1 To Len(studentAnswer)        If InStr(rightAnswer, Mid(studentAnswer, i, 1)) > 0 Then            currScore = currScore + unitScore        Else            getScore = 0            Exit Function        End If    Next    getScore = currScoreEnd Function
4、以上代码我已发到了论坛,但后来再想想,还有优化的空间:
(1)先判断一下完全正确的答案,直接用等于来比较,不用循环所有选项;
(2)再判断一下肯定错误的答案,学生答案的选项比标准答案多,用Len函数取得两个答案的长度进行比较。
(3)学生答案为空,直接得0分。
5、后来,问主在贴子里又有要求,希望点一个按钮直接出结果,而不是自定义函数。这也好办,我们前面的努力不会白费,我们把工作表A列到D列数据装入数组arr,循环数组,把第2列、第3列带入getScore自定义函数,结果写入第4列,最后,再把arr回写到工作表。
6、我们还可以设置一个工作表Change事件,当学生答案或标准答案发生改变时,得分也自动改变。

完整示例代码详见当天另一条推文。

后记

1、这个案例虽然简单,但是解决思路还是蛮有意思的。我看有人是这么做的,循环标准答案中的每个字符,如果包含于学生答案中,则得一次分,然后把学生答案中已经得分的选项去掉(用Replace函数),最后,再判断一下学生答案的长度是否大于0,如果大于0,则表明有错误选项,得0分。

2、不管用什么方法,只要能达到目的都可以。只是在数据量特别大的情况下,我们要考虑一下程序运行效率的问题。当然,我们总是考虑效率问题,也不是什么坏事。

好,今天就到这里,我们下期再会!


~~~~~~End~~~~~~

安利小店
安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精洗衣液也是日常必备,用过都说好!

合谷医疗
合谷医疗专攻各种疑难杂症,尤其擅长抑郁症焦虑失眠儿童神经发育异常多动症自闭孤独症腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

案例文件分享说明

  • 案例文件可免费分享,但需符合以下要求:

  • 关注点赞点在看点...留言,方便的话分享一下就完美啦!如果不便走上面的“流程”,请打赏,万分感谢!

  • 请添加上方我的合谷医疗企业微信,案例文件通过微信发送。如有定制需求,亦可通过微信联系。

  • Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问

VBA编程实战
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
 最新文章