点【关于本公众号】了解一下,欢迎关注,谢谢!
快速浏览
实用案例
|日期控件||简单的收发存||收费管理系(Access改进版)|
|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|
收费使用项目
|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|
内容提要
VBA自定义函数 InStr函数
山东高考数学多选题,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
案例比较简单,已经有人给出了解决方法。我本来不打算弄它的,但仔细研究了一下别人的代码,我忽然有了不同的思路。我们一起来看一下:
数据表格:
Function getScore( _
totalScore As Integer, _
rightAnswer As String, _
studentAnswer As String)
单题总分 :
'//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 = currScore
End Function
完整示例代码详见当天另一条推文。
后记
1、这个案例虽然简单,但是解决思路还是蛮有意思的。我看有人是这么做的,循环标准答案中的每个字符,如果包含于学生答案中,则得一次分,然后把学生答案中已经得分的选项去掉(用Replace函数),最后,再判断一下学生答案的长度是否大于0,如果大于0,则表明有错误选项,得0分。
2、不管用什么方法,只要能达到目的都可以。只是在数据量特别大的情况下,我们要考虑一下程序运行效率的问题。当然,我们总是考虑效率问题,也不是什么坏事。
好,今天就到这里,我们下期再会!
安利小店 安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精、洗衣液也是日常必备,用过都说好! | |
合谷医疗 合谷医疗专攻各种疑难杂症,尤其擅长抑郁症、焦虑失眠、儿童神经发育异常、多动症、自闭孤独症、腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了! |
喜欢就点个赞、点在看、留言评论、分享一下呗!感谢支持!
案例文件分享说明:
案例文件可免费分享,但需符合以下要求:
请关注、点赞、点在看、点...、留言,方便的话分享一下就完美啦!如果不便走上面的“流程”,请打赏,万分感谢!
请添加上方我的合谷医疗企业微信,案例文件通过微信发送。如有定制需求,亦可通过微信联系。
Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问!