엑셀 #SPILL! 오류 해결: 셀 방해·병합 셀·표 원인 찾기

엑셀에서 FILTER, UNIQUE, SORT, SEQUENCE 같은 동적 배열 수식을 입력하면 다음 오류가 표시될 수 있습니다.

#SPILL!
수식 결과를 주변 셀에 확장할 수 없는 상태

동적 배열 수식은 하나의 셀에 입력하지만 결과는 아래쪽이나 옆쪽의 여러 셀에 자동으로 펼쳐집니다. 이 동작을 분산 또는 유출이라고 합니다.

결과가 들어갈 범위에 값·수식·공백 문자·병합 셀이 있거나 수식이 Excel 표 안에 있으면 결과를 펼칠 수 없습니다. 배열의 크기가 계산할 때마다 바뀌거나 워크시트 가장자리를 넘어갈 때도 같은 오류가 나타날 수 있습니다.

따라서 수식을 바로 다시 작성하기 전에 오류 셀이 표시하는 예상 출력 범위와 세부 원인을 먼저 확인해야 합니다.

이 글은 Microsoft의 #SPILL 오류, 동적 배열, FILTER 함수, 분산 범위 연산자와 암시적 교집합 연산자 공식 문서를 기준으로 작성했습니다. 예제의 범위와 표 이름은 실제 통합 문서 구조에 맞게 변경해야 합니다.

엑셀 동적 배열 수식의 결과 범위를 다른 셀과 병합 셀이 막아 발생하는 #SPILL 오류를 설명하는 대표 개념 이미지
동적 배열 수식은 여러 결과를 주변 셀로 확장합니다. 출력 범위에 값·수식·병합 셀 또는 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! 오류 최종 확인 순서

1. 오류 셀과 경고 아이콘 선택
오류 세부 원인과 예상 출력 범위를 확인합니다.
2. 방해 셀 선택
점선 범위의 값, 수식, 공백 문자와 다른 배열 결과를 확인합니다.
3. 병합 셀 확인
출력 범위와 겹치는 병합을 해제하거나 수식 위치를 옮깁니다.
4. Excel 표 내부인지 확인
동적 배열 수식을 표 밖의 일반 셀로 이동합니다.
5. 전체 열·전체 행 참조 확인
실제 데이터가 있는 범위나 표의 구조화된 참조로 줄입니다.
6. 배열 크기를 계산하는 함수 확인
계산할 때마다 반환 행·열 수가 달라지는 휘발성 구조를 수정합니다.
7. @ 기호의 목적 확인
여러 결과가 필요하다면 @으로 단일 결과를 강제하지 않습니다.
8. 다른 오류와 구분
FILTER 결과 없음은 #CALC!, 닫힌 외부 통합 문서 참조는 #REF!처럼 다른 오류일 수 있습니다.

내용 확인에 사용한 Microsoft 공식 자료

공식 문서 확인일: 2026년 7월 29일

Post a Comment

다음 이전