본문 바로가기
#4 VBA/#4.2 코딩문법

Boolean형과 논리연산자(And, Or 등)

by 이세계의엑셀 2025. 8. 7.
반응형

이 글은 Excel 및 VBA에서 Boolean형과 주요 논리연산자(And, Or, Not, Xor)를 완벽하게 이해하고 실무에 즉시 활용할 수 있는 팁과 주의사항을 제공하는 것을 목적으로 한다.

Boolean 데이터형의 핵심 이해

Boolean은 True·False의 두 값으로 표현되는 1비트 논리형이다. 그러나 Excel VBA에서는 2바이트(16 비트)로 저장되며, 내부적으로 True=-1, False=0로 처리된다. 워크시트에서 TRUE/FALSE는 1·0으로 암묵적 형변환이 발생한다.

구분 VBA 저장값 워크시트 변환값 메모리 크기
True -1 1 2 Byte
False 0 0 2 Byte

주요 논리연산자와 기능

연산자 설명 우선순위 예시 결과
And 모든 조건이 True일 때 True 3 True And False = False
Or 하나라도 True이면 True 4 True Or False = True
Not 논리 부정 (True↔False) 1(가장 높음) Not True = False
Xor 배타적 OR, 양쪽이 다를 때 True 4 True Xor True = False
Tip : 동일한 우선순위에서는 왼쪽부터 오른쪽으로 계산되며, 괄호 사용으로 명시적 순서를 지정하는 것이 안전하다.

VBA 실전 예제

1. 조건 분기 최적화

'재고 수량이 0보다 작거나, 불량 플래그가 True이면 경고
If (qty < 0) Or (isDefect) Then
    Call AlertUser()
End If

2. 다중 조건 필터링

Dim rng As Range, cell As Range
Set rng = Range("A2:A100")
For Each cell In rng
    If (cell.Value >= 0) And (cell.Value <= 100) Then
        cell.Interior.ColorIndex = 6  '노란색
    End If
Next

3. XOR로 토글 플래그 만들기

toggleFlag = toggleFlag Xor True  'True→False→True 반복

워크시트 함수 AND·OR·NOT·XOR 활용

  • =AND(B2="Y", C2>=TODAY()) : 승인 표시와 유효기간을 동시에 검증
  • =OR(ISBLANK(D2), D2=0) : 빈 셀 또는 0 값 검출
  • =NOT(E2="완료") : 미완료 항목 필터
  • =XOR(G2="Y", H2="Y") : 두 검사값이 다를 때만 경고
함수 주요 용도 배열/동적 범위 지원 버전
AND 다중 조건 검증 초기버전~
OR 대안 조건 검증 초기버전~
NOT 부정 조건 초기버전~
XOR 배타 조건(2013↑) Office 2013↑

오류 처리 & 디버그 기법

  1. 형 일치 오류 : Boolean에 문자열을 직접 할당하면 Type Mismatch가 발생.
  2. Null 비교 : 변수가 Variant/Null이면 논리연산이 오류를 리턴. Nz 함수를 먼저 사용.
  3. 연산 순서 착오 : Not A And B(Not A) And B로 평가, 원하는 결과와 다를 수 있다.
  4. 워크시트 TRUE/FALSE 정렬 : True=1, False=0이므로 숫자로도 정렬가능. 단, 빈 셀은 주의.

실무 예제: 조건부 로직 자동화

1. 온·오프라인 재고 동기화 스크립트

If (offlineQty < ReorderPoint) Or (onlineQty < ReorderPoint) Then
    Call CreatePurchaseOrder()
End If

2. 품질 점검 자동 통과/불통과 판정

passFlag = (density >= 0.92 And density <= 0.94) _
           And Not isContaminated _
           And (viscosity Xor isSpecialLot)

성능 Tip : 다수의 논리식이 있는 코드를 루프 내에 반복실행하면 CPU 사용률이 높아진다. 필요 조건을 함수로 분리하고, 비트 단위 연산이 가능한 Abs(CInt())방식을 활용해 최적화할 수 있다.

성능 최적화 베스트 프랙티스

  • Boolean 배열 : 대량 데이터는 Dim flags(1 To 10000) As Boolean으로 저장해 메모리 절감.
  • Bitwise And/Or : 정수에 비트플래그를 저장한 후 If (flags And 4) = 4 Then… 패턴으로 속도 향상.
  • 연산자 결합 최소화 : 불필요한 And·Or를 대체로직이나 임시변수로 분리.
  • 자동 계산 모드 OFF : 복잡한 워크시트 함수를 일괄 변경 할 때는 Application.Calculation = xlCalculationManual로 전환.
반응형

FAQ

Q1. VBA에서 True가 -1인 이유는?

2진수의 모든 비트를 1로 채운 보수표현을 사용해 효율적 비트 비교를 하기 위해 호환성을 유지한 역사적 배경이 있다.

Q2. XOR 함수가 보이지 않는데 사용 못하나요?

Office 2013 이상에서만 기본 제공된다. 이전 버전은 =MOD(SUM(--조건),2) 같은 배열수식으로 대체한다.

Q3. 논리연산자가 긴 수식에서 예상과 다르게 동작합니다.

우선순위 및 괄호 위치를 확인하라. 특히 Not는 항상 가장 먼저 평가되므로 불필요한 혼란을 줄이기 위해 명시적 괄호를 사용한다.

Q4. Boolean은 메모리 절약용인가요?

VBA 에서는 2 바이트로 고정되어 실질 절감폭이 크지 않다. 다만 직관적 코드 가독성과 형안정성 측면에서 권장된다.

Q5. 워크시트 논리값을 차트 조건서식에 쓸 수 있나요?

TRUE·FALSE는 숫자(1·0)로 변환되어 차트 시리즈 값으로도 활용 가능하다. 필터링과 고급 조건부 서식에 응용되며, =N(TRUE) 함수를 통해 명시적 숫자화도 가능하다.

반응형