목차▾
엑셀 OFFSET 함수란?
엑셀 OFFSET 함수는 기준 셀에서 행·열로 이동한 후 지정한 크기의 범위를 반환하는 검색·참조 함수입니다. 데이터 추가 시 자동 확장되는 동적 범위, 최근 N개 이동 평균, 동적 차트 데이터 범위 등에 사용. 단, 휘발성(volatile)이라 시트 어디든 변경 되면 매번 재계산 → 성능 저하 우려.
구문은 =OFFSET(기준셀, 행이동, 열이동, [높이], [너비]) 5인수. 가능한 한 INDEX 사용 권장 — 결과 동일하면서 비휘발성. OFFSET은 동적 크기 필요한 차트 범위 정도에만.
동작 예시
=OFFSET(A1, 2, 3) → A1에서 아래 2, 오른쪽 3 = D3
=OFFSET(A1, 0, 0, 5, 3) → A1:C5 범위 (5행 3열)
=OFFSET(A1, 10, 0, 1, 1) → A11
=SUM(OFFSET(A1, 1, 0, 5, 1)) → A2:A6 합계
표:
A B C
1 10 20 30
2 40 50 60
3 70 80 90
=OFFSET(A1, 1, 1) → B2 = 50
=OFFSET(A1, 0, 0, 3, 3) → A1:C3 전체
=SUM(OFFSET(A1, 0, 2, 3, 1)) → C1:C3 합계 = 180
OFFSET vs INDEX vs INDIRECT
| 함수 | 동작 | 휘발성 | 권장 |
|---|---|---|---|
| INDEX | 좌표 (행, 열) | ❌ | 권장 (비휘발성) |
| OFFSET | 좌표 + 크기 | ✅ (휘발성) | 동적 크기 필요 시 |
| INDIRECT | 텍스트 주소 | ✅ (휘발성) | 시트 이름 동적 |
→ 가능하면 INDEX, OFFSET은 동적 크기·차트 범위에만.
핵심 활용 (동적 범위·이동평균·차트)
자동 확장 범위 (데이터 추가)
=SUM(OFFSET(A1, 0, 0, COUNTA(A:A), 1))
→ A열 데이터 끝까지 자동 합계
대체 (INDEX 권장):
=SUM(A1:INDEX(A:A, COUNTA(A:A)))
→ 비휘발성 + 같은 결과
이동 평균 (최근 N개)
=AVERAGE(OFFSET(A1, COUNTA(A:A)-N, 0, N, 1))
→ A열 마지막 N개 평균
동적 차트 범위 (이름 정의)
이름 정의: 매출 = OFFSET(Sheet1!$A$2, 0, 0, COUNTA(Sheet1!$A:$A)-1, 1)
차트 데이터: =Sheet1!매출
→ 데이터 추가 시 차트 자동 확장
실전 사용 시나리오 8가지
- 단순 좌표 이동 —
=OFFSET(A1, 5, 2)→ C6 - N×M 범위 반환 —
=OFFSET(A1, 0, 0, 3, 2)→ A1:B3 - 자동 확장 합계 —
=SUM(OFFSET(A1, 0, 0, COUNTA(A:A), 1)) - 이동 평균 (최근 7일) —
=AVERAGE(OFFSET($A$1, COUNTA($A:$A)-7, 0, 7, 1)) - N번째 셀 —
=OFFSET(A1, 9, 0)→ A10 (INDEX가 더 깔끔) - 음수 이동 (위·왼쪽) —
=OFFSET(D5, -2, -1)→ C3 - 동적 차트 (이름 정의) — 이름 정의 매출 = OFFSET(...) → 차트 데이터에 사용
- INDIRECT 결합 (시트 동적 + 범위) —
=SUM(OFFSET(INDIRECT(A1&"!A1"), 0, 0, 10, 1))
INDEX로 OFFSET 대체 (권장)
OFFSET이 휘발성이라 큰 시트에서 성능 저하 → INDEX 패턴으로 대체:
| OFFSET | INDEX 대체 |
|---|---|
| =OFFSET(A1, 5, 2) | =INDEX(A:C, 6, 3) |
| =OFFSET(A1, 0, 0, 10, 1) | =A1:INDEX(A:A, 10) |
| =SUM(OFFSET(A1, 0, 0, N, 1)) | =SUM(A1:INDEX(A:A, N)) |
→ 결과 동일, 비휘발성이라 성능 ↑.
함정 6가지 + 자주 묻는 질문
자주 발생하는 함정 6가지
- 휘발성 → 성능 저하 — 시트 어디든 변경 시 매번 재계산. OFFSET 100개 = 매번 100번. INDEX 권장
- 범위 초과 → #REF! —
OFFSET(A1, -5, 0)→ 시트 위로 나감 →#REF!(참조 오류) - height·width 생략 시 reference 크기 —
OFFSET(A1:C3, 0, 0)→ A1:C3. 단일 셀은 명시 - 가독성 떨어짐 — 단순 위치는 직접 참조 또는 INDEX가 명확
- COUNTA + OFFSET 빈 셀 문제 — 중간 빈 셀 있으면 COUNTA 부정확.
LOOKUP(2, 1/(A:A<>""), ROW(A:A))권장 - 차트 범위 이름 정의 필수 — 차트 데이터에 직접 OFFSET 못 씀. 이름 정의 통해서만
자주 묻는 질문
Q. OFFSET 함수 사용법은?
=OFFSET(기준셀, 행이동, 열이동, [높이], [너비]) 형식. 기준 셀에서 행·열 이동 + 지정 크기 범위 반환. 예: =OFFSET(A1, 2, 3) → D3, =OFFSET(A1, 0, 0, 5, 1) → A1:A5.
Q. OFFSET vs INDEX 어떤 게 좋나요?
INDEX 권장. OFFSET은 휘발성(volatile)이라 매번 재계산 → 성능 저하. INDEX는 비휘발성. 결과 동일하면 INDEX 우선.
Q. 동적 범위 만드는 법은?
=OFFSET(A1, 0, 0, COUNTA(A:A), 1) 또는 비휘발성 =A1:INDEX(A:A, COUNTA(A:A)). 데이터 추가 시 자동 확장. 차트 데이터 범위에 이름 정의로 등록.
Q. 휘발성이 뭔가요?
시트 어디든 변경되면 매번 재계산되는 함수. OFFSET, INDIRECT, NOW, TODAY, RAND 등. 큰 시트에서 OFFSET 많이 쓰면 매번 100번씩 계산 → 성능 ↓.
Q. 이동 평균은?
=AVERAGE(OFFSET(A1, COUNTA(A:A)-N, 0, N, 1)) → 최근 N개 평균. 또는 비휘발성: =AVERAGE(INDEX(A:A, COUNTA(A:A)-N+1):INDEX(A:A, COUNTA(A:A))).
Q. 음수 이동 가능한가요?
네. rows·cols 음수면 위·왼쪽 이동. =OFFSET(D5, -2, -1) = C3. 단 시트 범위 벗어나면 #REF!(참조 오류).
Q. 동적 차트 범위는?
이름 정의 + OFFSET 표준 패턴. 1) 이름 정의: 매출 = OFFSET(...) 2) 차트 데이터: =Sheet1!매출 3) 데이터 추가 시 차트 자동 확장.
Q. 구글 스프레드시트에서도 동일하게 작동하나요?
네. OFFSET은 표준 검색·참조 함수로 Google Sheets, LibreOffice Calc, Apple Numbers, 한컴 한셀, WPS에서 동일하게 작동합니다.
본 페이지는 Microsoft Support 공식 OFFSET·INDEX·INDIRECT 문서를 기준으로 작성되었습니다. 정확한 동작은 Excel 버전·환경에 따라 달라질 수 있으니 중요한 작업 전에는 실제 환경에서 확인하세요.