- 최초 작성일: 2008-02-26
- 최종 수정일: 2026-09-24
- 조회수: 26 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 여러 시트 참조하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
질문 하나
안녕하세요~ 엑셀 완전초보 랍니다. ^^ 우연히 본 사이트를 알게되었고 도움을 얻고자 질문을 올립니다.
첨부된 파일과 같이 참조하려는 시트가 10개가 넘습니다. 마지막 시트의 한 셀에서 아래와 같이 VLOOKUP 과 IF 함수를 사용하여 서로다른 시트의 DATA 값을 참조하려 하는데, 알고보니 IF 함수는 중첩(?)으로 7개 이상 사용이 불가하다고 하네요...ㅠㅠ
10개가 넘는 시트의 DATA 값을 VLOOKUP 함수를 사용해서 불러들일 수 없나요? 고수님들의 답변 부탁드립니다. ^^ 즐거운 하루 보내세요...
본 사이트를 잠시 들러보며 엑셀의 기능이 이렇게나 많은줄 몰랐습니다. ㅋㅋ
이 예제 파일에는 A, B, C … J까지 10개의 시트가 있고, 각 시트에는 그 시트 이름을 코드 앞자리로 쓰는 제품의 가격 정보(A~F열)가 들어 있습니다. 이 정보를 마지막 시트의 표에 모아오려는 것이 질문의 요지입니다.
여러 시트 참조하기
핵심 요약: INDIRECT로 시트 이름을 문자열처럼 조립
IF로 시트를 하나하나 분기하는 대신, INDIRECT(LEFT(셀,1)&"!범위") 형태로 시트 이름 문자열을 조립하면 시트가 몇 개든 짧은 수식 하나로 참조할 수 있습니다.
- 문제: IF로 시트를 분기하는 수식은 절대 참조라 복사 불가, IF 중첩 7개 제한
- 해결: =VLOOKUP($C27,INDIRECT(LEFT(C27,1)&"!$A$1:$B$6"),2,FALSE)
- 장점: 시트 수 무관, 시트 추가·삭제 시 자동 반영
개요
| NO | 제품코드 | 가격 | 수식 변경 |
|---|---|---|---|
| 1 | A001 | 1,000 | #REF! |
| 2 | B003 | 1,500 | #REF! |
| 3 | C002 | 1,050 | #REF! |
| 4 | D005 | 2,000 | #REF! |
| 5 | E005 | … | #REF! |
| 6 | F005 | … | #REF! |
| 7 | G002 | … | #REF! |
| 8 | H004 | … | #REF! |
| 9 | I002 | … | #REF! |
| 10 | J003 | … | #REF! |
| 총계 | 5,550 | #REF! | |
질문주신 분이 D27 셀에 입력한 수식은 다음과 같습니다. (원래 파일과 셀 주소가 달라져서 수식을 일부 수정하였습니다)
=IF(LEFT(C27,1)="A",VLOOKUP($C27,A!$A$1:$B$6,2,FALSE),
IF(LEFT(C27,1)="B",VLOOKUP($C27,B!$A$1:$B$6,2,FALSE),
IF(LEFT(C27,1)="C",VLOOKUP($C27,C!$A$1:$B$6,2,FALSE),
IF(LEFT(C27,1)="D",VLOOKUP($C27,D!$A$1:$B$6,2,FALSE),
... '이런 식으로 시트 개수만큼 IF를 계속 중첩
참고
위 수식은 예제 파일에 텍스트 상자(그림 개체)로 들어 있어 셀 텍스트로는 추출되지 않는 부분이라, 본문 설명(절대 참조라 복사가 안 되고, IF 중첩 7개 제한에 걸린다는 내용)에 맞춰 그 구조를 재현한 것입니다. 실제 수식의 세부 셀 주소는 원본과 다를 수 있습니다.
이렇게 하면, 셀 주소가 절대 참조 형식으로 되어 있기에 수식을 복사해서 사용할 수가 없습니다. 또한 시트의 숫자가 변경되면 수식을 일일이 수정해 주어야 합니다. 물론 이미 알고 계신것처럼, 시트의 개수가 일정 범위를 넘어서면 If 함수의 한계로 인해 계산 자체가 불가능해 집니다.
이렇게 복잡한 수식 대신, Indirect 함수를 사용하면 간단하게 해결할 수 있습니다. F27 셀에 사용된 수식은 다음과 같습니다.
=VLOOKUP($C27,INDIRECT(LEFT(C27,1)&"!$A$1:$B$6"),2,FALSE)
Indirect는 문자열(텍스트)로 지정한 참조를 반환해 주는 함수이며, 다음과 같은 형식으로 사용합니다.
사용 형식
INDIRECT(텍스트)
수식이 훨씬 짧아졌을 뿐 아니라 시트 수가 몇 개이든 상관없으며, 시트를 추가하거나 삭제하더라도 자동으로 반영되므로 융통성도 뛰어납니다. 많이 응용해 보세요.
서울에는 어제 오늘 사이에 눈이 많이 왔습니다. 눈길 걸어다닐 때 조심하세요. 저처럼 넘어지지 말고… ^^;;
다음 시간에…
정리 — IF 중첩 수식 vs INDIRECT 수식
| 방식 | 특징 |
|---|---|
| IF 중첩 + VLOOKUP | 시트마다 IF 분기 필요, 절대 참조라 복사 불가, IF 중첩 7개 제한으로 시트 많으면 불가능 |
| INDIRECT + VLOOKUP | =VLOOKUP($C27,INDIRECT(LEFT(C27,1)&"!$A$1:$B$6"),2,FALSE) 한 줄로 해결, 시트 수 무관 |
자주 묻는 질문 (FAQ)
Q1. IF 함수로 여러 시트를 참조하는 수식은 왜 한계에 부딪히나요?
시트마다 IF로 분기해서 VLOOKUP을 걸어주는 방식은 시트 하나가 늘 때마다 IF를 하나 더 중첩해야 합니다. 그런데 옛 버전 엑셀은 IF 중첩을 7개까지만 허용했기 때문에, 참조할 시트가 일정 개수를 넘으면 수식 자체를 완성할 수 없게 됩니다.
Q2. INDIRECT 함수는 어떤 역할을 하나요?
INDIRECT는 문자열로 표현된 셀·범위 주소를 실제 참조로 바꿔주는 함수입니다. LEFT(C27,1)&"!$A$1:$B$6"처럼 시트 이름을 문자열로 조립한 뒤 INDIRECT에 넣으면, "A!$A$1:$B$6"라는 문자열이 실제로 A 시트의 A1:B6 범위를 가리키는 참조로 해석됩니다.
Q3. INDIRECT를 쓴 수식은 IF로 만든 수식과 비교해 어떤 장점이 있나요?
수식 길이가 훨씬 짧아지고, 참조할 시트 수가 몇 개든 상관없이 똑같은 한 줄의 수식으로 해결됩니다. 또한 시트를 나중에 추가하거나 삭제해도 수식을 다시 고칠 필요 없이 자동으로 반영됩니다.
마치며
VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 상단 메뉴에서 [Excel 강의] - [Excel 입문]을 먼저 보시면 이해하기 쉽습니다.