다음과 같이 학생 시험 답변을 입력하는 Excel 시트가 있습니다.
- ㅏ
- 비
- 에이,비
- CD
다음 답변을 정답과 비교하세요.
- ㅏ
- ㅏ
- 비
- 기,디,이
나는 IF 함수를 사용하여 학생의 대답이 맞으면(예: 대답 1) 셀에 'CORRECT'를 출력하고 그렇지 않으면 'INCORRECT'를 출력하는 방법을 알고 있습니다.
내가 할 수 없는 것은 맞다면 'CORRECT'를 뱉어내는 공식을 찾는 것입니다(1). 틀린 경우 'INCORRECT'(2); 학생이 정답 중 하나를 맞췄지만 동시에 다른 선택에 틀린 답을 한 경우 'MISTAKE'(3); 학생이 정답을 맞췄지만 답을 놓친 경우 'MISSED'(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의 마지막 "catch all" 사례에 남겨두십시오. 아래 이미지를 위해 이것을 건너뛰는 것을 고려해보세요:
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".
TL;DR
실제로 그려보면 꽤 쉽습니다(자고 난 후에 깨달음!).
답변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"))
correct_answer
LET를 사용하여 XLOOKUP 결과에 이름을 할당하여 정답 목록에서 답변을 검색합니다. 그런 다음 IFS
학생의 답변과 정답을 비교하는 데 사용됩니다 .
이를 사용할 때 NAME 오류가 표시되면 LET에 액세스할 수 없는 것일 수 있습니다. 이 경우 LET에 대한 호출을 제거하고 right_answer의 각 인스턴스를 XLOOKUP 함수의 복사본으로 바꿔야 합니다.