엑셀 OFFSET 함수 완벽 정리
동적 범위 참조와 실무 활용

OFFSET 함수는 기준이 되는 셀에서 지정한 행·열만큼 이동한 위치의 셀 또는 범위를 반환합니다. 고정된 범위가 아니라 조건에 따라 바뀌는 동적 범위를 만들 때 특히 유용합니다. SUM·COUNTA 등과 조합하면 데이터가 추가되어도 자동으로 범위가 확장되는 수식을 만들 수 있습니다.

기본 문법

=OFFSET(reference, rows, cols, [height], [width])
인수설명필수 여부
reference이동의 기준이 되는 셀 또는 범위필수
rows기준에서 이동할 행 수 (양수: 아래, 음수: 위)필수
cols기준에서 이동할 열 수 (양수: 오른쪽, 음수: 왼쪽)필수
height반환할 범위의 행 수 (생략 시 reference와 동일)선택
width반환할 범위의 열 수 (생략 시 reference와 동일)선택
OFFSET은 값을 반환하는 것이 아니라 참조(범위)를 반환합니다. 따라서 단독으로 사용하면 해당 위치의 값을 표시하고, SUM·AVERAGE 등 범위를 받는 함수와 함께 사용하면 범위로 처리됩니다.

기본 예제

예제 1: 특정 셀로 이동

수식: =OFFSET(A1, 2, 1)

의미: A1에서 2행 아래, 1열 오른쪽 → B3의 값을 반환

예제 2: 범위 합산 (동적 합계)

수식: =SUM(OFFSET(B2, 0, 0, 5, 1))

의미: B2를 기준으로 5행 × 1열 범위(B2:B6)의 합계

활용: height 값을 COUNTA 함수로 대체하면 데이터 개수에 따라 범위가 자동 확장됩니다.

실무 활용 — 동적 범위 자동 확장

데이터가 계속 추가되는 목록에서 항상 전체 데이터를 합산하려면 다음처럼 COUNTA와 조합합니다.

수식: =SUM(OFFSET(B2, 0, 0, COUNTA(B:B)-1, 1))

의미: B열의 데이터 개수(-1은 헤더 제외)만큼 B2부터 범위를 확장하여 합계 계산

효과: 새로운 데이터를 B열에 추가할 때마다 수식을 수정하지 않아도 자동으로 합계가 갱신됩니다.

실무 활용 — MATCH와 조합

MATCH로 특정 행·열의 위치를 찾아 OFFSET에 전달하면 유연한 조회가 가능합니다.

수식: =OFFSET(A1, MATCH("홍길동", A:A, 0)-1, 2)

의미: A열에서 "홍길동"을 찾아 그 행의 3번째 열(C열) 값을 반환

OFFSET은 휘발성 함수입니다. 워크시트 내 어떤 셀이 변경되어도 재계산되므로, 대용량 데이터에서 OFFSET을 많이 사용하면 파일이 느려질 수 있습니다. 성능이 중요한 경우 INDEX 함수로 대체하는 것을 고려하세요.

OFFSET vs INDEX 비교

항목OFFSETINDEX
반환 방식기준 셀에서 상대적 이동범위에서 절대적 위치 지정
동적 범위가능 (height, width 인수 활용)가능 (COUNTA 등과 조합)
성능휘발성 함수 — 느릴 수 있음비휘발성 — 빠름
주요 용도범위가 위치 기준으로 이동하는 경우행·열 번호로 값을 찾는 경우

자주 묻는 질문

Q. OFFSET 결과가 #REF! 오류로 나옵니다.

이동 결과가 워크시트 범위를 벗어날 때 발생합니다. rows나 cols 값이 너무 크거나 음수로 이동해 시트 밖으로 벗어나지 않는지 확인하세요.

Q. OFFSET으로 빈 범위가 반환되면 어떻게 되나요?

height 또는 width를 0으로 지정하면 오류가 발생합니다. COUNTA로 높이를 계산할 때 결과가 0이 되지 않도록 처리가 필요합니다.

참고: Microsoft Excel 공식 함수 설명 (OFFSET 함수)