오류 셀을 0으로 바꾼 뒤 SUM 합계가 달라졌다면, IFERROR를 잘못된 위치에 감싼 것이다. 엑셀 IF 함수 IFERROR 조합 사용법의 핵심은 단 하나—오류가 IF 조건에 영향을 주면 IFERROR를 바깥에, 아니면 IF를 바깥에 두는 것이 기본 원칙이다. 두 함수를 함께 쓸 때 순서를 먼저 결정해야 수식이 의도대로 작동한다.
IF와 IFERROR, 목적 자체가 다르다
IF는 조건의 참·거짓을 판단한다. IFERROR는 수식이 오류를 반환할 때만 개입한다. 둘 다 분기를 만들지만 출발점이 다르다.
=IF(조건, 참일 때 값, 거짓일 때 값)=IFERROR(수식, 오류일 때 값)
결정적 차이는 오류에 대한 반응이다. IF는 조건 계산 중 오류가 발생하면 그 오류를 그대로 뱉는다. IFERROR는 안쪽 수식의 오류를 흡수해 지정한 대체값으로 바꾼다. #N/A, #VALUE!, #REF!, #DIV/0! 등 오류 유형을 가리지 않는다.
이 차이를 모르면 중첩 구조에서 수식이 예상과 다른 결과를 낸다. 두 함수 중 어느 쪽이 안쪽에 들어가느냐가 동작의 분기점이다.
중첩 순서 비교: IFERROR(IF(…)) vs IF(IFERROR(…))
예시 상황을 하나 잡자. A열에 부서명, B열에 실매출, C열에 =VLOOKUP(A2, 목표표, 2, 0)으로 목표값을 가져온다. 일부 부서는 목표표에 없어서 C열에 #N/A가 뜬다.
패턴 1 — IFERROR가 바깥: 모든 오류를 한 번에 잡는다
=IFERROR(IF(B2>=C2, "달성", "미달"), "목표 없음")
C2가 #N/A면 IF 자체가 오류를 낸다. IFERROR가 그것을 받아 “목표 없음”을 출력한다. 오류 상황을 하나의 메시지로 통합할 때 쓴다. VLOOKUP·XLOOKUP 결과를 IF 안에서 직접 비교하는 구조에서 가장 많이 나오는 패턴이다.
패턴 2 — IF가 바깥: 조건 분기 후 내부에서만 오류 처리
=IF(A2="", "", IFERROR(VLOOKUP(A2, 목표표, 2, 0), "코드 없음"))
A2가 빈 셀이면 IF가 먼저 빈 문자열을 반환해 VLOOKUP 자체를 실행하지 않는다. A2에 값이 있을 때만 VLOOKUP을 실행하고, 그 결과가 오류면 “코드 없음”을 출력한다. 조건 진입과 오류 처리를 따로 제어하고 싶을 때 쓴다. 특히 빈 셀이 많은 입력 시트에서 불필요한 오류 발생을 사전에 차단하는 데 유효하다.
패턴 3 — IFERROR 결과를 IF의 조건에 쓴다
=IF(IFERROR(VLOOKUP(A2, 목록, 1, 0), "")="", "미등록", "등록됨")
VLOOKUP이 실패하면 IFERROR가 빈 문자열을 반환하고, IF가 그 결과를 읽어 “미등록”을 출력한다. 두 함수가 역할을 분담하는 구조다—IFERROR는 오류를 흡수하고, IF는 메시지를 결정한다. 목록 유효성 확인이나 거래처 존재 여부를 체크하는 시트에서 자주 쓴다.
실전 수식 패턴 3가지
1. 나눗셈 오류 + 조건 분기
=IFERROR(IF(C2=0, "-", B2/C2*100&"%"), "계산 불가")
분모가 0이면 IF가 먼저 “-“를 반환해 #DIV/0!을 막는다. IF가 처리하지 못하는 다른 오류(예: 셀이 텍스트여서 나오는 #VALUE!)는 바깥 IFERROR가 잡는다. 두 겹의 안전망이다. 달성률·증가율처럼 분모가 0이 될 수 있는 KPI 시트에서 자주 쓰이는 구조다.
2. 다단계 중첩에서 오류를 바깥 하나로 통합
=IFERROR(IF(D2="Y", VLOOKUP(A2, 시트2!A:C, 3, 0)*1.1, VLOOKUP(A2, 시트2!A:C, 3, 0)), "확인 필요")
D2 값에 따라 다른 배율을 적용하되, VLOOKUP 오류를 바깥 IFERROR 하나로 통합한다. 수식이 길어질수록 오류 처리를 안쪽에 여러 개 심는 것보다 바깥에 한 번 감싸는 편이 수정·디버깅이 쉽다. 다만 이 방식은 어떤 오류가 났는지 구분이 안 되므로, 원인 파악이 필요한 시트에는 적합하지 않다.
3. 두 시트 교차 조회 + 오류 처리
=IF(IFERROR(VLOOKUP(A2, 시트1!A:B, 2, 0), "")="", IFERROR(VLOOKUP(A2, 시트2!A:B, 2, 0), "미확인"), VLOOKUP(A2, 시트1!A:B, 2, 0))
시트1에 없으면 시트2에서 찾고, 둘 다 없으면 “미확인”을 출력한다. 중첩이 깊어지는 만큼, 보조 열에 단계별 결과를 쪼개 넣는 방식과 속도·가독성을 비교해 선택하는 것이 좋다.
오류를 숨기면 오히려 위험한 경우
IFERROR로 모든 오류를 지우는 것이 항상 좋은 선택은 아니다. 실수로 잘못된 범위를 참조했을 때 #REF!가 나야 알아챌 수 있는데, IFERROR가 “없음”으로 바꿔버리면 문제가 보이지 않는다. 데이터 검증용 시트나 원장에는 오류 셀을 그대로 두는 편이 낫다.
대체값으로 0을 쓰는 경우 특히 주의가 필요하다. =IFERROR(수식, 0)으로 처리하면 오류 셀이 0으로 집계에 포함된다. 오류 원인을 찾기 전에 합계가 정상처럼 보여 보고서에 틀린 수치가 올라가는 일이 생긴다. 오류 셀을 집계에서 제외하려면 대체값을 빈 문자열(“”)로 쓰는 것이 안전하다. 단, 빈 문자열이 섞이면 숫자·텍스트 혼용으로 새로운 오류가 생길 수 있으니 상황을 보고 판단해야 한다.
흔히 오해하는 것이 있다. “IFERROR를 쓰면 오류를 ‘처리’한 것”이라는 생각이다. IFERROR는 오류를 처리하는 게 아니라 숨기는 함수다. IFERROR가 오류를 숨기는 메커니즘과 어떤 상황에서는 쓰면 안 되는지를 파악해 두면 조합 판단이 훨씬 정확해진다.
정리: 상황별 중첩 순서 결정표
| 상황 | 권장 구조 | 이유 |
|---|---|---|
| VLOOKUP·XLOOKUP 결과를 IF 조건에서 비교할 때 | IFERROR(IF(…)) | 오류가 IF까지 전달되면 IF도 오류를 낸다 |
| 빈 셀이면 수식 자체를 실행하지 않을 때 | IF(조건, IFERROR(…)) | 불필요한 오류 발생을 사전에 차단 |
| 오류 결과를 IF의 조건 입력값으로 쓸 때 | IF(IFERROR(…, “”)=””…) | 오류를 IF가 읽을 수 있는 값으로 먼저 변환 |
| 복잡한 다단계 수식에서 오류를 통합할 때 | IFERROR(복잡한 IF 중첩, 메시지) | 안쪽에 여러 IFERROR를 심는 것보다 유지보수 쉽다 |
| 오류 유형별로 다르게 처리할 때 | IFNA + IF(ISERROR(…)) | IFERROR는 모든 오류를 구분 없이 처리한다 |
IF와 IFERROR의 조합은 어느 쪽을 바깥에 두느냐에 따라 처리 범위와 오류 흡수 시점이 달라진다. 수식을 짜기 전에 “오류가 어느 단계에서 발생하는가, 그 오류를 조건 판단에 써야 하는가”를 먼저 확인하면 중첩 순서가 자연스럽게 결정된다. 수식을 다 쓴 뒤에 순서를 바꾸려 하면 전체 구조를 다시 짜야 하는 경우가 많다. 처음 설계 단계에서 결정하는 것이 핵심이다.
자주 묻는 질문
IFERROR(IF(…))와 IF(IFERROR(…))는 어떻게 다른가요?
IFERROR가 바깥이면 IF에서 발생한 오류까지 전부 잡습니다. IF가 바깥이면 조건 분기를 먼저 처리한 뒤 안쪽 수식에서 생긴 오류만 IFERROR가 처리합니다. 오류가 발생하는 단계와 처리 시점이 다릅니다.
VLOOKUP 오류를 IF 조건에 사용하려면 어떤 수식이 필요한가요?
=IF(IFERROR(VLOOKUP(A2,범위,1,0),"")="","미등록","등록됨") 구조를 씁니다. IFERROR가 #N/A를 빈 문자열로 바꾼 뒤 IF가 그 결과를 읽어 분기합니다.
IFERROR 대체값으로 0을 쓰면 왜 문제가 생기나요?
오류 셀이 0으로 바뀌면 SUM·AVERAGE 계산에 포함됩니다. 오류 원인을 찾기 전에 합계가 정상처럼 보여 보고서에 틀린 수치가 올라갈 수 있습니다. 집계에서 제외하려면 대체값을 빈 문자열("")로 설정하는 편이 안전합니다.
#N/A와 #VALUE! 오류를 각각 다르게 처리하고 싶을 때는?
IFERROR 대신 IFNA와 ISERROR를 조합합니다. IFNA는 #N/A만 잡고, ISERROR는 모든 오류 유형을 처리합니다. 예를 들어 =IFNA(VLOOKUP(…),"없음")을 쓰면 #VALUE!는 그대로 노출되어 다른 방식으로 대응할 수 있습니다.
IF와 IFERROR를 3단 이상 중첩해도 되나요?
기술적으로 가능하지만, 3단 이상이 되면 수식이 길어져 디버깅이 어렵습니다. IFERROR를 가장 바깥에 한 번만 두거나, 보조 열에 단계별 결과를 분리해 계산하는 방식이 유지보수에 훨씬 유리합니다.