IFERROR·IFNA 실습: 미등록·원본 오류·실제 0을 구분하기
조회 결과를 전부 0으로 바꾸면 상품 P200의 실제 단가 0과, 없는 상품 P999를 구분할 수 없습니다. 원본 단가 셀 자체가 오류인 P300도 같은 0으로 보입니다. 이번 실습은 원시 조회값을 남기고 표시·원인 분류·기대값 비교를 다른 열에 놓아 이 세 상황을 분리합니다.
가격과 상품 코드는 가상입니다. 첨부 practice-105.xlsx의 오류 셀은 이 차이를 확인하기 위해 의도적으로 남긴 값이며, 모두 없애야만 정상인 파일이 아닙니다.

1. 제품 4개와 조회 입력 6개
원본 A1:C5에서 상품 P100의 단가는 12000, P200은 숫자 0, P300의 단가 셀 B4는 =NA(), P400은 4800입니다. P300에 문자열 #N/A를 적은 것이 아니라 실제 오류를 만드는 수식이 들어 있습니다.
조회 A2:A7에는 P100, P999, P200, P300, P400, P100 을 순서대로 넣습니다. 마지막 값에는 후행 공백 한 개가 있습니다. 이 입력을 멋대로 TRIM해서 지우면 이번 반례가 사라지므로 그대로 둡니다.
2. B열은 원시 값, C와 D열은 표시 정책
B2의 조회식과 C2·D2의 표시식을 아래 순서대로 넣고 7행까지 채웁니다.
=VLOOKUP(A2,'원본'!$A$2:$B$5,2,FALSE)
=IFNA(B2,"확인 필요")
=IFERROR(B2,0)
IFNA는 결과가 #N/A일 때 지정한 대체값을 반환합니다. IFERROR는 수식이 오류이면 지정한 대체값을 반환합니다. 두 함수 모두 원본 데이터를 고치는 함수가 아닙니다.
| 조회 코드 | B 원시 결과 | C IFNA | D IFERROR 0 |
|---|---|---|---|
| P100 | 12000 | 12000 | 12000 |
| P999 | #N/A | 확인 필요 | 0 |
| P200 | 0 | 0 | 0 |
| P300 | #N/A | 확인 필요 | 0 |
| P400 | 4800 | 4800 | 4800 |
| P100 뒤 공백 | #N/A | 확인 필요 | 0 |
D열의 0만 모아 합산하면 실제 값 0인 것과 확인되지 않은 값을 구분할 수 없습니다. 먼저 B열의 원시 결과를 보존하고, 어떤 업무에서 어떤 표시를 허용하는지 정해야 합니다.
3. 키 존재와 원본 오류를 별도로 분류하기
E2에는 다음 식이 있으며 E7까지 이어집니다. 코드가 없는 경우와 같은 코드가 여러 개 있는 경우를 먼저 구분한 뒤 조회 오류를 봅니다.
=IF(A2="","입력 필요",IF(COUNTIF('원본'!$A$2:$A$5,A2)=0,"키 없음",IF(COUNTIF('원본'!$A$2:$A$5,A2)>1,"중복 키",IF(ISNA(B2),"원본 #N/A",IF(ISERROR(B2),"수식 점검","조회됨")))))
최초 E2:E7은 조회됨·키 없음·조회됨·원본 #N/A·조회됨·키 없음입니다. P300은 키가 존재하기 때문에 단순 미등록으로 분류하지 않습니다. P100 뒤 공백은 별개의 조회 입력으로 남습니다.
이 식의 계약은 표에 들어 있는 고유한 코드와 정상 숫자 또는 의도한 오류 단가입니다. 이 실습 수식은 단가 공란 검증, 대소문자를 구별하는 식별자, 중복 키의 우선순위 정책까지 해결하지 않습니다. 특히 이 실습의 ‘조회됨’ 판정은 단가의 업무상 유효성을 보장하지 않으므로 원본 근거를 별도로 확인합니다.

