기본 콘텐츠로 건너뛰기

[엑셀] AND, OR, NOT 불리언 논리의 조합 원리

엑셀 논리연산자, 그냥 외우기만 하면 반년 뒤에 또 헷갈립니다.

IF 함수를 어느 정도 다워본 분이라면 자연스럽게 다음 질문에 부딪힙니다. "조건이 하나가 아니라 두 개, 세 개 일 때는 어떻게 하지?" 이 질문에 대한 답이 바로 AND, OR, NOT 이라는 세 개의 논리연산자 입니다.그런데 많은 분들이 이 함수들을 "AND는 그리고, OR는 또는" 이라고 단순 암기한 뒤, 실제로 복잡한 조건식 앞에서는 다시 머뭇거립니다. 오늘은 이 세 함수를 단순히 사용법으로만 익히지 않고, 이것들이 애초에 왜 이런 방식으로 동작하는지, 그 뒤에 있는 논리학의 원리부터 짚어보려고 합니다. 원리를 한 번 제대로 이해하면 그 이후로는 절대 헷갈리지 않습니다.

조건이라는 것은 사실 참(TRUE)과 거짓(FALSE)일 뿐이다.

먼저 기본으로 돌아가 봅시다. 엑셀에서 A1 > 100 같은 조건식을 입력하면 셀에는 무엇이 표시될까요? 숫자도 아니고 텍스트도 아닌, TRUE 아니면 FALSE라는 결과가 나옵니다. 이것이 바로 불리언(Boolean) 값입니다. 불리언이라는 이름은 19세기 수학자 조지 불(George Boole)에서 따온 것으로, "세상의 모든 논리적 판단은 참과 거짓, 이 두 가지 상태로 환원될 수 있다"는 개념을 정립한 사람의 이름입니다.

엑셀의 조건부 함수들이 하는 일은 결국 이겁니다. 여러분이 만든 조건식을 계산해서 TRUE 또는 FALSE라는 딱 하나의 값으로 압축하는 것. IF 함수는 이렇게 압축된 하나의 참/거짓 값을 받아서 "참이면 이거, 거짓이면 저거"를 반환하는 단순한 구조입니다. 문제는 조건이 여러 개일 때입니다. "매출이 100만 원 이상이고, 동시에 지역이 서울인 경우"처럼 조건이 두 개 이상 겹치면, 이 여러 개의 참/거짓 값들을 어떻게 하나로 합쳐야 할지가 필요해집니다. 바로 이 역할을 하는 것이 AND, OR, NOT입니다. 이 세 함수는 새로운 종류의 계산이 아니라, 이미 존재하는 여러 개의 참/거짓 값을 하나의 참/거짓 값으로 합성하는 규칙일 뿐입니다.

AND — 모든 조건이 참이어야만 참이 된다

AND 함수는 괄호 안에 나열된 모든 조건이 하나도 빠짐없이 TRUE일 때만 최종 결과를 TRUE로 반환합니다. 조건이 열 개라면 아홉 개가 참이고 하나만 거짓이어도 전체 결과는 FALSE입니다. 이것을 "가장 약한 고리가 전체를 결정한다"는 식으로 이해하면 쉽습니다. 사슬을 이루는 모든 고리가 튼튼해야 사슬 전체가 튼튼한 것처럼, AND로 묶인 조건들은 그중 단 하나라도 무너지면 전체가 무너집니다.

=AND(B2>=100, C2="서울")

=IF(AND(B2>=100, C2="서울"), "대상", "제외")

위 예시는 매출이 100 이상이면서 동시에 지역이 서울인 경우에만 "대상"을 반환합니다. 둘 중 하나라도 어긋나면 바로 "제외"가 나옵니다. 실무에서 AND는 "이 조건 다 만족해야 통과"라는 필터링, 즉 조건을 점점 좁혀가는 상황에서 주로 쓰입니다. 조건을 하나씩 추가할수록 결과가 TRUE로 나올 확률은 낮아진다는 점을 기억해두면 실수를 줄일 수 있습니다.

