我有一张 Excel 表,用于输入学生测试答案,如下所示:
- A
- 乙
- A、B
- 光盘
并将这些答案与正确答案进行比较:
- A
- A
- 乙
- C、D、E
我知道如何使用 IF 函数,如果学生的答案正确(例如答案 1),则在单元格中输出“CORRECT”,否则输出“INCORRECT”。
我似乎无法找到一个公式,如果正确则显示‘正确’(1);如果错误则显示‘错误’(2);如果学生答对了一个答案,但同时错误地回答了另一个选项,则显示‘错误’(3);如果学生回答正确但漏了一个答案,则显示‘未答’(4)。
有什么办法吗?我尝试过使用通配符和 countif,但这超出了我的 Excel 水平。
提前感谢你的帮助!
答案1
解决方案
让我们用二进制表示答案,位顺序为 EDCBA,即
01010
意味着答案是
B,D
要转换文本答案(学生或答题纸),我们使用
=ISNUMBER(SEARCH("A", A1))*2^0 + ISNUMBER(SEARCH("B", A1))*2^1 + ISNUMBER(SEARCH("C", A1))*2^2 + ISNUMBER(SEARCH("D", A1))*2^3 + ISNUMBER(SEARCH("E", A1))*2^4
现在来比较一下。假设我们有 C1 正确答案和 D1 学生答案,两者都是使用上述公式的“按位”形式。然后
=IF(C1 = D1, "Correct", IF(BITAND(BITXOR(C1,D1),C1)=C1, "Incorrect", IF(BITAND(BITXOR(C1,D1),C1)=BITXOR(C1,D1), "Missing", "Mistake")))
说明
我可以试着解释一下,但那我就得先杀了你,然后再自杀。也许我可以试试……把检测“错误”看作是困难的问题会有所帮助,所以把它留到 if 的最后一个“全部捕获”情况。考虑跳过这一步,转而看下面的图片:
X XOR Y is a list of differences between lists X and Y
X AND Z = X means the list Z must at least contain everything in list X
X AND Z = Z means the list X must at least contain everything in list Z
Now lets say X is the list of correct answers (CA), Y is list of the student's answers (SA). Then:
Z = X XOR Y is a list of differences between CA and SA
If Z = 0 then the list is empty and CA = SA i.e. "Correct", else if
X AND Z = X
then the list of differences must contain at least everything in list of correct answers (i.e. no correct answers = "incorrect"), else if
X AND Z = Z
then the list of correct answers must contain at least everything in the list of differences (i.e. no wrong answers = "missing", one or more correct), else
NOT(all of the above)
then one or more correct answer and one or more incorrect answer = "Mistake".
总结
如果你画出来它实际上很容易(睡了一觉之后的领悟!):
答案2
您可以使用如下公式:
=LET(correct_answer,XLOOKUP(A2,$I$1:$I$4,$J$1:$J$4,""),IFS(B2=correct_answer,"CORRECT",IFERROR(FIND(B2,correct_answer,1),0)>0,"MISSED",IFERROR(FIND(correct_answer,B2,1),0)>0,"MISTAKE",TRUE,"INCORRECT"))
我们使用 LET 将名称分配correct_answer
给 XLOOKUP 的结果,以从正确答案列表中检索答案。然后我们使用IFS
对学生的答案和正确答案进行比较。
如果在使用时看到 NAME 错误,则可能是您无权访问 LET。在这种情况下,您应该删除对 LET 的调用,并将 correct_answer 的每个实例替换为 XLOOKUP 函数的副本。