AND 함수는 빈 BLANK 셀에 대해 TRUE 결과를 제공합니다. 이유는 무엇입니까?

AND 함수는 빈 BLANK 셀에 대해 TRUE 결과를 제공합니다. 이유는 무엇입니까?

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 개체 모델에 정의된 방법을 살펴볼 수 있습니다.

AND 개체 브라우저에서

,Boolean~ 아니다Variant. 이는 함수를 평가하는 과정 중 어느 시점에서모든 인수는 Booleans 로 변환되어야 합니다.. 실제로 관찰된 동작은 이것이 처리 초기에 수행되었음을 나타냅니다. 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 함수

관련 정보