OR — 하나만 참이어도 전체가 참이 된다

OR는 정반대의 논리입니다. 나열된 조건 중 단 하나라도 TRUE이면 전체 결과가 TRUE가 됩니다. 모두가 FALSE일 때만 전체가 FALSE로 떨어집니다. 이것은 "출입구가 여러 개인 방"에 비유할 수 있습니다. 문이 열 개 있는데 그중 아홉 개가 잠겨 있어도 하나만 열려 있으면 방에 들어갈 수 있는 것과 같은 원리입니다.

=OR(D2="결석", D2="지각")

=IF(OR(D2="결석", D2="지각"), "확인 필요", "정상")

이 수식은 상태가 결석이거나 지각이거나, 둘 중 하나에라도 해당하면 "확인 필요"를 반환합니다. OR는 "이 중 하나라도 걸리면 예외 처리"해야 하는 상황, 즉 조건을 점점 넓혀가면서 예외 사례를 놓치지 않으려 할 때 유용합니다. 조건을 추가할수록 결과가 TRUE로 나올 확률이 높아진다는 점에서 AND와는 완전히 반대되는 성질을 가집니다.


NOT — 참과 거짓을 뒤집는다

NOT은 AND, OR와 조금 다른 성격을 갖습니다. 앞의 두 함수가 여러 개의 조건을 "합성"하는 역할이라면, NOT은 단 하나의 조건 값을 그대로 뒤집는 역할만 합니다. TRUE는 FALSE로, FALSE는 TRUE로 반전시킵니다.

=NOT(E2="")

=IF(NOT(E2=""), "입력됨", "미입력")

이 수식은 E2 셀이 비어있지 않을 때(즉 "비어있다"라는 조건의 반대일 때) "입력됨"을 반환합니다. NOT은 특히 "~가 아닌 경우"를 표현할 때 조건식을 훨씬 읽기 쉽게 만들어줍니다. E2<>""라고 써도 결과는 같지만, 조건이 복잡해질수록 NOT(조건)의 형태가 사람이 읽기에 더 명확한 경우가 많습니다.

세 함수를 합쳐서 쓰면 벌어지는 일

실무에서 진짜 힘을 발휘하는 지점은 이 세 함수를 서로 중첩해서 쓸 때입니다. 예를 들어 "서울 또는 부산 지역이면서, 동시에 매출이 100 미만은 아닌 경우"라는 조건을 만든다고 해봅시다.

=IF(AND(OR(C2="서울", C2="부산"), NOT(B2<100)), "대상", "제외")

이 수식을 처음 보면 복잡해 보이지만, 안쪽부터 하나씩 읽어나가면 전혀 어렵지 않습니다. 먼저 OR(C2="서울", C2="부산")이 계산되어 TRUE 또는 FALSE 하나로 압축됩니다. 그다음 NOT(B2<100)이 별도로 계산되어 또 다른 TRUE/FALSE 값 하나가 만들어집니다. 마지막으로 AND는 이 두 개의 압축된 값을 받아서 둘 다 TRUE일 때만 최종 TRUE를 반환합니다. 즉 AND, OR, NOT을 중첩한다는 것은 사실 "참/거짓 값을 계산하고, 그 결과를 다시 다음 계산의 재료로 쓰는" 과정을 반복하는 것에 불과합니다. 이 구조를 이해하면 아무리 조건이 복잡해져도 안쪽에서 바깥쪽 순서로 하나씩 분해해서 읽을 수 있습니다.

프로그래밍의 불리언 연산자와 정확히 같은 개념이다

이 원리는 엑셀만의 것이 아닙니다. 파이썬을 다뤄본 분이라면 and, or, not이라는 키워드를, 자바스크립트를 다뤄본 분이라면 &&, ||, !라는 기호를 본 적이 있을 겁니다. 이것들은 표기 방식만 다를 뿐 엑셀의 AND, OR, NOT과 완전히 동일한 논리 규칙을 따릅니다.