원시 조회값이 #N/A라면 표시식을 바꾸기 전에 찾기 위치와 반환 셀을 따로 확인하세요. #N/A의 키 형식·범위·원본 오류 진단에서 앞자리 0과 공백을 대조하고, MATCH가 위치를 찾았는데 단가에서 오류가 전달되는 경우도 나눠 봅니다.
4. 고정 기대값을 오류와 숫자로 나눠 비교하기
F열에는 최초 원시 기대값을 적습니다. F3·F5·F7의 #N/A는 비교용 텍스트이고 B열의 실제 오류와 자료형이 다릅니다. G2:G7은 그 차이를 고려해 비교합니다.
=IF(ISNA(B2),IF(F2="#N/A","일치","확인"),IFERROR(IF(B2=F2,"일치","확인"),"다른 오류"))
H열의 분류 기대값과 E열은 I열의 =IF(E2=H2,"일치","확인")로 비교합니다. 최초 입력에서는 G와 I의 여섯 행 모두 ‘일치’입니다. 이는 주어진 입력의 비교 결과일 뿐, 임의의 새 데이터에 대한 승인 표시가 아닙니다.
5. IFNA가 남겨 두는 오류를 직접 보기
오류비교 B2:B6의 입력은 각각 =NA(), =1/0, =INDEX('원본'!$A$2:$B$5,1,3), ="x"+1, =0입니다. C열은 IFNA, D열은 IFERROR로 ‘확인 필요’를 표시하도록 설정했습니다.
| 원시 입력 | B 결과 | C IFNA 결과 | D IFERROR 결과 | 오류 번호 |
|---|---|---|---|---|
| NA() | #N/A | 확인 필요 | 확인 필요 | 7 |
| 1/0 | #DIV/0! | #DIV/0! | 확인 필요 | 2 |
| 2열 범위의 열3 | #REF! | #REF! | 확인 필요 | 4 |
| 문자 x에 1 더하기 | #VALUE! | #VALUE! | 확인 필요 | 3 |
| 숫자 0 | 0 | 0 | 0 | 0 |
E열의 =IFERROR(ERROR.TYPE(B2),0)은 오류 유형을 숫자로 비교합니다. ERROR.TYPE은 오류가 없는 값에서는 #N/A를 반환하므로, 여기서의 0은 바깥 IFERROR가 정한 ‘오류 없음’ 표식입니다. 오류 번호 0이라는 Excel 오류 종류가 있다는 뜻이 아닙니다.
6. 값을 바꾸되 원인 기록을 지우지 않기
사본에서 조회!A3만 P100으로 바꾸면 B3=12000, E3=조회됨이 됩니다. 최초 P999용 기대값은 그대로 남아 있으므로 G3와 I3은 확인으로 바뀌어야 합니다. A3을 P999로 되돌려 최초 비교를 복구합니다.
다음으로 원본!B4를 임시 숫자 3000으로 바꾸면 P300 조회값도 3000이 되고 분류는 조회됨입니다. 실습 뒤에는 B4를 =NA()로 되돌립니다. 실제 자료의 오류 복구에는 임의 단가를 넣지 말고, 원장 담당자가 확인한 값을 별도 이력과 함께 반영하는 절차가 필요합니다.
7. 검증 범위와 중단할 경우
첨부의 숫자·오류 종류·분류·고정 기대값을 Python 참조 검사와 LibreOffice 재계산으로 비교했습니다. 최초 생성 도구의 오류 텍스트 비교 캐시 문제는 별도 사본의 계산 캐시를 비우고 재계산해 확인했습니다. Microsoft Excel 앱을 실행한 검증은 아닙니다.
조회 범위 길이 오류나 함수 오타까지 IFERROR로 0에 합치지 마세요. 원본 키가 중복되면 E열의 중복 키 표시에서 멈추고 어느 행을 쓸지 정한 뒤 조회 구조를 변경합니다. 외부 통합문서 연결과 실제 가격 정책은 이 가상 파일의 검산 범위에 포함하지 않습니다.

본문과 같은 입력으로 연습하기
실습 XLSX에는 본문에서 지정한 셀과 수식이 들어 있습니다. 검산 자료 ZIP에는 같은 XLSX와 입력·수식 CSV, 실습 설명, README 및 오프라인 Python 검산 코드가 있습니다. 원본 업무 파일을 덮어쓰지 말고 사본으로 연습하세요. Microsoft Excel 앱의 실제 실행 결과로 제공하는 파일은 아닙니다.
공식 자료
IFNA function | Microsoft Support
IFERROR function | Microsoft Support
ERROR.TYPE function | Microsoft Support
출처 원문 수집일: S1 2026-09-24; S2 2026-09-24; S3 2026-09-24.