엑셀 #SPILL! 오류 원인을 AI 로 찾고 고치기
아래 칸이 비어 보이는데 #SPILL! 이 뜰 때, 시트 상황을 Claude 에 설명해 원인을 좁히고 LEN 으로 보이지 않는 막힘을 직접 확인하는 방법입니다.
=UNIQUE(A2:A6) 를 D2 에 넣었더니 #SPILL! 이 뜹니다. D3 아래는 분명히 비어 보입니다. AI 는 이 시트를 보지 못하므로, 무엇을 알려 주고 무엇을 직접 확인해야 하는지가 이 글의 내용입니다.
시트와 사례
아래 CSV 는 가상 시트입니다. 첫 열은 행 번호이고, 4행 D열(D4)에 공백 한 칸이 들어 있습니다. 화면에서는 비어 보입니다.
,A,B,C,D,E1,Region,Item,Qty,Unique regions,2,East,Pen,10,,3,West,Pen,5,,4,East,Ink,7, ,5,North,Pen,2,,6,West,Ink,9,,UNIQUE(A2:A6) 는 세 값을 돌려주므로 D2:D4 가 비어야 하는데 D4 가 막습니다. 흔한 두 사례를 더해 한 번에 묻습니다.
| 사례 | 수식 | 막히는 이유(공식 설명) |
|---|---|---|
| 1 | D2 의 =UNIQUE(A2:A6) | 펼쳐질 칸에 무언가 있음. 공백 문자도 해당 |
| 2 | 표(tblSales) 안의 =FILTER(…) | 엑셀 표는 동적 배열 수식과 호환되지 않음 |
| 3 | C2 의 =A:A*2 | 결과가 시트 끝을 넘어감 |
프롬프트
지시·맥락·입력을 태그로 나눴습니다. Claude 프롬프트 가이드가 권하는 방식이고, 지시와 사례가 섞여 오해되는 일을 줄입니다. <context> 에는 요구의 이유를 적었습니다. 이유를 알면 AI 가 「아는 것」과 「짐작」을 나눠 쓰는 쪽으로 기웁니다.
<instructions>Microsoft 365 엑셀에서 #SPILL! 오류가 납니다. 아래 세 사례마다 (1) 가장 가능성 높은 원인 한 문장, (2) 설명만으로는 알 수 없는 것, (3) 시트에서 직접 해 볼 확인 한 가지(셀 주소나 수식을 구체적으로)를 한국어로 적어 주세요.셀 내용을 지어내지 마세요. 추측이면 "추측"이라고 쓰세요. 다른 말은 쓰지 말고, 사례당 4줄 이내로 쓰세요.</instructions> <context>저는 화면을 봐도 무엇이 문제인지 모르고, 알려 주신 대로 실제 파일을 고칠 겁니다. 틀린 추측 때문에 한 시간을 잃을 수 있으니 아는 것과 짐작을 나눠 주세요.</context> <input>사례 1: D2 에 =UNIQUE(A2:A6) 를 넣었더니 #SPILL! 이 뜹니다. D2 아래 칸은 모두 비어 보입니다. D열에는 D1 의 제목 외에 아무것도 없습니다. 사례 2: 데이터가 엑셀 표(이름 tblSales, 열 지역·품목·수량)입니다. 표의 새 열 첫 행에 =FILTER(tblSales[품목],tblSales[수량]>5) 를 넣었더니 그 열의 모든 행에 #SPILL! 이 뜹니다. 사례 3: 일반 범위의 C2 에 =A:A*2 (열 전체 참조)를 넣었더니 #SPILL! 이 뜹니다. 1행은 제목입니다.</input>사례 1 에서 일부러 「D4 에 공백이 있다」고 쓰지 않았습니다. 실제로 막혀 본 사람도 그 사실을 모릅니다.
결과
claude -p --model claude-sonnet-5-5 --max-turns 1 --tools "" --setting-sources "" --strict-mcp-config 로 두 번 돌렸습니다. 첫 번째 결과를 줄여 싣습니다.
사례 11. 원인(추측): D3:D6 중 눈에 안 보이는 내용(공백 문자, `""`를 반환하는 수식, 병합 셀 등)이 든 칸이 확산을 막고 있을 가능성이 가장 높습니다.2. 알 수 없는 것: D3:D6 각 칸에 실제로 무엇이 들어 있는지, A2:A6 의 고유값이 몇 개인지(몇 칸이 필요한지)입니다.3. 확인: D2 를 선택하고 옆에 뜨는 경고 아이콘을 눌러 "방해하는 셀 선택"(영문 Select Obstructing Cells)을 누른 뒤, 선택된 셀의 수식 입력줄을 보세요. 사례 21. 원인: 엑셀 표 안에서는 확산(스필) 수식이 지원되지 않습니다. 알려진 제한이며 설명과 일치합니다.…3. 확인: 표 밖에서 아래쪽이 비어 있는 셀에 같은 수식 `=FILTER(tblSales[품목],tblSales[수량]>5)` 를 넣어 정상 출력되는지 보세요. 사례 31. 원인: `A:A` 는 1,048,576행이라 C2 부터 확산하면 시트 맨 아래를 넘어 "확산 범위가 너무 큼" 오류가 납니다. ……3. 확인: C2 를 `=A2:A10*2` 로 바꿔 보세요(10 은 임의 값이니 실제 마지막 행으로 조정). …- 사례 1 은 두 번 다 「추측」이라고 표시했고, 사례 2 는 두 번 다 알려진 제한이라고 단정했습니다. 사례 3 은 한 번은 「알려진 동작」, 한 번은 「거의 확실하지만, 이 파일에서 직접 본 것은 아닙니다」였습니다.
- 사례 1 의 확인은 두 번 다 「방해하는 셀 선택」이었습니다. 이 기능은 막는 칸을 골라 줍니다. 그 칸에 공백이 든 건지 수식이 든 건지는 입력줄을 봐야 알고, 둘째 결과는 먼저 경고 문구를 읽으라고 했습니다.
보이지 않는 막힘은 직접 찾는다
AI 는 D4 의 공백을 볼 수 없어 후보로만 말합니다. 확정은 시트에서 합니다.
[1] 옆 열 E3 에 =LEN(D3) 을 넣고 E4:E6 까지 끌어 내립니다. D 열 안에 넣으면 그 칸이 또 막습니다. 0 이 아닌 행이 막는 칸입니다. 이 시트에서는 E4 가 1 이므로 D4 입니다.
[2] 그 칸을 Delete 로 지웁니다. 임시 수식도 지웁니다.
[3] LEN 은 공백 문자는 잡지만, 수식이 돌려준 빈 문자열("")은 0 이라 지나칩니다. LEN 이 0 인데 막혀 있으면 그 칸에 수식이 들어 있는지 봅니다. 엑셀 오류 표시줄(느낌표)의 「방해하는 셀 선택」도 같은 일을 합니다.
[4] 고친 뒤 펼쳐진 행 수를 셉니다.
=ROWS(UNIQUE(A2:A6))3 이 나오고 D2:D4 가 채워졌다면 끝입니다.
같은 일을 CSV 로 내보낸 시트에 스크립트(spillcheck.py, 칸 길이를 재서 LEN 과 같은 일을 함)로 해 보았습니다. 엑셀이 아니라 CSV 를 읽습니다.
$ python3 -I spillcheck.py sheet.csv D2 A; echo "exit $?"UNIQUE returns 3 rows -> needs D2:D4BLOCK D4: LEN=1 value=' '1 blocking cellsexit 1D4 의 공백을 지운 sheet-fixed.csv 로는 0 blocking cells · exit 0 이 나왔습니다.
사례 2·3 고침
사례 2 는 수식을 표 밖 빈 셀로 옮깁니다(표를 일반 범위로 바꾸려면 표 디자인 → 범위로 변환). 사례 3 은 =A2:A100*2 처럼 실제 데이터 범위만 참조합니다.
빗나가는 곳
- 두 번 돌려 사례마다 원인은 같았고 확인 문장의 표현만 달랐습니다. 사례 3 의 확인은 둘 다
=A2:A10*2로 바꿔 보라는 것인데, 10 은 임의 값이니 실제 마지막 행으로 고쳐야 합니다. - 프롬프트에서 「표 안인가」를 빼면 사례 2 의 원인이 후보에서 빠지기 쉽습니다. 표 안이면 반드시 적습니다.
- AI 가 준 수식은 붙여 넣은 뒤
=ROWS(UNIQUE(…))와 실제로 펼쳐진 행 수를 맞춥니다.