// 자바스크립트

if (sales >= 100 && region === "서울") { ... }

# 파이썬

if sales >= 100 and region == "서울":

엑셀 수식 AND(B2>=100, C2="서울")과 위 코드는 사실상 같은 문장을 다른 언어로 옮긴 것에 불과합니다. 이 사실을 알고 나면 엑셀의 논리연산자가 갑자기 낯설거나 특별한 것이 아니라, 컴퓨터가 판단을 내리는 가장 근본적인 방식이라는 것을 알 수 있습니다. 반대로 엑셀에서 이 원리를 제대로 익혀두면 나중에 프로그래밍 언어를 배울 때도 조건문 부분에서 훨씬 수월하게 넘어갈 수 있습니다.

중첩 IF와 비교했을 때 왜 더 나은가

많은 분들이 처음에는 여러 조건을 IF를 겹겹이 중첩해서 처리하려고 합니다.

=IF(B2>=100, IF(C2="서울", "대상", "제외"), "제외")

이렇게 쓰면 조건이 두 개일 때는 그럭저럭 읽을 수 있지만, 조건이 세 개, 네 개로 늘어나면 IF 안에 IF가 겹겹이 쌓이면서 괄호의 짝을 맞추는 것조차 버거워집니다. 반면 AND/OR로 조건을 먼저 하나의 참/거짓 값으로 압축한 뒤 IF에 넣으면, IF는 "조건이 참이냐 거짓이냐"라는 원래의 단순한 역할만 하면 됩니다. 즉 조건을 판단하는 로직(AND/OR/NOT)과 그 결과에 따라 무엇을 반환할지 결정하는 로직(IF)을 분리하는 것입니다. 이렇게 역할을 나누어 생각하는 습관은 수식이 복잡해질수록 그 차이가 극명하게 드러납니다.

실무에서 자주 하는 실수 하나

초보자들이 가장 많이 하는 실수는 다음과 같은 형태입니다.

=IF(C2="서울" OR "부산", "대상", "제외")   ← 잘못된 예시

=IF(OR(C2="서울", C2="부산"), "대상", "제외")   ← 올바른 예시

"C2가 서울이거나 부산이면"이라는 문장을 한국어 그대로 옮기려다 보니 C2="서울" OR "부산"처럼 쓰는 경우가 많은데, 엑셀은 이렇게 이해하지 않습니다. OR 함수 안에는 각각 완결된 조건식이 쉼표로 구분되어 들어가야 합니다. 즉 "C2가 서울인가"라는 조건과 "C2가 부산인가"라는 조건, 이렇게 완전한 두 개의 문장이 각각 필요합니다. 이 실수가 반복되는 이유는 결국 OR가 "여러 개의 텍스트 중 하나"를 비교하는 함수가 아니라, "여러 개의 참/거짓 판단 중 하나"를 합성하는 함수라는 점을 놓치고 있기 때문입니다.

정리

AND, OR, NOT을 진짜로 이해했다는 것은 단축키나 문법을 외웠다는 뜻이 아닙니다. 이 세 함수가 결국 여러 개의 참/거짓 값을 하나의 참/거짓 값으로 합성하는 규칙이라는 점, 그리고 그 규칙이 AND는 전부 참이어야 하고 OR는 하나만 참이어도 되며 NOT은 그 결과를 뒤집는다는 아주 단순한 원리에서 출발한다는 점을 이해하는 것입니다. 이 감각이 생기면 아무리 조건이 복잡한 수식을 만나도 당황하지 않고 안쪽부터 하나씩 풀어나갈 수 있습니다. 다음 글에서는 이런 다중 조건 판단이 IFS와 SWITCH라는 함수를 통해 어떻게 다른 방식으로도 표현될 수 있는지, 순차 평가와 값 매칭이라는 두 가지 접근 방식의 차이를 살펴보겠습니다.

