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)