저는 엑셀 작업을 하면서 데이터 표 간의 연결이 필요할 때 VLOOKUP를 자주 활용합니다. 예를 들어 주문 내역에서 상품 코드를 기준으로 상품명이나 가격을 즉시 찾아야 할 때 이 함수가 큰 시간을 절약해 주었습니다. 아래 글은 실제로 사용했던 경험을 바탕으로 VLOOKUP의 기본 원리와 실무 예제, 그리고 주의사항을 간결하게 정리한 것입니다.
VLOOKUP 함수 개요
VLOOKUP은 세로 방향으로 특정 값을 찾아, 그 값이 존재하는 행의 다른 열에 있는 데이터를 반환하는 엑셀 함수입니다. 데이터를 연결하고 빠르게 조회해야 하는 상황에서 자주 사용됩니다.
주요 특징
- 찾고자 하는 값이 표의 첫 번째 열에 있어야 합니다.
- 정확히 일치(FALSE) 또는 근사 일치(TRUE) 중 하나를 선택할 수 있습니다.
- 반환할 값은 table_array의 왼쪽에서부터 시작하는 열 인덱스(col_index_num)로 지정합니다.
- 근사 일치를 사용할 때는 table_array의 첫 열이 오름차순으로 정렬되어 있어야 합니다.
함수 구문
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
인수 설명
- lookup_value (찾을 값): table_array의 첫 번째 열에서 찾으려는 값입니다. 숫자, 텍스트, 날짜 혹은 셀 참조가 될 수 있습니다. 예: “사과”, 101, A2
- table_array (찾을 범위): lookup_value를 찾을 열과 반환할 값이 들어 있는 열을 모두 포함하는 데이터 범위입니다. 이 범위의 첫 열이 lookup_value가 있어야 하며, 보통 절대 참조($A$1:$D$10)를 사용합니다.
- col_index_num (열 번호): lookup_value가 있는 행에서 반환할 값이 들어 있는 열의 번호입니다. 예를 들어 table_array의 왼쪽 열이 1, 그다음 열이 2입니다.
- [range_lookup] (일치 옵션 – 선택 사항): 정확히 일치할지( FALSE ) 근사 일치할지(True) 여부를 설정합니다. FALSE일 때는 정확히 일치하는 값을 찾고, 일치하지 않으면 #N/A를 반환합니다. TRUE일 때는 근사치를 찾고, 첫 열이 오름차순으로 정렬되어 있어야 합니다.
예제 모음
다음은 가상의 “상품 목록” 시트와 “주문 내역” 시트를 기반으로 한 간단한 예제들입니다. 데이터 구성이 실제 상황과 비슷하다고 생각하시면 이해에 도움이 됩니다. 자세한 데이터 구성은 아래와 같습니다.
상품 목록 시트(Sheet1)
상품 코드 | 상품명 | 가격 | 재고
P001 사과 1000 50
P002 바나나 1500 30
P003 오렌지 1200 40
P004 딸기 2500 20
P005 포도 3000 10
주문 내역 시트(Sheet2)
주문 번호 | 상품 코드 | 상품명 | 가격 | 수량 | 총액
ODR001 | P002 | | | 2 |
ODR002 | P004 | | | 1 |
ODR003 | P001 | | | 3 |
ODR004 | P005 | | | 2 |
예제 1: 정확히 일치하는 값으로 상품명 찾기
목표: 주문 내역 시트에서 상품 코드로 상품명을 가져오기
=VLOOKUP(B2, Sheet1!$A$2:$D$6, 2, FALSE)
- lookup_value: B2(현재 행의 상품 코드, 예: “P002”)
- table_array: Sheet1!$A$2:$D$6(상품 목록의 코드부터 재고까지의 범위, 절대참조로 고정)
- col_index_num: 2(상품명은 두 번째 열에 위치)
- range_lookup: FALSE(정확히 일치)
결과: 주문 내역 시트의 C 열에 해당하는 상품명이 채워집니다. 예를 들어 ODR001의 C 열은 바나나가 됩니다.
예제 2: 정확히 일치하는 값으로 가격 찾기
목표: 주문 내역 시트에서 상품 코드로 가격을 가져오기
=VLOOKUP(B2, Sheet1!$A$2:$D$6, 3, FALSE)
- col_index_num: 3(가격은 세 번째 열)
결과: 각 행의 가격이 채워집니다. 예를 들어 ODR001은 1500이 됩니다.
예제 3: IFERROR를 이용한 오류 처리
목표: 존재하지 않는 상품 코드가 입력되었을 때 친절한 메시지 표시
=IFERROR(VLOOKUP(B2, Sheet1!$A$2:$D$6, 2, FALSE), "상품 없음")
- lookup_value가 표에 없으면 “상품 없음”으로 표시됩니다.
결과: 존재하지 않는 코드가 입력되면 C 열에 “상품 없음”이 표시됩니다.
예제 4: 근사 일치를 이용한 등급 부여
목표: 근사치를 이용해 점수에 따른 등급을 매기기
참고: 이 예제는 근사 일치의 일반적인 사용법을 보여주며, 표의 첫 열은 반드시 오름차순으로 정렬되어 있어야 합니다.
성적 등급 시트(Sheet3)
점수 이상 | 등급
0 | F
60 | D
70 | C
80 | B
90 | A
학생 점수 시트(Sheet4)
이름 | 점수 | 등급
김철수 | 85 |
이영희 | 72 |
박민수 | 58 |
최지아 | 91 |
학생 점수 시트의 C2 셀에 입력:
=VLOOKUP(B2, Sheet3!$A$2:$B$6, 2, TRUE)
- lookup_value: 학생의 점수(예: 85)
- table_array: Sheet3!$A$2:$B$6(점수와 등급 범위)
- col_index_num: 2(등급은 두 번째 열)
- range_lookup: TRUE(근사 일치) – 85점은 80점 구간의 등급인 B를 반환
결과: C 열에 각 학생의 등급이 채워집니다. 예: 김철수 85점 → B, 이영희 72점 → C, 박민수 58점 → F, 최지아 91점 → A
VLOOKUP 사용 시 주의사항 및 팁
- 첫 번째 열 규칙: lookup_value는 table_array의 첫 번째 열에 있어야 하며, 찾으려는 값이 이 열에 없으면 VLOOKUP은 작동하지 않습니다. 이때는 INDEX+MATCH나 XLOOKUP를 고려해 보세요. VLOOKUP 함수 – Microsoft Learn
- 절대 참조 사용: 수식을 다른 셀로 복사해도 범위가 고정되도록 $A$1:$D$10과 같이 절대 참조를 사용하는 것이 좋습니다. Excel Jet: VLOOKUP Function
- 정확히 일치를 기본으로: 대부분의 경우 정확한 값을 찾아야 하므로 range_lookup을 FALSE로 설정하는 것이 안전합니다. 필요 시 근사 일치를 사용할 때만 TRUE를 사용합니다.
- 근사 일치의 정렬 필요성: range_lookup을 TRUE로 사용할 때는 첫 열이 오름차순으로 정렬되어 있어야 합니다. 그렇지 않으면 예기치 않은 결과가 나올 수 있습니다.
- 오류 처리: lookup_value를 찾지 못하면 #N/A가 발생합니다. 이 경우 IFERROR를 활용해 사용자 친화적인 메시지로 처리하는 것이 좋습니다.
- 대소문자 구분 없음: 기본적으로 대소문자를 구분하지 않습니다.
- 공백 주의: 셀 값에 관찰되지 않는 공백이 있으면 일치하지 않을 수 있습니다. 필요 시 TRIM을 활용해 값을 먼저 정리하십시오. 예: =VLOOKUP(TRIM(B2), …)
- 와일드카드 사용: range_lookup이 FALSE인 경우, 와일드카드 문자(*)와 (?)를 사용할 수 있습니다. 예: “사과*”은 “사과”와 “사과주스” 등과 일치합니다.
참고 자료