엑셀에서 FILTER, UNIQUE, SORT,
SEQUENCE 같은 동적 배열 수식을 입력하면 다음 오류가 표시될 수
있습니다.
수식 결과를 주변 셀에 확장할 수 없는 상태
동적 배열 수식은 하나의 셀에 입력하지만 결과는 아래쪽이나 옆쪽의 여러 셀에 자동으로 펼쳐집니다. 이 동작을 분산 또는 유출이라고 합니다.
결과가 들어갈 범위에 값·수식·공백 문자·병합 셀이 있거나 수식이 Excel 표 안에 있으면 결과를 펼칠 수 없습니다. 배열의 크기가 계산할 때마다 바뀌거나 워크시트 가장자리를 넘어갈 때도 같은 오류가 나타날 수 있습니다.
따라서 수식을 바로 다시 작성하기 전에 오류 셀이 표시하는 예상 출력 범위와 세부 원인을 먼저 확인해야 합니다.
이 글은 Microsoft의 #SPILL 오류, 동적 배열, FILTER 함수, 분산 범위 연산자와 암시적 교집합 연산자 공식 문서를 기준으로 작성했습니다. 예제의 범위와 표 이름은 실제 통합 문서 구조에 맞게 변경해야 합니다.
![]() |
| 동적 배열 수식은 여러 결과를 주변 셀로 확장합니다. 출력 범위에 값·수식·병합 셀 또는 Excel 표 구조가 있으면 #SPILL! 오류가 발생할 수 있습니다. 위 이미지는 오류 구조를 설명하기 위한 대표 개념 이미지입니다. |
#SPILL! 셀을 선택해 예상 출력 범위를 확인합니다
오류 셀을 선택하면 Excel이 결과를 배치하려던 영역이 점선 테두리로 표시됩니다.
오류 셀 옆의 경고 아이콘을 선택하면 현재 원인에 따라 다음과 같은 설명이 표시될 수 있습니다.
- 분산 범위가 비어 있지 않음
- 병합된 셀로 분산됨
- 표 수식
- 워크시트 가장자리를 넘어 확장됨
- 확정되지 않은 크기
- 메모리 부족
방해 셀 선택 명령이 표시된다면 이를 선택해 결과 확장을 막는 셀로 바로 이동할 수 있습니다.
#SPILL! 셀은 동적 배열 수식이 입력된 시작 셀입니다.
오류 셀을 삭제하면 원래 수식도 함께 삭제됩니다.
먼저 점선 범위 안의 방해 요소를 찾고 이동하거나 제거해야 합니다.
가장 흔한 원인: 분산 범위가 비어 있지 않음
다음 수식은 조건에 맞는 행 전체를 여러 셀로 반환합니다.
=FILTER(A2:D100,D2:D100="완료","결과 없음")
조건에 맞는 행이 여러 개라면 수식이 입력된 셀에서 시작해 아래쪽과 오른쪽으로 결과가 펼쳐집니다.
예상 출력 범위 안에 다음 항목이 하나라도 있으면 확장이 막힐 수 있습니다.
- 직접 입력한 숫자나 문자
- 다른 수식
- 겉으로 빈칸처럼 보이는
=""수식 - 공백 문자 또는 작은따옴표가 입력된 셀
- 다른 동적 배열의 결과 범위
- 피벗 테이블이나 다른 표의 일부
방해 셀의 내용이 필요하다면 다른 위치로 이동합니다. 필요하지 않은 내용이라면 셀을 선택한 뒤 Delete 키로 내용을 지웁니다.
단순히 글자색을 흰색으로 바꾸거나 셀 표시 형식을 변경해도 셀 내용은 남아 있으므로 방해 요소가 제거되지 않습니다.
겉으로 빈 셀도 실제 내용이 있는지 확인합니다
점선 영역이 모두 빈 것처럼 보이는데도 오류가 지속되면 방해 셀을 선택해 수식 입력줄을 확인합니다.
다음 수식은 화면에서는 빈칸처럼 보일 수 있습니다.
=""
하지만 수식이 들어 있는 셀이므로 동적 배열의 출력 셀로 사용할 수 없습니다.
방해 셀을 다른 위치로 옮기거나 필요하지 않다면 수식 자체를 삭제합니다.
셀 내용만 제거하려면 홈 메뉴의 지우기 명령에서 내용 지우기를 사용하거나 Delete 키를 사용할 수 있습니다.
병합 셀이 출력 범위와 겹치는지 확인합니다
동적 배열 결과는 병합된 셀 안으로 확장할 수 없습니다.
병합 셀이 점선 출력 범위와 한 칸이라도 겹치면
#SPILL!이 발생할 수 있습니다.
해결 방법은 두 가지입니다.
병합 영역을 선택합니다.
홈 → 병합하고 가운데 맞춤 메뉴를 엽니다.
셀 병합 해제를 선택합니다.
병합 영역과 겹치지 않고 결과가 확장될 수 있는 빈 영역으로 동적 배열 수식을 옮깁니다.
제목이나 구분선을 표시하려고 병합 셀을 사용했다면 동적 배열 결과 영역과 충분히 떨어뜨려 배치합니다.
동적 배열 수식을 Excel 표 안에 입력하지 않습니다
분산된 배열 수식은 Excel 표 내부에서 지원되지 않습니다.
표의 계산 열에 다음과 같은 동적 배열 수식을 입력하면 결과가 여러 셀로 확장될 수 없으므로 오류가 발생할 수 있습니다.
=UNIQUE(tblOrders[고객명])
원본 데이터는 Excel 표로 유지하되 동적 배열 수식은 표 바깥의 일반 셀에 입력할 수 있습니다.
=SORT(UNIQUE(tblOrders[고객명]))
표의 구조화된 참조는 행이 추가되거나 삭제될 때 원본 범위를 자동으로 조정할 수 있고, 결과는 표 밖의 빈 영역으로 확장됩니다.
동적 배열 결과를 반드시 현재 표 위치에 배치해야 한다면 표를 선택한 뒤 테이블 디자인 → 범위로 변환을 검토할 수 있습니다.
범위로 변환하면 표의 자동 확장과 구조화된 참조 같은 기능이 달라질 수 있으므로, 단순히 오류를 없애기 위해 원본 표를 무조건 변환하지 않습니다.
전체 열 참조가 워크시트 끝을 넘어가는지 확인합니다
동적 배열을 지원하는 Excel에서는 전체 열을 전달하면 해당 열 전체가 배열로 계산될 수 있습니다.
예를 들어 F2에 다음 수식을 입력했다고 가정합니다.
=SORT(D:D)
D열 전체에 해당하는 결과가 F2부터 아래로 확장되면 마지막 결과가 워크시트의 최대 행을 넘어가게 됩니다.
실제 데이터가 있는 범위만 지정합니다.
=SORT(D2:D1000)
원본이 Excel 표라면 구조화된 참조를 사용할 수 있습니다.
=SORT(tblOrders[금액])
실제 데이터가 계속 추가되는 구조에서는 임의의 고정 마지막 행보다 Excel 표의 구조화된 참조를 사용하는 방식을 검토할 수 있습니다.
VLOOKUP의 조회값에 전체 열을 넣었는지 확인합니다
다음 수식은 조회값으로 A열 전체를 전달합니다.
=VLOOKUP(A:A,A:C,2,FALSE)
동적 배열 Excel에서는 A열 전체에 대한 여러 결과를 반환하려고 할 수 있습니다.
필요한 조회값 범위만 반환하려는 경우:
=VLOOKUP(A2:A100,A:C,2,FALSE)
현재 행의 값 하나만 조회한 뒤 아래로 복사하려는 경우:
=VLOOKUP(A2,A:C,2,FALSE)
여러 결과가 필요한지 한 행의 결과만 필요한지 먼저 결정한 뒤 조회값 범위를 지정합니다.
출력할 행 수가 계산할 때마다 바뀌는지 확인합니다
Excel이 동적 배열의 최종 크기를 결정하지 못하면
확정되지 않은 크기 원인의 #SPILL!이 나타날 수 있습니다.
Microsoft 공식 문서에서 제시하는 대표적인 예는 다음 수식입니다.
=SEQUENCE(RANDBETWEEN(1,1000))
RANDBETWEEN 결과가 계산 과정에서 바뀌면 SEQUENCE가
반환해야 할 행 수도 계속 바뀔 수 있습니다.
고정된 개수 또는 사용자가 입력한 개수를 사용하도록 수식을 변경합니다.
H2에 필요한 행 수를 직접 입력한 경우:
=SEQUENCE(H2)
H2에는 1 이상의 정수를 입력하고, 배열 크기가 계산할 때마다 무작위로 바뀌어야 하는 구조가 실제로 필요한지 확인합니다.
메모리 부족이면 원본 배열 크기를 줄입니다
매우 넓거나 긴 범위, 여러 개의 전체 열 참조 또는 큰 중간 배열을 한 수식에서
반복 계산하면 메모리가 부족하다는 원인의
#SPILL!이 나타날 수 있습니다.
다음 항목을 확인합니다.
- 필요하지 않은 전체 행·전체 열 참조가 있는지
- 같은 큰 배열을 수식 안에서 여러 번 계산하는지
- 실제 필요한 열보다 넓은 범위를 반환하는지
- 빈 행을 포함한 지나치게 긴 원본 범위를 사용하는지
- 동일한 동적 배열을 여러 위치에서 반복 생성하는지
먼저 실제 데이터 범위로 참조를 줄이고, 중복 계산이 많다면 원본 동적 배열을 한 번 만든 뒤 다른 수식에서 결과 범위를 참조합니다.
분산 결과 셀은 각각 수정할 수 없습니다
동적 배열 결과 영역에서 수식은 왼쪽 위 시작 셀에만 저장됩니다.
결과 범위의 다른 셀을 선택하면 수식 입력줄에 수식이 흐리게 표시될 수 있지만 해당 셀만 별도로 수정할 수는 없습니다.
수식을 수정하려면 점선 또는 강조 테두리의 왼쪽 위 셀을 선택합니다.
동적 배열 범위의 왼쪽 위 시작 셀에서 수식을 수정합니다.
시작 셀의 수식을 삭제하면 분산 결과 전체가 사라집니다.
수식 결과를 값으로 복사하지 않는 한 분산 결과의 개별 셀만 수정할 수 없습니다.
# 연산자는 정상적으로 분산된 전체 범위를 참조합니다
동적 배열 수식이 A2에서 시작해 A2:A20으로 정상적으로 펼쳐졌다면 다른
수식에서 A2#으로 전체 결과 범위를 참조할 수 있습니다.
=SUM(A2#)
원본 동적 배열이 늘어나거나 줄어들면 A2#이 참조하는 범위도 함께
바뀝니다.
하지만 # 기호는 이미 발생한 #SPILL!을 제거하는
기호가 아닙니다. 원본 수식이 정상적으로 펼쳐진 뒤 전체 결과 범위를 참조할 때
사용합니다.
@ 기호를 무조건 붙이지 않습니다
@은 여러 값이나 범위를 단일 값으로 줄이는 암시적 교집합을
나타낼 수 있습니다.
다음 수식은 A열 전체가 아니라 현재 수식 행과 대응하는 값 하나를 조회하도록 제한할 수 있습니다.
=VLOOKUP(@A:A,A:C,2,FALSE)
이 방식은 여러 결과를 반환하려던 수식을 한 행의 결과로 바꿀 수 있습니다.
따라서 원래 목적이 여러 행의 결과를 자동으로 펼치는 것이라면
@을 붙이는 것은 오류 해결이 아니라 수식의 의미를 바꾸는
작업입니다.
현재 행의 값 하나만 필요합니다.
수식을 각 행에 복사해 단일 결과를 계산하려는 구조입니다.
여러 결과를 펼칠 필요가 없다는 점이 명확합니다.
FILTER 결과가 없으면 #CALC!과 구분합니다
FILTER의 조건과 일치하는 행이 없고 세 번째 인수
if_empty를 생략하면 #CALC!이 발생할 수 있습니다.
빈 결과 처리 인수가 없는 수식:
=FILTER(A2:D100,D2:D100="완료")
빈 결과일 때 표시할 값을 지정한 수식:
=FILTER(A2:D100,D2:D100="완료","결과 없음")
결과가 존재하지만 펼칠 공간이 막힌 경우는 #SPILL!이고, 반환할
결과 자체가 없는 빈 배열 문제는 #CALC!일 수 있습니다.
오류를 IFERROR로 숨기기 전에 원인을 확인합니다
다음 수식은 모든 오류를 동일한 문구로 바꿉니다.
=IFERROR(
FILTER(A2:D100,D2:D100="완료","결과 없음"),
"수식을 확인하세요"
)
이 상태에서는 방해 셀, 병합 셀, 표 수식, 워크시트 가장자리와 다른 계산 오류를 구분하기 어렵습니다.
오류를 진단하는 동안에는 IFERROR를 제거해 실제 오류 문구와 경고
메뉴를 확인합니다.
수식 구조가 정상임을 확인한 뒤 사용자용 화면에서만 필요한 안내 문구를 적용합니다.
증상별 첫 번째 확인 위치
| 증상 | 첫 확인 위치 | 수정 방향 |
|---|---|---|
| 분산 범위가 비어 있지 않음 | 점선 출력 범위와 방해 셀 | 값·수식·공백을 이동하거나 삭제 |
| 병합된 셀로 분산됨 | 예상 출력 범위의 병합 영역 | 병합 해제 또는 수식 이동 |
| 표 수식 | 수식 셀이 Excel 표 안인지 | 표 밖에 수식 배치 |
| 워크시트 가장자리를 넘어감 | 전체 열·전체 행 참조와 수식 위치 | 실제 데이터 범위로 축소 |
| 확정되지 않은 크기 | RANDBETWEEN·RANDARRAY와 배열 크기 계산 | 안정적인 고정값 또는 입력 셀 사용 |
| 메모리 부족 | 원본 배열 크기와 중복 계산 | 범위·열·중간 배열 축소 |
| FILTER 결과가 없음 | 오류가 #CALC!인지 확인 | FILTER의 세 번째 인수 지정 |
#SPILL! 오류 최종 확인 순서
오류 세부 원인과 예상 출력 범위를 확인합니다.
점선 범위의 값, 수식, 공백 문자와 다른 배열 결과를 확인합니다.
출력 범위와 겹치는 병합을 해제하거나 수식 위치를 옮깁니다.
동적 배열 수식을 표 밖의 일반 셀로 이동합니다.
실제 데이터가 있는 범위나 표의 구조화된 참조로 줄입니다.
계산할 때마다 반환 행·열 수가 달라지는 휘발성 구조를 수정합니다.
여러 결과가 필요하다면 @으로 단일 결과를 강제하지 않습니다.
FILTER 결과 없음은 #CALC!, 닫힌 외부 통합 문서 참조는 #REF!처럼 다른 오류일 수 있습니다.
내용 확인에 사용한 Microsoft 공식 자료
공식 문서 확인일: 2026년 7월 29일

댓글 쓰기