기본 콘텐츠로 건너뛰기

[엑셀] IFS와 SWITCH 다중분기를 표현하는 두 가지 방식 순차평가 vs 값 매칭의 차이

 학점 계산 시트를 만들어본 적이 있다면 한 번쯤 이런 수식을 마주쳤을 것이다.

=IF(B2>=90,"A",IF(B2>=80,"B",IF(B2>=70,"C",IF(B2>=60,"D","F"))))

괄호가 네 겹, 다섯 겹 겹쳐지면서 어디서 어디까지가 하나의 조건인지 눈으로 쫓아가기가 점점 힘들어진다. 조건을 하나 더 추가하려고 괄호 개수를 세다가 실수로 하나를 빠뜨려 본 경험도 있을 것이다. 이 글에서는 이런 중첩 IF의 한계를 짚어보고, 이를 대체할 수 있는 IFS와 SWITCH 함수가 각각 어떤 원리로 동작하는지 살펴본다.

중첩 IF는 왜 한계에 부딪히는가

중첩 IF 자체가 잘못된 방법은 아니다. 다만 조건이 늘어날수록 두 가지 문제가 함께 커진다. 첫째는 가독성이다. IF 안에 IF가 들어가는 구조는 사람이 눈으로 괄호의 짝을 맞춰가며 읽어야 하는데, 조건이 4~5개를 넘어가면 이 과정 자체가 실수의 원인이 된다. 둘째는 수정의 어려움이다. 중간에 조건 하나를 끼워 넣으려면 괄호 구조 전체를 다시 손봐야 하는 경우가 많다. 엑셀은 이론적으로 IF를 64단계까지 중첩할 수 있도록 허용하지만, 실무에서는 그 한계에 도달하기 훨씬 전에 이미 유지보수가 불가능한 수식이 되어버린다. 즉 '몇 단계까지 가능한가'보다 '몇 단계부터 사람이 이해하기 어려워지는가'가 실질적인 한계선이다.

IFS 함수의 원리 — 순차평가라는 개념

IFS는 여러 개의 '조건, 결과값' 쌍을 나열해두면, 엑셀이 이를 위에서부터 순서대로 하나씩 검사하다가 처음으로 TRUE가 되는 조건을 만나는 순간 그 결과값을 반환하고 나머지는 검사하지 않는 구조다. 이것이 바로 '순차평가(sequential evaluation)'다. 중첩 IF가 괄호로 조건들을 층층이 감싸는 방식이었다면, IFS는 조건과 결과를 평면적으로 나열한다는 점이 다르다.

=IFS(B2>=90,"A", B2>=80,"B", B2>=70,"C", B2>=60,"D", TRUE,"F")

여기서 마지막의 TRUE,"F"는 앞의 모든 조건이 거짓일 때를 대비한 일종의 '기본값' 처리다. IFS에는 ELSE에 해당하는 전용 인수가 없기 때문에, 이렇게 항상 참이 되는 조건을 마지막에 넣어주는 방식으로 처리하는 것이 관례다. 만약 이 마지막 조건을 빠뜨리고 어떤 값도 조건을 만족하지 못하면 IFS는 #N/A 오류를 반환한다는 점도 기억해두어야 한다.

SWITCH 함수의 원리 — 값 매칭이라는 개념

SWITCH는 접근 방식이 근본적으로 다르다. IFS가 매번 새로운 조건식(예: B2>=90)을 평가하는 반면, SWITCH는 하나의 표현식 값을 정해두고 그 값이 뒤에 나열된 여러 후보값 중 무엇과 일치하는지를 비교한다. 즉 '조건 평가'가 아니라 '값 매칭(value matching)'이다.

=SWITCH(WEEKDAY(A2),1,"일요일",2,"월요일",3,"화요일",4,"수요일",5,"목요일",6,"금요일",7,"토요일","알수없음")