이 블로그의 인기 게시물

[엑셀]엑셀 날짜는 사실 숫자다 — 1900년부터 세어온 일련번호의 정체

 날짜가 적힌 셀에 그냥 1을 더하면 무슨 일이 벌어질까? 신기하게도 결과는 정확히 '다음 날 날짜'가 된다. 문자처럼 보이는 날짜에 어떻게 숫자를 더했는데 날짜가 하루 늘어날 수 있을까. 답은 간단하다. 엑셀에서 날짜는 애초에 문자가 아니라 숫자이기 때문이다. 날짜가 숫자로 저장된다는 사실 확인하기 날짜가 입력된 셀의 서식을 '일반'으로 바꿔보면 그 정체가 바로 드러난다. 2026-01-15라고 표시되던 셀이 갑자기 46037 같은 숫자로 바뀐다. 이 숫자가 바로 엑셀이 내부적으로 이 날짜를 저장하고 있는 실제 값, 즉 시리얼 넘버(일련번호)다. 화면에 "2026-01-15"라고 보이는 것은 앞서 TEXT 함수 편에서 다룬 것처럼, 이 숫자 위에 날짜 서식이라는 표시 규칙이 덧씌워진 결과일 뿐이다. 1900년을 기준으로 세는 시리얼 넘버 시스템 엑셀은(윈도우 버전 기준) 1900년 1월 1일을 시리얼 넘버 1로 정하고, 그날부터 하루가 지날 때마다 숫자를 1씩 늘려가는 방식으로 날짜를 표현한다. 46037이라는 숫자는 곧 "1900년 1월 1일로부터 46,037번째 되는 날"이라는 뜻이다. 날짜에 숫자를 더하거나 빼는 계산이 자연스럽게 되는 이유가 바로 여기에 있다. 날짜끼리의 덧셈·뺄셈은 사실 이 일련번호끼리의 평범한 산술 연산일 뿐이다. =DATE(2026,1,15) + 30 이 수식은 2026년 1월 15일의 시리얼 넘버에 30을 더한 것과 같으므로, 결과는 정확히 30일 뒤의 날짜인 2026년 2월 14일이 된다. 시간은 어떻게 표현될까 — 소수점 이하가 하루의 몇 분의 몇인지 날짜가 정수로 표현된다면, 시간은 그 정수의 소수점 이하 부분으로 표현된다. 하루 24시간을 1로 놓았을 때, 낮 12시는 하루의 정확히 절반이므로 0.5가 된다. 예를 들어 46037.5라는 값은 "2026년 1월 15일 낮 12시"를 의미한다. 날짜와 시간이 함께 입력된 셀을 다룰 때 정수 부...

