B2 셀이 비어 있습니다.
=ISBLANK(B2)TRUE를 제공합니다
이에 대한 간단한 논리적 테스트는 FALSE를 반환합니다.
=IF(B2,참,거짓)거짓을 제공합니다
그러나 AND 문에서 직접 사용하면 TRUE를 반환합니다.
=AND(B2,참)TRUE를 제공합니다
물론 AND 문에서 간접적으로 사용되는 경우에도 여전히 FALSE를 반환합니다.
=AND(IF(B2,참,거짓),참)거짓을 제공합니다
내 Excel이 왜 그런 식으로 작동하는지 설명해 주시겠습니까?
답변1
에서 추출됨여기, 제목이 지정된 섹션을 찾으세요.Excel 논리 함수 - 사실과 수치:
Excel에서 논리 함수(AND, XOR, NOT, OR)를 사용할 때 인수에 텍스트 값이 포함되거나빈 셀, 이러한 값은 무시됩니다.
답변2
TL;DR- 엑셀이 내부적으로 셀 내용을 저장하고 교환하는 방식에 대한 아티팩트입니다. 빈 셀은 값이 없는 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이 아닌 값은 참으로, 0은 거짓으로 처리합니다.
=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이라는 점에 유의하세요.변형 구조. 이 구조는 기본적으로 코드를 해석하는 방법을 알려주는 유형과 데이터 영역이라는 두 부분으로 구성됩니다. Excel에 내용이 없는 셀에는 Variant
하위 유형이 있는 a로 표시되는 "값"이 있습니다 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)
답변3
@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!
답변4
=ISBLANK(B2)
B2가 공백이 아닌 비어 있으면 TRUE를 제공합니다.
=AND(B2,TRUE)
=AND(B2="",TRUE)
값(B2 빈 반환 True)을 작성해야 하며 두 번째 논리가 True이고 True를 반환해야 합니다 . True를 제공
=IF(B2,TRUE,FALSE)
해야 합니다. True를 제공 해야 합니다 . 항상 모든 테스트를 작성하려고 시도하고 Excel이 수행할 것이라고 생각하지 마십시오. B2를 테스트하지 말고 공식에서 항상 를 기억하세요 .=IF(B2="",TRUE,FALSE)
=AND(IF(B2,TRUE,FALSE),TRUE)
=AND(IF(B2="",TRUE,FALSE),TRUE)
Logical Test
IF 함수를 사용하는 방법
엑셀 AND 함수