- 최초 작성일: 2002-10-29
- 최종 수정일: 2026-09-29
- 조회수: 26 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: VLOOKUP과 INDIRECT로 시트명을 셀 값으로 동적 참조하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
An eagle does not catch flies.
독수리는 파리를 잡지 않는다.
진정 힘이 있는 강자는 약자를 괴롭히지 않는다는 의미겠지요.
VLOOKUP과 INDIRECT로 시트명을 셀 값으로 동적 참조하기
핵심 요약
VLOOKUP 함수의 참조 범위에 들어갈 시트명을 직접 입력하는 대신, 셀에 입력된 문자열을 INDIRECT 함수로 변환하면 참조 대상 시트를 동적으로 바꿀 수 있습니다.
- 핵심 함수: INDIRECT — 문자열을 실제 셀/시트 참조로 변환
- 조합 방법: VLOOKUP의 두 번째 인수(table_array) 자리에 INDIRECT("'"&셀&"'!범위") 형태로 삽입
- 주의점: 시트명은 작은따옴표로 감싸야 공백·숫자가 섞여도 정상 참조됨
질문: 시트명을 셀 값으로 받아서 수식에 반영할 수 있나요?
수식에 포함된 참조 대상(1. 참조되는 다른 파일의 이름, 2. 또는 다른 시트명)을 직접 입력하지 않고, 특정 셀에 입력해 두면 그 내용을 수식에 동적으로 반영하는 방법이 있는지요?
예를 들어 A4 셀에 =VLOOKUP(A3,'2002년도자료'!판매실적,2)라는 수식이 있을 때, 여기서 '2002년도자료' 부분을 다른 셀(A2)에 입력해 두고 그 내용을 참조해서 A4 수식을 완성하는 방법이 있는지요?
여러 번 반복된 질문인지 모르겠습니다. 혹 유사한 내용이 있으면 검색할 수 있는 단어라도 일러 주신다면 감사하겠습니다.
위 질문을 한 문장으로 요약하면 "VLOOKUP 함수의 인수로 (셀에 입력된) 문자열을 받을 수 있느냐?"는 것입니다.
직접 해보기 — 지점명을 선택하면 판매 금액이 바뀌는 예제
아래의 콤보 박스에서 지점명을 선택해 보세요. 선택한 지점에 해당하는 시트를 찾아가서 판매 금액을 가져오는 구조입니다.
| 셀 | 내용 |
|---|---|
| 지점명 선택 결과 | =INDEX(2002년도판매실적!A2:A30,Preface!B36) |
| 대상 시트 | 2002년도판매실적 |
| 결과 문구 | ="선택하신 "&B35&"지점의 판매 금액은 "&TEXT(VLOOKUP(B35,INDIRECT("'"&C37&"'!A1:B4"),2),"#,##0")&" 백만원 입니다!" |
잘 되지요? '문자열을 셀 주소 형식으로 바꾸어 주는 함수', 즉 INDIRECT 함수를 알고 있다면 쉽게 해결할 수 있는 문제입니다. 참조 함수인 VLOOKUP과 역시 참조 함수인 INDIRECT를 조합하면 됩니다.
=VLOOKUP(B31,INDIRECT("'"&C33&"'!A1:B4"),2)
이런 식으로 표현하면 됩니다. 그냥 이렇게만 하면 재미가 없으니, TEXT 함수와 & 연산자를 사용해 형태를 조금 바꿔 보면 다음과 같습니다.
="선택하신 "&B31&"지점의 판매 금액은 "&TEXT(VLOOKUP(B31,INDIRECT("'"&C33&"'!A1:B4"),2),"#,##0")&" 백만원 입니다!"
수식 사용의 결과값은 보기 좋은데, 수식 자체는 좀 복잡해 보이는군요.
정리 — 시트명을 동적으로 참조하는 방법
| 목적 | 수식 형태 |
|---|---|
| 셀 값을 시트 참조로 변환 | INDIRECT("'"&셀&"'!범위") |
| VLOOKUP과 조합해 동적 참조 | =VLOOKUP(찾을값,INDIRECT("'"&시트셀&"'!범위"),열번호) |
| 결과를 문장으로 표시 | TEXT 함수와 & 연산자로 문자열과 조합 |
자주 묻는 질문 (FAQ)
Q1. 시트명을 셀에 입력해 두고 수식에서 참조할 수 있나요?
네. INDIRECT 함수를 사용하면 셀에 입력된 문자열(시트명)을 실제 셀 참조로 변환할 수 있어, VLOOKUP 등의 인수 자리에 그대로 넣어 사용할 수 있습니다.
Q2. INDIRECT 함수가 왜 필요한가요?
VLOOKUP 같은 참조 함수는 텍스트 문자열을 그대로 시트명이나 범위로 해석하지 못합니다. INDIRECT 함수가 문자열을 실제 참조로 바꿔 주기 때문에, 시트명이 바뀌어도 수식을 고치지 않고 참조 대상만 바꿀 수 있습니다.
Q3. 시트명에 공백이나 숫자가 포함되어 있으면 어떻게 하나요?
시트명은 작은따옴표로 감싸 참조해야 합니다. INDIRECT("'"&셀&"'!범위") 형태로 작은따옴표를 문자열에 포함시키면, 시트명에 공백이나 숫자가 있어도 문제없이 참조할 수 있습니다.
마치며
시트명 하나 때문에 수식을 매번 뜯어고쳐야 한다면 번거롭겠죠. INDIRECT 함수로 시트명을 셀 값에 맡겨두면, 콤보 박스나 드롭다운 선택만으로 참조 대상을 자유자재로 바꿀 수 있습니다. VLOOKUP과 자주 씨름하신다면 오늘 방법을 꼭 응용해 보세요!