本帖最后由 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、其余则用不着多解释了。
|