- 최초 작성일: 2007-05-31
- 최종 수정일: 2026-09-25
- 조회수: 24 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: VLOOKUP과 IF로 여러 테이블(시트) 내용 참조하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
질문 하나
VLOOKUP 함수에서는 여러 영역의 데이터를 참조하는 것이 원래부터 안되는 것인가요?
=VLOOKUP(A1,'1월:3월'!A:E,2,0)
이렇게 하니 #VALUE 라는 에러가 뜨고 계산이 안되는데요… 수정 부탁드려요~
여러 가지로 테스트를 많이 해 보시는군요.
사실 Vlookup 함수는 여러 개의 테이블을 참조하는 기능을 제공하지는 않지만(제공하지 않는다기보다 흔히들 그렇게 알고 있지만) 약간만 생각을 해 보면 불가능할 것 같지는 않습니다.
VLOOKUP과 IF로 여러 테이블(시트) 내용 참조하기
핵심 요약: VLOOKUP + IF로 여러 시트 참조하기
VLOOKUP 함수의 2번째 인수(table_array)에 IF 함수를 중첩하면, 조건에 따라 참조할 시트(테이블)를 동적으로 바꿀 수 있습니다.
- 핵심 아이디어: VLOOKUP은 원래 하나의 표만 참조하지만, table_array 자리에 IF를 넣으면 여러 표 중 하나를 골라 참조하게 만들 수 있음
- 예제 구조: 1월/2월/3월 시트에 각각 동일한 형식의 성적표를 두고, 선택한 월에 따라 다른 시트를 참조
- 수식: =VLOOKUP(이름,IF(월="1월",'1월'!범위,IF(월="2월",'2월'!범위,'3월'!범위)),5,FALSE)
Step 1: 예제 데이터 — 1월·2월·3월 모의고사 성적표
다음의 표에서 월과 이름을 선택해 보면 세 개의 시트를 참조하여 결과값을 돌려주고 있음을 알 수 있습니다. 바로 수식을 보지 마시고 어떻게 한 것인지 잠시 생각해 보시기 바랍니다.
세 시트(1월/2월/3월)에는 아래와 같이 같은 구조(이름·국어·영어·수학·평균)의 성적표가 각각 들어 있습니다.
| 이름 | 국어 | 영어 | 수학 | 평균 |
|---|---|---|---|---|
| 조승우 | 65 | 16 | 22 | 34.33 |
| 한근태 | 16 | 88 | 41 | 48.33 |
| 이나영 | 54 | 10 | 5 | 23 |
| 전지현 | 39 | 65 | 94 | 66 |
| 김태희 | 25 | 58 | 95 | 59.33 |
| 이름 | 국어 | 영어 | 수학 | 평균 |
|---|---|---|---|---|
| 조승우 | 65 | 26 | 53 | 48 |
| 한근태 | 67 | 2 | 22 | 30.33 |
| 이나영 | 57 | 87 | 31 | 58.33 |
| 전지현 | 91 | 27 | 17 | 45 |
| 김태희 | 45 | 0 | 74 | 39.67 |
| 이름 | 국어 | 영어 | 수학 | 평균 |
|---|---|---|---|---|
| 조승우 | 62 | 40 | 52 | 51.33 |
| 한근태 | 9 | 55 | 11 | 25 |
| 이나영 | 96 | 70 | 58 | 74.67 |
| 전지현 | 89 | 85 | 37 | 70.33 |
| 김태희 | 23 | 22 | 3 | 16 |
Step 2: 월 선택 → 이름 선택 → 평균점수 조회 데모
예를 들어 '월 선택'에서 2월, '이름 선택'에서 조승우를 고르면 다음과 같은 결과가 나옵니다.
| 월 선택 | 2월 |
| 이름 선택 | 조승우 |
| 평균점수 | 48 |
2월 시트에서 조승우의 평균이 48이었죠? 정확히 일치합니다. 위의 평균점수 부분에는 다음과 같은 수식이 들어 있습니다.
=VLOOKUP(C31,IF(C30="1월",'1월'!A3:E8,IF(C30="2월",'2월'!A3:E8,'3월'!A3:E8)),5,FALSE)
우리가 잘 아는 Vlookup 함수와, 더 잘 알고 있는 If 함수를 중첩하여 사용했군요. 즉, Vlookup 함수의 2번째 구성 요소인 table_array 인수 부분에 If 함수를 사용하면 참조 테이블의 범위를 여러 곳으로 지정해 줄 수 있는 것입니다. 보신 것처럼 시트가 다른 경우에도 가능합니다.
도구는 메이커에서 제공을 하지만 그것을 어떻게 활용하는가는 사용자의 몫으로 남습니다.
정리 — VLOOKUP + IF 중첩으로 여러 시트 참조하기
| 단계 | 핵심 작업 |
|---|---|
| 1. 시트 준비 | 1월/2월/3월처럼 같은 구조의 표를 여러 시트에 각각 만든다 |
| 2. 조건 셀 준비 | 참조할 시트를 고르는 '월 선택' 셀과 찾을 값을 넣는 '이름 선택' 셀을 만든다 |
| 3. 수식 작성 | VLOOKUP의 table_array 자리에 IF를 중첩해 조건별로 다른 시트 범위를 지정한다 |
| 4. 결과 확인 | 월/이름을 바꿔가며 VLOOKUP이 해당 시트의 값을 정확히 가져오는지 확인한다 |
자주 묻는 질문 (FAQ)
Q1. VLOOKUP은 정말 한 개의 표만 참조할 수 있나요?
VLOOKUP 함수 자체는 하나의 table_array만 받습니다. 하지만 그 table_array 인수 자리에 IF 함수로 조건별 범위를 넣으면, 결과적으로 여러 표 중 하나를 골라 참조하는 효과를 낼 수 있습니다.
Q2. 참조할 시트가 4개 이상이면 어떻게 하나요?
IF를 계속 중첩하거나(3개 이상이면 다소 복잡해집니다), CHOOSE 함수나 INDIRECT 함수를 활용하는 방법도 있습니다. 시트가 많아질수록 IF 중첩보다 INDIRECT 방식이 수식을 더 간결하게 만들어 줍니다.
Q3. 시트 이름에 공백이나 숫자가 포함되어 있으면 문제가 되나요?
시트 이름은 반드시 작은따옴표로 감싸 참조해야 합니다(예: '1월'!A3:E8). 이 규칙만 지키면 시트 이름에 숫자나 특수한 형식이 있어도 문제없이 참조할 수 있습니다.
마치며
VLOOKUP이 한 개의 표만 본다는 건 절반만 맞는 말입니다. table_array 자리에 IF를 살짝 얹어주면 여러 표를 오가며 값을 찾아올 수 있거든요. 비슷한 상황을 만나면 한번 응용해 보세요!