엑셀 INDIRECT 함수 한계까지: 시트·범위·드롭다운 자동화

엑셀 INDIRECT 함수 한계까지 쓰는 법: 시트·범위·드롭다운까지 “동적 참조” 완전정복

엑셀 INDIRECT 함수는 “문자(텍스트)로 적힌 주소를 진짜 셀 참조로 바꿔” 수식이 시트/범위/열 선택에 따라 자동으로 바뀌게 만들어 줍니다. 하지만 잘못 쓰면 #REF! 오류와 성능 저하(volatile)로 파일이 급격히 느려질 수 있습니다. 이 글은 실무에서 안 깨지고 빠르게 돌아가도록 INDIRECT를 끝까지 활용하는 패턴을 정리합니다.

빠른 해결(Quick Fix): 바로 복붙 8패턴

  1. 드롭다운으로 시트명 바꿔서 값 가져오기

    =INDIRECT("'"&$B$1&"'!B2")
  2. 범위를 SUM

    =SUM(INDIRECT("'"&$B$1&"'!B2:B100"))
  3. R1C1 스타일(상대 위치)

    =INDIRECT("R[0]C[-1]", FALSE)
  4. ADDRESS로 주소 만들고 INDIRECT로 실행

    =INDIRECT(ADDRESS($E$2,$F$2))
  5. 헤더 선택 → 해당 열 값 가져오기(개념형)

    =LET(hdr,$B$1, col,MATCH(hdr,Sales!$1:$1,0), row,MATCH($A4,Sales!$A:$A,0), INDIRECT("Sales!"&ADDRESS(row,col)))
  6. 종속 드롭다운(카테고리→상품)

    =INDIRECT(SUBSTITUTE($A$2," ","_"))
  7. 외부 통합문서(닫힌 파일) 참조는 원칙적으로 불가 (닫혀 있으면 #REF!)

  8. 느리면: 테이블 + INDEX/MATCH 중심 설계로 전환

엑셀 INDIRECT 함수가 막히는 진짜 이유

“텍스트 참조”의 정체

INDIRECT(ref_text, [a1])는 ref_text(문자열) 안의 주소를 실제 참조로 바꿉니다. 즉, “문자열 → 참조” 변환기입니다.

A1 vs R1C1

  • a1=TRUE(기본): A1 스타일 (예: B2)
  • a1=FALSE: R1C1 스타일 (예: R[1]C[-1])

volatile(재계산) 때문에 느려지는 구조

INDIRECT는 volatile 함수라 재계산 트리거가 커질 수 있습니다. 대용량 파일에서 INDIRECT가 많아지면 체감 성능이 급격히 떨어질 수 있습니다.

실무 패턴 1: 시트 이름을 셀에서 바꿔서 가져오기(월별 시트)

상황: Jan/Feb 같은 월별 시트에서, Summary 시트의 B1(드롭다운) 선택에 따라 값이 바뀌는 템플릿.

샘플 데이터

시트ItemQtyPrice
JanT001219000
JanT002125000
FebT001319000
FebT002225000

Qty 가져오기

=INDEX(INDIRECT("'"&$B$1&"'!A:C"), MATCH($A4, INDIRECT("'"&$B$1&"'!A:A"), 0), 2)

Price 가져오기

=INDEX(INDIRECT("'"&$B$1&"'!A:C"), MATCH($A4, INDIRECT("'"&$B$1&"'!A:A"), 0), 3)

Amount

=B4*C4

실무 패턴 2: ADDRESS+MATCH+INDIRECT로 “열/행을 선택”하는 보고서 만들기

상황: 헤더(예: 2025-01, 2025-02)를 드롭다운으로 선택하면 해당 열의 값을 자동 조회.

=LET(
  hdr, $B$1,
  col, MATCH(hdr, Sales!$1:$1, 0),
  row, MATCH($A4, Sales!$A:$A, 0),
  INDIRECT("Sales!"&ADDRESS(row, col))
)

드롭다운 클릭 경로: Report 시트 B1 선택 → 데이터 탭 → 데이터 유효성 검사 → 목록(List) → 원본: Sales!$C$1:$D$1

실무 패턴 3: 가변 범위(끝까지 자동) 만들기 — 합계/평균/차트까지

(A) INDIRECT 버전

=SUM(INDIRECT("B2:B"&COUNTA(B:B)))

(B) 추천 대체(비휘발): INDEX 버전

=SUM(B2:INDEX(B:B, COUNTA(B:B)))

실무 패턴 4: 종속 드롭다운(데이터 유효성 검사)에서 INDIRECT

핵심: 이름 관리자에서 Shoes, Tops 같은 “목록 범위 이름”을 만들고, B2 목록 원본에 INDIRECT를 씁니다.

카테고리(A2) 목록 원본: Shoes,Tops

상품(B2) 목록 원본:

=INDIRECT($A$2)

공백 대응(실무형)

=INDIRECT(SUBSTITUTE($A$2," ","_"))

대체 방법/최적화 체크리스트

  • INDIRECT가 많아지면 파일이 느려질 수 있습니다(volatile).
  • 가능하면 테이블(구조화 참조) + INDEX/MATCH로 “참조를 텍스트로 만들지 않는” 설계가 안전합니다.
  • 외부 통합문서(닫힌 파일)는 INDIRECT로 직접 참조가 제한됩니다(#REF!).

Troubleshooting

증상원인해결
#REF!시트명 오타/따옴표 누락/범위 없음먼저 문자열을 셀에 출력해 눈으로 검증
#REF! (외부 파일)원본 통합문서가 닫혀 있음원본 열기 또는 Power Query로 가져오기 전환
#VALUE!MATCH 실패MATCH를 0(정확일치)로, 키 값 공백/형식 점검
#NAME?이름 정의 불일치SUBSTITUTE로 정규화 후 이름 정의 일치
느림volatile 누적가변 범위는 INDEX로, 구조는 테이블로 전환

관련 글(내부 링크)

외부 참고(공식 문서)

Leave a Reply

Your email address will not be published. Required fields are marked *