
이 글은 VLOOKUP
함수가 예상과 다른 결과를 반환하거나 오류를 표시할 때의 원인과 해결책을 정리하여 실무자들이 신속하게 문제를 파악하고 수정할 수 있도록 돕기 위함이다.
VLOOKUP 함수의 기본 구조 이해
VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
형태로 동작하며, 세로 방향으로 검색 값을 찾은 뒤 지정 열의 데이터를 반환한다. [range_lookup]
인수가 TRUE
이면 근사치 검색, FALSE
이면 정확한 값 검색을 수행한다. 함수가 올바른 값을 반환하지 않는다면 먼저 이 네 가지 인수의 설정을 검토해야 한다.
잘못된 값이 반환되는 주요 원인
- 정렬 문제: 근사치 모드에서
lookup_value
열이 오름차순으로 정렬되지 않음 - 데이터 형식 불일치: 숫자·텍스트 혼합, 숨은 공백·특수문자
- 열 번호 착오:
col_index_num
이 검색 범위를 벗어남 - 범위 고정 누락: 셀 복사 시
$
고정 실수 - 병합 셀 사용: 조회 열 또는 반환 열에 병합 셀이 존재
- 숨은 문자·제어 문자 섞임: 웹 복사 데이터, CSV 가져오기 등
원인별 해결 방법
유형 | 증상 | 점검 사항 | 해결 방안 |
---|---|---|---|
정렬 오류 | 근사치 모드에서 엉뚱한 행 반환 | 키 열 오름차순 정렬 여부 | 정확히 정렬하거나 FALSE 로 변경하다. |
데이터 형식 불일치 | #N/A 또는 빈 셀 반환 | 숫자·텍스트 구분, TRIM 필요 여부 | VALUE() , TEXT() , TRIM() 사용해 통일하다. |
열 번호 착오 | 다른 열의 값 표시 | col_index_num 재확인 |
정확한 열 번호 입력하다. |
범위 고정 누락 | 복사 후 참조 범위 밀림 | 절대참조 여부 | $ 로 절대참조 고정하다. |
병합 셀 | 예상 행·열 어긋남 | 병합 여부 | 병합 해제 후 정상화하다. |
숨은·제어 문자 | #N/A, 불일치 | CHAR(160), CHAR(10) 검출 | CLEAN() , SUBSTITUTE() 로 제거하다. |
실습 예제: 오류 재현 및 수정
1단계: 오류 상황 만들기
제품코드 | 제품명
-----------------
A001 | 사과
A002 | 배
A003 | 바나나
위 표가 B2:C4
범위라고 가정하고, 다른 시트에서 A003
을 조회한다.
=VLOOKUP("A003", Sheet1!$B$2:$C$4, 2, FALSE)
그러나 제품명이 반환되지 않고 #N/A
오류가 발생한다.
2단계: 원인 진단
- 찾는 값
"A003"
에 공백이 포함되어 있을 수 있다. - 제품코드 열에 보이는 공백 외에 CHAR(160) 등의 특수 공백이 존재할 수 있다.
3단계: 해결
=VLOOKUP(TRIM("A003"), CLEAN(Sheet1!$B$2:$C$4), 2, FALSE)
또는 별도 도우미 열을 만들어 =TRIM(CLEAN(B2))
처럼 정제한 값을 조회 열로 사용하면 더 효율적이다.
VLOOKUP 함수 대신 사용 가능한 대안
- XLOOKUP: 동적 배열 지원, 왼쪽 검색 가능, 디폴트 정확도
FALSE
이다. - INDEX·MATCH 조합: 열 위치 변동에도 안정적이며, 다중 조건 검색에 유리하다.
- FILTER 함수: 조건이 여러 개인 경우 행 전체를 반환하여 데이터 분석 시 편리하다.
실무 팁 및 Best Practice
- 테이블(Object) 활용: 범위가 늘어나도 자동 확장되어
col_index_num
오류를 줄인다. - 오류 처리 래핑:
IFERROR()
,IFNA()
로 보고서의 가독성을 높인다. - 명명된 범위 사용: 수식 이해도를 높이고 유지보수성을 강화한다.
- 데이터 검증(Data Validation) 설정: 잘못된 코드 입력을 사전에 차단한다.
- 범용 도우미 열: 검색키를 생성·정제하는 열을 별도로 두면 다중 함수에서 재사용 가능하다.
FAQ
Q1. 근사치 모드에서 정확한 결과를 얻으려면 어떻게 정렬해야 하나?
A1. lookup_value
가 위치한 첫 열을 오름차순(숫자·텍스트 동일 기준)으로 정렬한다. 혼합 형식이 있으면 텍스트가 숫자보다 뒤로 배치되므로 같은 형식으로 통일한 뒤 정렬하는 것이 안전하다.
Q2. 병합 셀이 많은 기존 양식을 유지한 채 VLOOKUP을 써야 할 때 대안은?
A2. 가급적 병합을 해제한 복제 시트를 만들어 함수 연산을 수행한 뒤, 결과값만 원본 시트로 연결하는 방식이 가장 안정적이다.
Q3. CSV를 불러오면 #N/A가 늘어나는데 원인은?
A3. CSV는 필드 구분 기호나 인코딩 차이로 인해 불필요한 제어 문자가 삽입될 수 있다. TEXTIMPORT
마법사에서 65001 UTF-8 인코딩을 선택하고, 불필요 공백 제거 옵션을 활성화한 뒤 CLEAN()
을 추가 적용한다.
Q4. 대소문자를 구분하며 조회해야 할 때는?
A4. VLOOKUP은 기본적으로 대소문자를 구분하지 않는다. INDEX(MATCH())
와 EXACT()
를 조합하거나, XLOOKUP
의 match_mode
인수에 0을 두고 search_mode
를 -1로 지정해 대소문자 감별을 구현한다.
Q5. 동적 배열 환경에서 다중 결과를 반환하려면?
A5. FILTER()
함수가 넓은 범위를 반환하므로 이후 INDEX()
나 TAKE()
로 필요한 열만 추출하면 된다. 배열 스필로 인해 기존 값이 날아가지 않도록 빈 영역에 수식을 입력해야 한다.
'#2 엑셀 오류 가이드' 카테고리의 다른 글
엑셀에서 “레코드 제한으로 인해 전체 데이터가 표시되지 않음” 오류 해결 가이드 (0) | 2025.05.11 |
---|---|
엑셀에 Power Query로 JSON 파일 불러오기가 실패할 때 (0) | 2025.05.10 |
엑셀 찾기 바꾸기 무반응: 한 시트에서만 멈출 때 대처법 (0) | 2025.05.09 |
엑셀에서 매크로 실행 창(Alt+F8) 목록이 갱신 안 될 때 빠르게 해결하는 완벽 가이드 (1) | 2025.05.08 |
엑셀 차트 Data Label 자동 조정 – 겹치는 라벨을 깔끔하게 해결하기 (2) | 2025.05.07 |