AND 함수는 비어있는 빈 셀에 대해 TRUE 결과를 제공합니다. 왜 그렇습니까? IF (B2, TRUE, FALSE) 는 FALSE를 제공합니다 그러나

빈 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. 이는 함수 평가 프로세스 중 어느 시점에서 모든 인수가 Booleans 로 변환되어야 함을 의미 합니다 . 실제로 관찰 된 동작은 처리 초기에 수행되었음을 나타냅니다. 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


답변