#SPILL!은 수식이 여러 값(목록이나 표)을 반환하는데 엑셀이 그 값을 쓸 자리가 없다는 뜻입니다. 결과에 필요한 범위의 셀 중 적어도 하나가 비어 있지 않습니다. 아래의 =UNIQUE(A2:A6)은 C2부터 C4까지 세 셀이 필요한데 C4에 x가 있습니다. C4를 지우면 목록이 나타납니다.
| A | B | C | |
|---|---|---|---|
| 1 | Product | Unique list | |
| 2 | Apple | #SPILL! | |
| 3 | Pear | ||
| 4 | Apple | x | |
| 5 | Plum | ||
| 6 | Pear |
#SPILL! 결과를 표시할 빈 셀이 부족합니다. 막고 있는 셀을 비우세요.C2를 클릭하면 격자 아래의 메모가 무엇이 문제인지 알려 줍니다. 그다음 C4를 클릭하고 Delete를 누르세요. 세 제품이 C2:C4에 분산되고, 테두리가 분산 범위를 표시합니다. C3에 무언가 입력하면 오류가 다시 나옵니다. 엑셀도 똑같이 동작합니다. FILTER, UNIQUE, SORT, SEQUENCE, TEXTSPLIT처럼 배열을 반환하는 함수는 분산 범위 전체가 비어 있을 때만 동작합니다. 이 함수들은 Excel 2021 이상이 필요하며(TEXTSPLIT은 Microsoft 365나 Excel 2024), 이전 버전에서는 #NAME?이 표시되므로 #SPILL!은 나오지 않습니다(함수 자체는 UNIQUE 참고).
#SPILL! 오류 해결 방법
#SPILL!이 있는 셀을 클릭합니다. 엑셀에서는 점선 테두리가 결과가 채우려는 범위를 보여 줍니다.- 셀 옆의 경고 아이콘을 클릭하고 방해하는 셀 선택을 고릅니다. 엑셀이 가로막는 셀을 모두 선택합니다.
- Delete를 누르거나, 그 셀들을 다른 곳으로 옮깁니다(잘라 내서 붙여 넣기).
가로막는 셀에 필요한 데이터가 있다면 대신 수식을 옮기세요. 아래와 옆이 모두 비어 있는 열이나 행에 두면 됩니다.
셀이 비어 보이는데 #SPILL!이 나올 때
가장 헷갈리는 경우입니다. 분산 범위는 비어 보이는데 엑셀은 여전히 #SPILL!이라고 합니다. 공백 하나가 들어 있는 셀이나 빈 문자열 ""를 반환하는 수식은 비어 있는 것이 아니며, 값처럼 분산을 막습니다.
| A | B | C | |
|---|---|---|---|
| 1 | Numbers | Numbers | |
| 2 | #SPILL! | #SPILL! | |
| 3 | |||
| 4 |
#SPILL! 결과를 표시할 빈 셀이 부족합니다. 막고 있는 셀을 비우세요.A2는 A2:A4가 필요한데 A4에 공백이 있습니다. C2는 C2:C3이 필요한데 C3에 =""가 있습니다. A4나 C3을 클릭해 무엇이 있는지 확인하고 지우면 숫자가 분산됩니다. 엑셀에서 방해하는 셀 선택은 셀에 아무것도 보이지 않을 때도 이런 셀을 찾아 줍니다. 흰색 채우기 위의 흰색 텍스트도 같은 방식으로 숨습니다.
수식이 다른 수식으로 분산될 때 생기는 #SPILL!
분산되는 수식 두 개가 서로를 막을 수 있고, 누군가 아래에 입력한 수식이 위 수식의 분산 범위 안에 있을 수도 있습니다.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Dept | IT | Sales | |
| 2 | Ana | IT | #SPILL! | Ben | |
| 3 | Ben | Sales | Dee | ||
| 4 | Cy | IT | 5 | ||
| 5 | Dee | Sales | |||
| 6 | Eve | IT |
#SPILL! 결과를 표시할 빈 셀이 부족합니다. 막고 있는 셀을 비우세요.IT 목록은 D2:D4 세 셀이 필요한데 D4에 COUNTA 수식이 있습니다. E2의 Sales 목록은 필요한 두 셀이 있으므로 동작합니다. COUNTA 수식을 D6(또는 목록 아래의 아무 셀)으로 옮기면 IT 이름이 분산됩니다. 목록이 늘어날 자리를 남겨 두세요. 나중에 IT 직원이 한 명 더 생기면 결과에 셀이 하나 더 필요합니다.
VLOOKUP과 열 전체 참조의 #SPILL!
이전 엑셀용으로 쓴 수식에서 흔한 원인은 찾는 값이 열 전체인 경우입니다:
=VLOOKUP(A:A,Prices!A:B,2,FALSE) #SPILL! (one result for every row of the sheet)
=VLOOKUP(A2,Prices!A:B,2,FALSE) one result, fill it down
=VLOOKUP(A2:A100,Prices!A:B,2,FALSE) 100 results that spill
=VLOOKUP(@A:A,Prices!A:B,2,FALSE) one result, the value on the formula's own row
A:A는 셀이 1,048,576개이므로 첫 번째 수식은 결과 1,048,576개를 요청하고, 2행부터는 남은 행이 모자랍니다. 경고 메뉴는 분산 범위가 워크시트 가장자리를 넘어선다고 알려 줍니다. 이 패턴은 수식이 있는 행의 값만 조용히 쓰던 이전 엑셀에서 온 것입니다. Excel 365는 예전 통합 문서에서 수식을 =VLOOKUP(@A:A,...)로 표시해 그 동작을 유지하지만, 같은 수식을 새로 입력하면 열 전체가 분산됩니다. =A:A*2처럼 열 전체로 계산하는 다른 수식도 마찬가지입니다. 셀 하나를 쓰고 아래로 채우거나, 실제 크기의 범위나 @를 쓰세요. 조회 자체는 VLOOKUP 페이지에 더 자세히 있습니다.
분산 대신 행마다 결과 하나
범위로 계산하는 수식도 분산됩니다. 대개는 그게 원하는 것이지만, 때로는 행마다 수식 하나가 필요합니다.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Month | Sales | Spilled +10% | Filled +10% |
| 2 | Jan | 100 | 110 | 110 |
| 3 | Feb | 120 | 132 | 132 |
| 4 | Mar | 90 | 99 | 99 |
| 5 | Apr | 140 | 154 | 154 |
두 열 모두 110, 132, 99, 154를 보여 줍니다. C2에는 수식이 하나 있고 C3:C5는 그 분산 결과입니다. C3을 클릭하면 격자 아래 메모가 C2에서 분산된 것이라고 알려 줍니다. C4에 입력하면 C2가 #SPILL!로 바뀝니다. D2:D5는 별개의 수식 네 개이므로 셀마다 따로 바꿀 수 있고 아무것도 막을 수 없습니다. 사람들이 결과 하나하나 위에 입력할 것이라면 두 번째 형태를 쓰세요.
표 안, 병합된 셀, 크기를 알 수 없는 결과의 #SPILL!
다음 원인은 수식이 아니라 통합 문서에 따라 달라집니다:
- 엑셀 표 안(삽입 > 표): 표는 분산된 결과를 지원하지 않으므로 표 열 안의 FILTER나 UNIQUE는
#SPILL!을 표시합니다. 수식을 표 밖에 두거나, 표를 선택하고 테이블 디자인 > 범위로 변환을 고르세요. - 분산 범위 안의 병합된 셀: 셀을 선택하고 홈 > 병합하고 가운데 맞춤 > 셀 분할을 고르거나 수식을 옮기세요.
- 분산 범위를 알 수 없음:
=SEQUENCE(RANDBETWEEN(1,10))처럼 다시 계산할 때마다 결과의 크기가 바뀝니다. 엑셀은 크기가 휘발성인 결과를 분산하지 않습니다. 크기를 고정하세요. - 분산 범위가 너무 큼 또는 워크시트 가장자리를 넘어섬: 결과가 마지막 행이나 열을 넘어가게 됩니다. 메모리 부족: 배열이 너무 커서 계산할 수 없습니다. 세 경우 모두 범위를 줄이세요. 보통 열 전체를 실제 데이터 범위로 바꾸면 됩니다.
값 하나만 반환해서 막힐 일을 없애기
목록에서 서로 다른 제품이 몇 개인지처럼 숫자 하나만 필요하다면, 분산되는 함수를 값 하나를 반환하는 함수로 감싸세요. 값 하나는 분산되지 않으므로 어떤 셀도 가로막을 수 없습니다.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Product | Different products | |||
| 2 | Apple | ||||
| 3 | Pear | ||||
| 4 | Apple | x | |||
| 5 | Plum | ||||
| 6 | Pear | ||||
| 7 | Apple |
직접 해 보세요: E2에는 A2:A7에 서로 다른 제품이 몇 개인지 나와야 합니다. 그냥 =UNIQUE(A2:A7)을 쓰면 E4의 x로 분산됩니다. E2에 개수를 반환하는 수식 하나를 쓰세요.
COUNTA는 UNIQUE가 반환한 값을 세고 숫자 하나를 돌려줍니다. 같은 방법으로 정렬된 목록의 첫 값은 =INDEX(SORT(A2:A7),1), 첫 번째 일치는 =INDEX(FILTER(...),1), 합계는 =SUM(FILTER(...))로 구합니다.
자주 묻는 질문
엑셀에서 #SPILL!은 무슨 뜻인가요?
수식이 값을 둘 이상(동적 배열) 반환했는데, 아래나 옆 셀 중 적어도 하나가 비어 있지 않거나 병합되어 있거나 표 안에 있어서 엑셀이 값을 쓸 수 없다는 뜻입니다. 가로막는 것을 비우거나 옮기면 결과가 나타납니다.
셀이 비어 보이는데 #SPILL!이 나오는 이유는 무엇인가요?
비어 보이는 셀에도 공백, ""를 반환하는 수식, 흰색으로 서식을 지정한 텍스트가 들어 있을 수 있습니다. 그중 무엇이든 분산을 막습니다. 오류 옆의 경고 아이콘을 클릭하고 방해하는 셀 선택을 고른 뒤 Delete를 누르세요.
VLOOKUP의 #SPILL!은 어떻게 고치나요?
=VLOOKUP(A:A,D:E,2,FALSE)처럼 찾는 값이 열 전체나 범위이므로 엑셀이 시트의 행마다 결과를 하나씩 반환하려 합니다. 셀 하나를 쓰고 아래로 채우거나(=VLOOKUP(A2,D:E,2,FALSE)), 실제 크기의 범위를 쓰세요(=VLOOKUP(A2:A100,D:E,2,FALSE)).
엑셀에서 수식이 분산되지 않게 하려면 어떻게 하나요?
값 하나만 반환하게 만드세요. 범위 앞에 @를 붙여 수식이 있는 행의 값만 가져오거나(=@A2:A10*2), =COUNTA(UNIQUE(A2:A10))나 =INDEX(SORT(A2:A10),1)처럼 값 하나를 반환하는 함수로 결과를 감싸세요.
분산되는 수식을 엑셀 표 안에 넣을 수 있나요?
없습니다. 분산되는 수식은 표 안에서 #SPILL!을 표시합니다. 표 밖의 셀에 넣거나 테이블 디자인 > 범위로 변환으로 표를 일반 범위로 바꾸세요.