엑셀을 다루다 보면, 수식이나 참조 오류가 발생할 경우 #DIV/0!, #VALUE!, #REF! 등 다양한 형태의 오류 메시지를 접하게 됩니다. 이때 IFERROR 함수를 사용하면, 특정 계산이 잘못된 값을 반환하더라도 이를 원하는 메시지나 0, 공백 등으로 대체하여 깔끔하게 정리할 수 있습니다. 예컨대 =IFERROR(A1/B1, 0)
처럼 작성하면, B1이 0일 때 발생하는 #DIV/0! 오류를 0으로 치환해 보여주게 됩니다.
그런데 실무에서 간혹 “IFERROR 함수가 있다고 해서 오류를 다 무시할 줄 알았는데, 여전히 오류가 뜬다”라거나, “오류가 아니라 잘못된 값이 그대로 반환된다”는 문제 제보를 접하게 됩니다. 원인은 다양합니다. A1/B1 계산 자체는 오류가 아니지만 결과가 ‘비정상’인 숫자를 낸다든지, 특정 함수가 반환한 것이 엑셀이 인식하는 ‘오류 값’이 아니라 단순히 빈 셀이거나 텍스트여서 IFERROR가 무시해버리지 못하는 경우가 대표적입니다.
한편, IFERROR를 적용했는데도 전혀 예상치 못한 결과가 계속 보이면, 수식 논리가 잘못 짜여졌거나, 사실상 오류가 아닌 ‘일반 값’으로 처리되고 있을 가능성도 있습니다. 또한 언뜻 오류처럼 보이는 값이 실제로는 #N/A나 -1 등 특정 함수가 의도적으로 반환하는 값일 수 있으므로, 상황에 따라 IFERROR가 정상 작동하지 않는 것이 아니라, “엑셀이 오류로 간주하지 않는 값”이라는 점을 인지해야 합니다.
본문에서는 이러한 문제의 대표 원인과 구체적인 해결책, 유사 상황에서 생길 수 있는 변형 사례와 예방 팁을 다룹니다. 엑셀 함수 논리 구조에 익숙하지 않은 사용자도, IFERROR 함수의 한계를 파악하고 적절히 대처할 수 있도록 FAQ 등을 곁들여 정리해 보겠습니다.
오류 발생 원인 또는 이유
IFERROR가 “오류를 다른 값으로 대체”해주는 것임에도, 실제로 어떤 수식에서 결과가 기대대로 처리되지 않는 상황은 여러 각도에서 비롯됩니다. 엑셀이 ‘오류’라고 판단하는 범위와 사용자가 ‘잘못된 값’이라 부르는 범위가 다르기 때문입니다. 아래 표에서는 대표적인 원인을 요약합니다.
원인 | 예시 상황 |
---|---|
수식 결과가 실제 오류가 아님 | B1이 0이 아닌 아주 작은 수로 계산 결과가 큰 값 또는 엉뚱한 값이 나왔는데, 이는 #DIV/0! 같은 오류가 아닌 일반 숫자로 간주됨 |
함수에서 #N/A가 아닌 다른 텍스트 반환 | VLOOKUP이 실패 시 “Not Found”라는 문자열을 반환하도록 코드가 되어 있는 경우, IFERROR는 “오류 값”으로 간주하지 못함 |
#N/A를 따로 처리 안 함 | IFERROR가 #N/A도 잡기는 하지만, 특정 함수(예: MATCH)에서 반환된 것이 문자열 “#N/A”라면 오류가 아님 |
셀 서식 등으로 인한 오인 | 셀에 ###### 처럼 표시되지만 실제로는 값이 들어 있어, IFERROR가 오류로 간주할 요소가 없을 때 |
잘못된 IFERROR 작성 | =IFERROR(A1/B1="오류", 0) 같은 식으로, 구문을 잘못 작성해 함수가 정상 작동하지 않음 |
엑셀이 “오류”라고 간주하는 대표적 유형은 #DIV/0!, #N/A, #VALUE!, #REF!, #NUM!, #NAME?, #NULL! 등이 있습니다. 만약 수식이 이 범주에 속하지 않는 결과를 반환한다면(가령 텍스트나 숫자 등), IFERROR는 이를 “정상 값”이라고 간주해 대체 구문을 발동하지 않습니다. 때문에 사용자가 “이건 오류 같은데?”라고 느껴도, 엑셀 입장에서는 “그냥 일반적인 값”이 될 수 있음을 이해해야 합니다.
해결방법
IFERROR가 제대로 작동하지 않아 “잘못된 값”을 걸러내지 못하는 경우, 우선 해당 값이 엑셀의 ‘오류 값’ 범주에 속하는지부터 점검해야 합니다. 만약 오류 값이 아니라면, 다른 방식으로 처리하거나, 조건문으로 직접 걸러줘야 할 수도 있습니다. 아래에서 3가지 이상 대표적인 해결책을 500자 이상의 분량으로 소개하겠습니다.
- 실제 오류값인지 여부를 먼저 확인
가장 간단한 접근은 문제의 셀이 실제로 #DIV/0!, #VALUE!, #N/A 등 엑셀이 인식하는 오류 코드 중 하나인지 확인하는 것입니다. 예컨대 어떤 함수가 “자료 없음” 상황에서 ‘#N/A’를 반환한다면,=IFERROR(해당 함수, "미발견")
형태로 깔끔히 처리할 수 있습니다. 반면에 이 함수가 ‘Not Found’라는 문자를 직접 반환하도록 코딩되어 있다면, 이는 오류가 아니라 텍스트이므로 IFERROR에 걸리지 않습니다.
따라서 수식의 반환 로직을 살펴보고, 정말 엑셀이 오류라고 판단하는 값을 반환하도록 만들면 IFERROR가 제대로 작동합니다. 예컨대 VLOOKUP에서 오류 없이 문자열을 반환하도록 할 게 아니라, 아예 못 찾는 경우에는 =NA() 함수를 반환하게 만들어두면 IFERROR로 처리 가능하게 됩니다.
물론 이미 문자열을 반환하는 로직이 많다면, IFERROR를 쓰기보다는=IF(해당 셀="Not Found", "어쩌고", ...)
같은 식으로 직접 조건문을 작성해야 합니다. - 함수로 만들어진 “오류 비슷한 숫자/문자”는 직접 처리
어떤 수식이 9999999처럼 비정상적으로 큰 숫자를 내놓거나, 음수 값을 의도와 다르게 표시하는 등의 케이스는, 엑셀이 오류로 간주하지 않습니다. 이런 “이상한 값”을 배제하려면,IFERROR
만으로는 한계가 있으므로, 조건문(IF)을 별도로 구성해 “값이 특정 범위를 벗어나면 0으로 치환” 같은 로직을 짜야 합니다.
예컨대 A1/B1 결과가 100,000 이상이면 “이상치”로 간주해 0으로 대체하고 싶다면, 다음과 같은 식이 가능합니다:
여기서 IFERROR는 실제로 #DIV/0! 같은 오류가 발생할 때를 처리하고, 그 외 일반 숫자이되 100000을 넘는 경우는 내부적인 IF로 감지하는 식입니다. 즉, 숫자 범위 통제를 병행해야 IFERROR가 “수치적 오류가 아닌 값”도 처리할 수 있게 됩니다.=IFERROR( IF(A1/B1 > 100000, 0, A1/B1), 0 )
- IFERROR 구문 자체가 올바른지 점검
의외로 IFERROR를 사용할 때, 구문 자체를 잘못 쓰는 경우도 있습니다. 예:=IFERROR(A1/B1="오류", 0)
처럼 “A1/B1”을 비교하는 구문을 대입해버리면, 사실상 “A1/B1=오류 문자열?”이라는 논리를 돌리는 것이므로, IFERROR가 정상 작동하지 않습니다. IFERROR의 문법은IFERROR(값, 오류 시 대체값)
이며, 첫 번째 인수에 “오류가 발생할 가능성이 있는 수식”이 들어가고, 두 번째 인수에 “오류일 경우 대신 반환할 값”을 넣는 구조입니다.
따라서 아래처럼 작성해야 올바르게 작동합니다.
만약 “A1/B1” 결과가 실제 오류(#DIV/0! 등)라면 “오류가 발생했습니다.”를 반환하고, 정상 계산 값이 나온다면 그대로 계산 결과를 보여줍니다. 혹시=IFERROR(A1/B1, "오류가 발생했습니다.")
=IFERROR(A1/B1="오류", ...)
처럼 작성했다면, 즉시 수정해줘야 합니다. 구문이 올바르지 않으면 IFERROR가 무용지물이 됩니다.
해결방법 | 핵심 요약 |
---|---|
실제 오류값인지 확인 | 오류 코드(#DIV/0!, #N/A 등)가 아니면 IFERROR 미적용 |
이상치/문자 직접 처리 | 음수, 큰 수, “Not Found” 등은 별도 IF 로직으로 거르기 |
IFERROR 구문 올바르게 작성 | =IFERROR(검사할 수식, 오류 발생 시 대체값) 구조 |
위 방법들을 적용해보면, “IFERROR 함수가 왜 이 값은 무시 안 하지?”에 대한 원인을 대체로 밝혀낼 수 있습니다. 특히 수식이 실제 오류가 아닌데도 사용자는 ‘오류’로 착각하는 상황이 잦으니, 숫자 범위 조정이나 따로 IF문을 배치하는 등 보완이 필요합니다.
팁과 예방방법 등
IFERROR는 편리한 함수이지만, “엑셀이 공식적으로 인식하는 오류”만 처리할 수 있다는 한계를 지니므로, 값이 정말로 오류인지 여부를 먼저 판단하는 습관이 중요합니다. 아래 3가지 이상의 팁과 예방방법을 500자 이상의 분량으로 정리합니다.
- 오류 값 vs. 오류처럼 보이는 일반 값 구분하기
엑셀 작업 시, 언뜻 보면 “이상치”, “비정상”으로 보이는 값이라고 해서 모두 “오류”는 아닙니다. 예컨대 -9999 같은 수, “NaN” 같은 텍스트, “???” 같은 문자는 엑셀 입장에서는 완전 정상 데이터입니다. 이 경우IFERROR
는 작동하지 않습니다. 따라서 수식 설계 전에, “정말 엑셀이 #DIV/0! 등 오류로 인식하는 결과”인지, 아니면 그냥 특별한 숫자나 문자열인지 구분해두면, 뒤에서 불필요한 삽질을 피할 수 있습니다.
특히 VLOOKUP, MATCH, INDEX 등의 검색 함수가 값을 찾지 못했을 때, #N/A 오류를 반환하는지, 아니면 임의로 “Not Found” 같은 텍스트를 내놓도록 작성돼 있는지에 주목해야 합니다. 전자라면 IFERROR가 유용할 것이고, 후자라면 다른 논리가 필요합니다. - 조건부 처리(IF, OR, AND 등)와 함께 설계
IFERROR만으로 해결이 어려운 경우, 다른 조건부 함수를 병행하여 수식을 이중·삼중으로 보완하는 방법이 있습니다. 예컨대 A1/B1 결과가 오류(#DIV/0!)인 경우 0으로 대체하되, 결과가 1000을 초과하면 1000으로 제한하는 식으로 작성하려면, 다음과 같은 식이 될 수 있습니다:
먼저 IFERROR로 “오류”를 잡고, “오류가 아닐 때”는 내부 IF를 통해 범위를 통제합니다. 이렇게 로직을 쌓으면, 흔히 발생하는 대규모 오류나 이상치 문제를 한꺼번에 처리할 수 있어 유지보수에 유리합니다. 단, 수식이 너무 길어지면 가독성이 떨어지므로, 경우에 따라 helper 셀을 두는 것도 좋습니다.=IFERROR( IF(A1/B1 > 1000, 1000, A1/B1), 0 )
- 유사 함수(ISERROR, IFNA, ISNA 등) 고려
IFERROR는 넓은 범위의 오류(#N/A, #DIV/0!, #REF! 등)를 모두 잡아주지만, 특정 상황에서는IFNA
나ISERROR
같은 함수를 사용하는 편이 더 명확할 수 있습니다. 예를 들어, VLOOKUP이 값을 찾지 못해 #N/A만 반환하는 로직이라면=IFNA(VLOOKUP(...), "미발견")
가 훨씬 직관적이고, 다른 오류(#DIV/0! 등)가 발생했을 때는 그대로 표시되므로 문제 원인을 바로 알 수 있습니다.
반면 IFERROR는 #N/A 외의 다른 오류까지 싸잡아 처리하므로, 디버깅이 어려워질 수 있습니다. 즉, 모든 오류를 한꺼번에 숨기는 것이 아니라, 특정 오류만 다루고 다른 오류는 드러나게 두는 쪽이 좋을 때는, IFNA, IF, ISERROR 같은 함수를 조합해 세밀하게 설계해야 합니다.
예방 방법 | 핵심 효과 |
---|---|
오류 vs. 일반 값 구분 | 수식 설계 단계에서 “IFERROR로 잡힐지 여부” 명확화 |
조건문 + IFERROR 병행 | 오류 처리와 이상치 처리 동시 실행 가능 |
IFNA, ISERROR 등 유사 함수 활용 | 특정 오류만 골라 처리, 디버깅 효율 향상 |
이처럼 간단히 오류를 숨기고 싶다면 IFERROR가 편리하지만, 오류가 아닌 값을 걸러내거나 세부적인 로직을 구현하려면 추가적인 조건문이 필수적이라는 점을 기억하면 좋습니다. 특히 실무에서 여러 형태의 함수가 섞인 복잡한 파일을 다룰 때는, 모든 오류를 무조건 IFERROR로 감싸기보다, 어떤 오류를 어떻게 처리할지 사전에 기획해두는 편이 유지보수에 훨씬 유리합니다.
FAQ
마지막으로, IFERROR 함수와 관련해 실무 현장에서 자주 제기되는 궁금증을 500자 이상의 분량으로 정리합니다.
- Q1. #N/A는 IFERROR로 잡히는데, MATCH 함수에서 반환하는 0은 왜 못 막나요?
A1. MATCH 함수가 정상적으로 값을 찾으면 인덱스를 숫자로 반환하는데, 해당 숫자가 0이 “오류”가 아니기 때문입니다. 엑셀은 0을 정상적인 정수로 인식하므로 IFERROR가 전혀 반응하지 않습니다. 0이 “못 찾았다”라는 의미로 로직상 쓰인 거라면,=IF(MATCH(...) = 0, "없음", MATCH(...))
같은 식의 추가 조건이 필요합니다. 즉, “0이면 안 된다”를 설계하려면 IFERROR가 아니라 일반 IF로 처리해야 합니다. - Q2. “######”처럼 셀에 해시 기호가 나오는 건 오류 아닌가요?
A2. 셀이 좁아서 표시 공간이 부족할 때, 엑셀이 대신 “######”를 보여줍니다. 그러나 이는 오류가 아니라 정상 데이터가 셀에 들어있으나 화면에 전부 표시할 수 없다는 시각적 표시에 가깝습니다. IFERROR로 막을 수 없고, 셀 너비를 넓히거나 줄바꿈 등 서식을 조정하면 정상 값을 볼 수 있습니다. - Q3. 일부러 VLOOKUP 실패 시 “Not Found”를 반환하는데, IFERROR( , 0)로 막을 수 없나요?
A3. 불가능합니다. VLOOKUP이 #N/A 대신 ‘Not Found’라는 문자열을 반환하도록 작성했다면, 이는 엑셀이 오류로 간주하지 않는 “정상 텍스트”입니다. IFERROR는 이 값을 그대로 “정상 결과”로 인식하므로, 대체값을 표시하지 않습니다. 이런 경우=IF(VLOOKUP(...)="Not Found", 0, VLOOKUP(...))
식으로 직접 조건문을 구성하거나, VLOOKUP이 못 찾았을 때 #N/A를 반환하도록 만들어야 IFERROR가 효력을 발휘합니다. - Q4. #DIV/0! 오류 대신 0을 보여주고 싶어요. 간단히 가능하죠?
A4. 네.=IFERROR(A1/B1, 0)
같은 형태로 작성하면, B1이 0이거나 빈 셀이어서 #DIV/0!가 발생할 때 IFERROR가 0을 반환합니다. 다만 실제로 0이 맞는 의미인지, “표시만 0”으로 하는 것이 적절한지는 업무 상황에 따라 판단이 필요합니다. 숨기기보다는 별도의 문구 “불가능”을 표시하는 게 더 정확한 경우도 있습니다. - Q5. IFERROR가 2중, 3중으로 중첩된 상황은 어떻게 디버깅하나요?
A5. 수식이 복잡해지면, 단계별로 분해하는 접근을 추천합니다. 예를 들어 중첩 IFERROR를 하나씩 풀어서, 개별적으로 #DIV/0!나 #N/A가 어느 지점에서 발생하는지 확인합니다. 또한 명시적인 이름 정의나 헬퍼 셀을 둬서 각 단계의 결과를 시각적으로 확인하면, 오류가 어디서 생기는지 쉽게 파악할 수 있습니다. 정리가 끝난 후에 다시 수식을 합쳐 넣되, 문서화하거나 주석을 달아두면 재작업 시에도 혼동이 줄어듭니다.
요약하자면, IFERROR는 엑셀이 오류라고 인정하는 값을 다른 값으로 대체하는 기능을 수행합니다. 사용자 입장에서 “이건 오류 같은데?”라고 느껴도, 실제로는 엑셀이 정상 값으로 처리하는 상황이 적지 않으므로, 먼저 값의 정체를 확인한 뒤에 적절한 방안을 강구해야 합니다. 필요한 경우 IF, ISERROR, IFNA, ISNA 등과 조합해 수식을 정교하게 구성하면, 보다 유연한 오류·값 처리를 구현할 수 있습니다.
'#2 엑셀 오류 가이드' 카테고리의 다른 글
엑셀 VBA에서 For Each 루프가 특정 셀 범위를 인식 못 할 때 (0) | 2025.02.15 |
---|---|
엑셀에서 ‘스마트 태그’가 제거되지 않을 때 (0) | 2025.02.14 |
엑셀 데이터 유효성 검사에서 ‘날짜 범위’ 설정이 안 될 때 (0) | 2025.02.12 |
엑셀에서 인쇄 영역을 설정해도 범위가 어긋날 때 (0) | 2025.02.11 |
엑셀 VBA에서 Timer 함수가 작동하지 않을 때 대처 (0) | 2025.02.10 |