ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2021|回复: 11

[已解决] 求一多选题得分统计的公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-1 14:54 | 显示全部楼层 |阅读模式
本帖最后由 掏宝者 于 2014-5-4 19:44 编辑

多选.rar (13.46 KB, 下载次数: 25)

选择题已经通过机器读出来了,想查看一下每位学生每道选择题的得分情况,以便统计,可惜多选题我没法实现,望各位高手帮忙!具体要求在选择题工作表中有说明,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-1 16:11 | 显示全部楼层
谢谢dengjq2000,将本求助帖移动到这。

继续等待大家的解答

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-1 17:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-5-1 22:06 | 显示全部楼层
本帖最后由 bluexuemei 于 2014-5-1 22:07 编辑
  1. Sub t()
  2. '须安装ACTIVERUBY.才能运行
  3. '下载地址  http://www.artonx.org/data/asr/ActiveRuby.msi
  4. Set ojs = CreateObject("scriptcontrol"): ojs.Language = "rubyscript"
  5. ojs.eval ("def aa(aa,bb);$aa=aa;$bb=bb;end")
  6. y = ojs.Run("aa", Sheet1.UsedRange.Value, Sheet2.[a1:f3].Value)
  7. y = ojs.eval("a=[];$bb=$bb.transpose[1..-1];$aa.each{|x|n=0;s=x[1].split(/\s/).map{|t|t.split('.')};$bb.each{|o|if !x[1].include?(o[0].to_s[0..-3]);n=n+o[1];else;if o[2].include?(s.assoc(o[0].to_s[0..-3])[1]);n=n+o[1]*0.5;end;end};a<<n};a.map(&:to_a)")
  8. Sheet1.[c1].Resize(UBound(y) + 1) = y
  9. Set ojs=nothing
  10. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-2 06:07 | 显示全部楼层
谢谢bluexuemei

运行代码,结果是在表1的C列获得了所有多选择题的总分,我想要的是在表2,也就是“选择题”工作表中对应题号下获得每位学生每道多选题的得分,还请大家帮忙。

TA的精华主题

TA的得分主题

发表于 2014-5-2 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
B5
=IF(ISNUMBER(FIND(" "&B$1&"."," "&读卡!$B1)),IF(OR(LEN(TRIM(MID(读卡!$B1,LEN(FIND(" "&B$1&"."," "&读卡!$B1))+3,4)))>LEN(B$3),ISNA(MATCH(MID(读卡!$B1,FIND(" "&B$1&"."," "&读卡!$B1)+{3,4},1),MID(B$3,{1,2,3},1),))),0,B$2/2),选择题!B$2)
公式还需要优化。
多选1.rar (17.6 KB, 下载次数: 14)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-2 12:55 | 显示全部楼层
太感谢qjm2211了,完全能满足我的需要,再次谢谢!

能对公式解说下吗?

TA的精华主题

TA的得分主题

发表于 2014-5-4 11:01 | 显示全部楼层
本帖最后由 wangjguo44 于 2014-5-4 11:18 编辑
掏宝者 发表于 2014-5-2 12:55
太感谢qjm2211了,完全能满足我的需要,再次谢谢!

能对公式解说下吗?

要求解释6楼公式的短消息收到。
如果你的要求“漏选,得一半分,错选或多选,为0分”的理解是指下面意思,公式似乎下面给出的更正确些:
1、漏选:指的是答案是对的,只是没有全部答出(比如,标答是“AB”,他只答了“A”或“B”,或者标答是“ABC”,他只答出“A”或“B”或“C”或“AB”或“AC”或“BC”),给二分之一标准分;
2、错选:给出的答案中有选错了的,全部错(标答“AB”,给出“CD”)或部分错(标答“AB”,给出“AC”、“BD”等,标答“ABC”,给出“AD”、“ABD”等)都算错选,给0分;
3、多选:标答应是2个,他给出3个,标答3个,他给出4个,哪怕是标答部分都给出了(比如标答“AB”,给出“ABC”等),也只能算多选,给0分。
  1. =IF(ISNUMBER(FIND(B$1&".",读卡!$B1)),IF(LEN(TRIM(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+3,4)))=COUNT(FIND(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+{3,4,5},1),B$3)),B$2/2,0),B$2)
复制代码
(公式针对11、12、13、14、15多选题,如果单选题1、2、3等也在内,FIND(B$1&".",读卡!$B1)要改成FIND(" "&B$1&"."," "&读卡!$B1)。
附件把6楼结果及《读卡》B列答案(仅保留11~15题)复制在右,作对照参考。


EH(WJG)c.rar (16.12 KB, 下载次数: 21)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-5-4 12:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢了,的确6楼的公式不能解决老师所列的第二种情况

您提供的公式慢慢消化中,再次感谢!

TA的精华主题

TA的得分主题

发表于 2014-5-4 12:27 | 显示全部楼层
本帖最后由 wangjguo44 于 2014-5-4 12:48 编辑

关于公式=IF(ISNUMBER(FIND(B$1&".",读卡!$B1)),IF(LEN(TRIM(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+3,4)))=COUNT(FIND(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+{3,4,5},1),B$3)),B$2/2,0),B$2)的解释:
1、第一层if:IF(ISNUMBER(FIND(B$1&".",读卡!$B1))——是楼主自己思路,不用解释;
2、第二层if的条件:IF(LEN(TRIM(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+3,4)))=COUNT(FIND(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+{3,4,5},1),B$3)),B$2/2,0)——判断该题回答的答案的字符长度是否和每个字符在标准答案出现的个数相等(相等是漏选,不等就是错选或多选,例如标答是“AB”,他回答是“A”,字符长1,在标答中能找到的个数也是1,漏选;若回答是“C”,字符数1,能找到是0个,不等,错选;若回答“ABC”,字符数3,能找到数是2,也不等,多选。至于正确回答“AB”,在《读卡》B列中已排除,并由第一层给出3分):
    a、LEN(TRIM(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+3,4)))——该题给出答案的字符数,其中MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+3,4)因为取4个字符,若答案不到4个字符,则含有空格,由TRIM函数清除空格;(顺便提一句,6楼公式类似这一段的是TRIM(MID(读卡!$B1,LEN(FIND(" "&B$1&"."," "&读卡!$B1))+3,4)),其中用了LEN,是用错了的,FIND(" "&B$1&"."," "&读卡!$B1)得到的是位置号,如果位置在前9位,用LEN再求一下,得到1,MID(读卡!$B1,1+3,4)得到的《读卡》B列第第四个字符起,四个字符长的字符串(若,B列是“3.D   6.B   8.A   10.B   11.AD   12.AC   15.AD”,得到的是“3.D”后面的四个字符,而不是对应的11(或12、13……)题的答案,若位置是在第9位以后,LEN求得2,MID(读卡!$B1,2+3,4),依然还是第一个答题后面的字符)  
    b、COUNT(FIND(MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+{3,4,5},1),B$3))——给出答案的每个字符在标答里能找到的字符个数,其中MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+{3,4,5},1)是把给出答案分解成3个字符(如果给出答案有四个字符的话,这里还得改成MID(读卡!$B1,FIND(B$1&".",读卡!$B1)+{3,4,5,6},1))(这里也再提一下6楼公式,也有类似的一小节:MID(读卡!$B1,FIND(" "&B$1&"."," "&读卡!$B1)+{3,4},1),这样的话,+{3,4}只取到2个字符,若答案是“ABC”,第三个“C"将被漏取)。COUNT(FIND(MID(……),B$3))得到的给出字符在标答找到的个数。
3、其余则用不着多解释了。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 23:38 , Processed in 0.048211 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表