[엑셀]배열수식이란 무엇인가 — 하나의 셀에 여러 계산이 담기는 원리 스칼라 연산과 배열 연산의 차이

 셀 하나를 클릭했는데 그 안에서 수백 번의 계산이 동시에 일어나고 있다면 믿어지는가. 앞선 글에서 다룬 SUMPRODUCT나 SUMIF의 조건 판정이 바로 그런 경우였다. 겉으로는 셀 하나에 결과값 하나만 보이지만, 그 이면에서는 범위 전체를 대상으로 한 계산이 통째로 진행되고 있었다. 이 글에서는 이 현상의 정체, 즉 배열수식이라는 개념을 원리 차원에서 짚어본다. 스칼라 연산과 배열 연산의 차이 평소 우리가 쓰는 대부분의 수식은 '스칼라 연산'이다. =A2+B2 처럼 셀 하나와 셀 하나를 계산해서 값 하나를 내놓는 방식이다. 입력도 하나, 출력도 하나다. 반면 '배열 연산'은 여러 개의 값을 하나의 묶음(배열)으로 취급해서 한꺼번에 계산한다. =A2:A10+B2:B10 이라고 쓰면, 이는 A2+B2, A3+B3, ... A10+B10이라는 아홉 번의 계산을 동시에 수행하라는 뜻이 된다. 입력은 여러 개(범위 대 범위)지만, 이 계산 결과를 최종적으로 어떻게 압축해서 보여줄지는 그 다음 문제다. 결과가 여러 개인데 셀은 하나뿐이라면? 여기서 배열수식의 진짜 개념이 드러난다. 아홉 번의 계산 결과 아홉 개의 값이 나왔는데, 이를 담을 셀이 하나뿐이라면 엑셀은 어떻게 해야 할까. 과거 방식에서는 이 아홉 개의 값을 SUM이나 COUNT 같은 함수로 다시 하나로 압축해서 보여주는 방식을 썼다. 예를 들어 {=SUM(A2:A10*B2:B10)} 이라는 수식은 A와 B 각 행을 곱한 아홉 개의 결과를 배열로 만든 뒤, 그 아홉 개를 SUM으로 다시 하나로 합쳐 셀 하나에 담아내는 구조다. 여기서 중괄호 {} 는 사용자가 직접 입력하는 기호가 아니라, 예전 엑셀에서 Ctrl+Shift+Enter를 눌러 "이건 배열수식입니다"라고 선언했을 때 엑셀이 자동으로 붙여주던 표시였다. 왜 예전에는 이런 특별한 입력이 필요했나 일반 함수는 셀 하나 대 셀 하나로 계산하도록 설계되어 있었기 때문에, 여러 값을 배열째로 넘기려면 엑셀에게...

[엑셀]COUNTIF/COUNTIFS — 카운팅과 조건 매칭의 관계 SUMIF와의 구조적 유사성과 차이

 출석부를 관리하다 보면 "결석이 3회 이상인 학생 수"나 "이번 달 지각 횟수"처럼 특정 조건을 만족하는 항목이 '몇 개'인지 세야 하는 순간이 자주 온다. 앞선 글에서 다룬 SUMIF가 조건에 맞는 값들을 '더하는' 함수였다면, 이번에 다룰 COUNTIF는 조건에 맞는 항목이 '몇 개'인지를 세는 함수다. 이름도 구조도 SUMIF와 매우 닮았지만, 자세히 들여다보면 미묘하지만 중요한 차이가 하나 숨어 있다. COUNTIF의 기본 구조 =COUNTIF(A2:A100, "결석") COUNTIF는 조건을 검사할 범위와 조건, 이렇게 두 개의 인수만 받는다. A2:A100 범위에서 "결석"이라는 값과 일치하는 셀이 몇 개인지를 세어 그 개수를 반환한다. SUMIF와 COUNTIF의 구조적 유사성 지난 글에서 SUMIF의 원리를 "조건 범위를 참/거짓 배열로 바꾸고, 그 배열을 합계 범위 위에 겹쳐서 참인 위치만 더한다"고 설명했다. COUNTIF도 앞부분까지는 완전히 동일하다. 조건 범위를 검사해서 참/거짓 배열을 만드는 과정까지는 똑같다. 차이는 그다음이다. SUMIF는 이 배열을 다른 범위(합계 범위) 에 겹쳐서 값을 더하지만, COUNTIF는 겹칠 다른 범위 자체가 필요 없다. 그냥 참/거짓 배열에서 TRUE의 개수만 세면 끝나기 때문이다. 즉 "무엇을 더할지"를 지정할 필요가 없으므로 인수가 하나 줄어드는 것이다. 이렇게 보면 COUNTIF(범위, 조건)는 개념적으로 SUMIF(범위, 조건, 참거짓배열자체) 와 비슷한 일을 하는 셈이다. COUNTIFS — 여러 조건의 동시 만족 =COUNTIFS(A2:A100, "결석", B2:B100, ">=3") COUNTIFS 역시 SUMIFS와 동일한 방식으로 확장된다. 각 조건 범위마다 참/거짓 배열을 만들고, 이 배열들을...