이 예제에서 SWITCH는 WEEKDAY(A2)라는 하나의 값을 계산한 뒤, 그 값이 1인지, 2인지, 3인지를 차례로 비교해 일치하는 요일 이름을 반환한다. 부등호를 이용한 범위 비교(90 이상, 80 이상 같은)는 SWITCH로 표현할 수 없다. SWITCH는 어디까지나 '이 값이 저 값과 같은가'를 판별하는 함수이기 때문이다. 그래서 학점처럼 구간을 나누는 문제는 IFS에, 요일·상태코드·카테고리명처럼 정해진 값 하나하나에 대응시키는 문제는 SWITCH에 더 적합하다.

IFS와 SWITCH, 언제 무엇을 쓸까

구분IFSSWITCH
평가 방식여러 조건식을 순차적으로 평가하나의 값을 여러 후보와 매칭
적합한 상황구간·범위 판정 (예: 90점 이상, 80점 이상)고정값 대응 (예: 요일번호, 상태코드)
기본값(ELSE) 처리마지막에 TRUE 조건 추가마지막 인수를 홀수 개로 남겨 기본값 지정
조건 실패 시#N/A 오류#N/A 오류

자주 하는 실수와 주의할 점

  • IFS에서 조건 순서를 잘못 배치하는 실수: 예를 들어 B2>=60을 B2>=90보다 먼저 적으면, 90점을 받은 학생도 첫 번째 조건에서 걸려버려 항상 낮은 등급이 반환된다. 반드시 좁은 범위(또는 더 엄격한 조건)를 먼저 배치해야 한다.
  • 기본값 조건을 빠뜨려서 예상치 못한 #N/A를 만나는 경우: 데이터에 예외적인 값이 섞여 있을 가능성을 항상 염두에 두고 마지막 조건을 챙기는 습관이 필요하다.
  • SWITCH로 범위 비교를 시도하다가 막히는 경우: 이럴 땐 SWITCH가 아니라 IFS나 중첩 IF로 전환해야 한다는 신호로 받아들이면 된다.

Q. IFS는 엑셀 어느 버전부터 쓸 수 있나요?

IFS와 SWITCH 모두 엑셀 2019 및 Microsoft 365 버전부터 제공된다. 그 이전 버전(2016 이하)에서는 지원되지 않으므로 중첩 IF나 VLOOKUP 조합을 사용해야 한다.

Q. IFS가 SWITCH보다 항상 더 나은 선택인가요?

그렇지 않다. 정해진 값 몇 개에 대응시키는 단순한 매칭이라면 SWITCH가 더 짧고 명확하다. 범위나 조건식이 필요한 경우에만 IFS를 선택하는 것이 좋다.

Q. 조건이 10개가 넘어가면 어떻게 해야 하나요?

이 경우 IFS도 가독성이 떨어지기 시작한다. 이럴 땐 별도의 참조표를 만들어 VLOOKUP이나 XLOOKUP으로 값을 찾아오는 방식이 더 유지보수하기 쉬운 대안이 될 수 있다.

마무리

중첩 IF의 핵심 문제는 '조건들을 층층이 감싸야 한다'는 구조 자체에 있었다. IFS는 그 조건들을 평면적으로 나열해 순차적으로 검사하도록 풀어주고, SWITCH는 애초에 조건 평가가 아니라 값 매칭이라는 더 단순한 문제로 치환해준다. 두 함수의 차이를 '순차평가 vs 값 매칭'이라는 원리로 이해해두면, 다음에 다중분기 수식을 마주쳤을 때 어떤 함수를 골라야 할지 훨씬 빠르게 판단할 수 있다. 다음 글에서는 조건부 집계의 대표 함수인 SUMIF와 SUMIFS가 내부적으로 조건 배열을 어떻게 다루는지 살펴본다.



이 블로그의 인기 게시물

[엑셀]엑셀 날짜는 사실 숫자다 — 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와 동일한 방식으로 확장된다. 각 조건 범위마다 참/거짓 배열을 만들고, 이 배열들을...