빈 B2 셀이 있습니다.
= ISBLANK (B2) 는 TRUE를 제공합니다
그것에 대한 간단한 논리 테스트는 FALSE를 반환합니다.
= IF (B2, TRUE, FALSE) 는 FALSE를 제공합니다
그러나 AND 문에서 직접 사용될 때 TRUE를 리턴합니다.
= AND (B2, TRUE) 는 TRUE를 제공합니다
물론 AND 문에서 간접적으로 사용되는 경우 여전히 FALSE를 반환합니다.
= AND (IF (B2, TRUE, FALSE), TRUE) 는 FALSE를 나타냅니다.
왜 내 Excel이 그런 식으로 동작하는지 설명해 주시겠습니까?
답변
여기 에서 추출한 Excel 논리 함수-사실 및 그림 섹션을 찾으 십시오 .
논리 함수 (AND, XOR, NOT, OR)를 사용할 때 Excel에서 인수에 텍스트 값 또는 빈 셀이 포함 된 경우 이러한 값은 무시됩니다.
답변
TL; DR -Excel에서 셀 내용을 내부적으로 저장하고 교환하는 방식의 결과입니다. 빈 셀은 값이없는 VARIANT이며, 프로그래밍 언어가 0과 0이 아닌 값의 진실성을 처리하는 방식으로 인해 FALSE로 변환됩니다.
AND()
(및 다른 모든 논리 함수) 의 동작은 두 인수를 모두 부울로 변환 한 다음 논리 and
연산 을 수행하는 것입니다. 덮개를 벗기고 Visual Basic Editor의 개체 브라우저를 사용하여 Excel 개체 모델에 어떻게 정의되어 있는지 살펴볼 수 있습니다.
그것은 반환합니다 Boolean
가 아닌을 합니다 Variant
. 이는 함수 평가 프로세스 중 어느 시점에서 모든 인수가 Boolean
s 로 변환되어야 함을 의미 합니다 . 실제로 관찰 된 동작은 처리 초기에 수행되었음을 나타냅니다. Excel은 모든 인수를 변환하려고 시도하고 변환 된 값이 성공하면 계산에 사용하여 사용자에게 친숙해 지려고 합니다. String
“True”및 “False”값을 함수 에 전달하면이를 확인할 수 있습니다 .
=AND("true","true") <---Results in TRUE
=AND("false","true") <---Results in FALSE
Etc.
또한 숫자 인수로 설명 할 수 있습니다. 0이 아닌 값은 true로, 0은 false로 처리합니다.
=AND(42,-42) <---Results in TRUE
=AND(0,0) <---Results in FALSE
=AND(42,0) <---Results in FALSE
Etc.
조합하여 동일한 동작을 갖습니다.
=AND("false",0) <---Results in FALSE
Etc.
이제 사진을 찍어야합니다. 그렇다면 이것은 빈 셀 테스트와 어떤 관련이 있습니까? 이에 대한 답은 Excel이 셀 내용을 내부적으로 저장하는 방법에 있습니다. 다시 한 번 Excel 개체 모델이 밝아졌습니다.
COM VARIANT 구조 입니다. 이 구조는 기본적으로 코드를 해석하는 방법을 알려주는 유형과 데이터 영역의 두 부분으로 구성됩니다. Excel에 내용이없는 셀 Variant
에는 하위 유형 이있는 “값”이 표시됩니다 VT_EMPTY
. 다시, 이것은 매크로로 확인할 수 있습니다 :
Sub DemoMacro()
'Displays "True" if cell A1 on the active sheet has no contents.
MsgBox Range("A1").Value2 = vbEmpty
End Sub
따라서 AND
함수가 그것을 Boolean
? 로 변환 하면 어떻게됩니까 ? 좋은 질문! 프로그래밍 언어가 일반적으로 0을 처리하는 방식과 유사하게 False입니다.
Sub DemoMacro2()
MsgBox CBool(vbEmpty)
End Sub
인수를 완전히 생략 하여 동일한 동작을 볼 수 있습니다 .
=AND(,)
…와 같은 것입니다 …
=AND({vbEmpty},{vbEmpty})
…와 같은 …
=AND(0,0)
… 이것은 :
=AND(FALSE,FALSE)
답변
@jcbermu의 답변에 대한 내 의견에 따라 약간의 수정이 있습니다.
모든 인수가 아닌 인수 에 셀 값 또는 빈 셀의 텍스트
값이 포함 된 경우 해당 값은 무시됩니다. 그러나 모든 인수 에 셀 값이나 빈 셀의 텍스트값이 포함되어 있으면 함수는#VALUE!
수정이 암시하는 경우 :
하나 이상의 인수가 셀 참조의 텍스트와 달리 문자열 리터럴의 텍스트 인 경우 결과는 다음과 같습니다.
#VALUE!
셀 경우 즉, A1
값 “ABC”, 다음이 =AND(A1,TRUE)
반환 TRUE
, 하지만 =AND("abc",TRUE)
돌아갑니다 #VALUE!
. 아래 이미지에서 9 ~ 13 행을 참조하십시오.
하지만 낯선 사람 이 되나요?
경우 어떤 인수 오류는 다음
AND
반환됩니다 첫 번째 오류입니다. 제외하고 , 인수 중 하나가 문자열 리터럴 인 경우 반환 값은#VALUE!
=AND(TRUE,TRUE,"abc")
=#VALUE!
=AND(1/0,foo(),TRUE)
=#DIV/0!
=AND(foo(),1/0,TRUE)
=#NAME?
=AND(1/0,foo(),"abc",TRUE)
=#VALUE!
=AND(foo(),1/0,"abc",TRUE)
=#VALUE!
답변
=ISBLANK(B2)
B2가 공백이 아닌 비어 있으면 참을 제공합니다.
=AND(B2,TRUE)
해야
=AND(B2="",TRUE)
당신이 값 (B2 빈 반환 참)과 제 2의 논리가 True를 작성해야하고 사실을 반환
=IF(B2,TRUE,FALSE)
해야 =IF(B2="",TRUE,FALSE)
진정한는 줄 것이다
=AND(IF(B2,TRUE,FALSE),TRUE)
되어야 =AND(IF(B2="",TRUE,FALSE),TRUE)
진정한 제공합니다
모든 테스트를 작성하기 위해 항상 시도를하고 Excel에서 할 것입니다 생각하지 않습니다. 공식에서 B2를 테스트하지 않음을
항상 기억하십시오 . IF 함수 사용 방법 Excel AND 함수Logical Test