엑셀이 죽는 이유가 행이 너무 많아서인 경우는 거의 없습니다. 그 행 위에 무엇이 올라가 있느냐 때문에 죽습니다.
단순 값만 들어 있는 90만 행짜리 시트는 2015년식 노트북에서도 멀쩡히 열립니다. 하지만 열 전체에 조건부 서식을 적용하고, VLOOKUP 수천 개와 피벗 캐시까지 얹은 4만 행짜리 시트는 같은 컴퓨터를 완전히 멈춰 세웁니다. 눈에 띄는 건 행 수지만, 원인인 경우는 거의 없습니다.
그래서 물어야 할 것은 다섯 가지 원인 중 어느 것인가입니다. 원인마다 해결법이 다르고, 그중 넷은 1분이면 끝납니다.
다섯 가지 원인, 가능성 높은 순서대로
1. 메모리가 부족합니다 (32비트일 수도 있습니다)
엑셀은 통합 문서 전체를 RAM에 올리고, 여기에 계산 체인, 실행 취소 기록, 피벗 테이블마다 하나씩의 피벗 캐시까지 얹습니다. 디스크상 파일 크기의 몇 배가 되는 경우도 많습니다.
먼저 버전을 확인하세요. 파일 → 계정 → Excel 정보입니다. 맨 윗줄에 32비트라고 되어 있으면, 컴퓨터에 메모리가 얼마나 있든 엑셀은 약 2GB까지만 쓸 수 있고, 그것이 답입니다. Microsoft가 오랫동안 32비트를 기본으로 배포해서 그대로인 설치가 많습니다. 해당하는 분께는 64비트로 다시 설치하는 것이 이 페이지에서 가장 효과가 큰 해결책입니다.
메모리 문제의 신호: "사용할 수 있는 리소스가 부족하여 이 작업을 완료할 수 없습니다" 메시지, 또는 저장할 때나 두 번째 통합 문서를 열 때만 죽는 증상입니다.
2. 휘발성 함수가 계속 전체를 다시 계산합니다
일부 함수는 입력이 바뀔 때만이 아니라, 통합 문서 어디에서든 무언가 바뀔 때마다 매번 다시 계산됩니다. 휘발성 함수는 NOW(), TODAY(), RAND(), OFFSET(), INDIRECT(), INFO(), CELL()이며, 각각 자신에게 의존하는 모든 것을 함께 끌고 갑니다.
느린 통합 문서의 흔한 주범은 INDIRECT(), 쓸 수 없게 된 통합 문서의 흔한 주범은 OFFSET()입니다. 큰 시트에 둘 중 하나가 수백 개만 있어도 키를 누를 때마다 전체 재계산이 일어납니다.
진단은 10초면 됩니다. 수식 → 계산 옵션 → 수동으로 바꿔 보세요. 통합 문서가 바로 빨라지면 문제는 크기가 아니라 재계산이었습니다.
해결책은 우선순위 순으로 다음과 같습니다. OFFSET/INDIRECT는 INDEX로 바꿉니다. 열 전체를 대상으로 한 VLOOKUP은 범위를 한정한 INDEX/MATCH 또는 XLOOKUP으로 바꿉니다. A1:A50000으로 충분하면 A:A를 참조하지 마세요. 열 전체 참조는 수식 하나당 100만 셀을 훑는 일입니다.
3. 열 전체에 적용된 서식
A열을 선택해 조건부 서식이나 채우기 색을 적용하면, 엑셀이 100만 셀 분의 서식 정보를 저장할 수 있습니다. 열 십여 개에 이렇게 하면 파일이 부풀어 오릅니다. 데이터는 5,000행뿐인데 40MB인 통합 문서는 흔하고, 열 때는 100만 행이 있는 것처럼 느립니다.
두 가지 신호:
- 데이터는 5,000행에서 끝나는데 Ctrl+End가 엉뚱한 곳(900,000행, BZ열 등)으로 이동합니다. 그것이 사용된 범위이고, 엑셀은 그 범위를 기준으로 메모리를 할당합니다.
- 내용에 비해 파일이 지나치게 큽니다.
해결: 데이터 아래의 모든 행을 맨 아래까지 선택하고, (내용이 아니라) 행 자체를 삭제합니다. 데이터 오른쪽의 열도 똑같이 합니다. 저장하고, 닫고, 다시 여세요. 이제 Ctrl+End가 진짜 마지막 셀에 도착해야 합니다. 그다음 조건부 서식은 열 전체가 아니라 실제 범위에 다시 적용하세요.
4. 피벗 테이블마다 따로 있는 피벗 캐시
피벗 테이블은 다른 피벗 테이블과 캐시를 공유하도록 명시하지 않는 한 원본 데이터의 복사본을 각자 저장합니다. 20만 행짜리 원본에 피벗 테이블 다섯 개면, 파일 안에 100만 행의 숨은 중복이 생깁니다.
해결: 피벗 테이블을 추가할 때는 원본에서 새로 만들지 말고 기존 피벗 테이블을 복사하세요. 복사본은 캐시를 공유합니다. 또한 가능하면 피벗 테이블 옵션에서 "파일과 함께 원본 데이터 저장"을 끄세요.
5. 결국 행 수가 원인입니다
수백만 행짜리 CSV라면 위의 어느 것도 해당하지 않습니다. 엑셀은 시트당 1,048,576행까지만 담을 수 있고, 이는 구조적인 한계입니다. 정확히는 죽지 않습니다. 들어가는 만큼만 불러오고 멈추는데, 그편이 더 나쁩니다. 엑셀이 열지 못하는 큰 CSV 파일 여는 방법이 이 경우를 위한 가이드이고, 1GB CSV 파일 여는 방법에서는 대신 처리할 수 있는 도구를 비교합니다.
어느 원인인지 알아내기
2분이면 됩니다. 이 순서대로 확인하세요.
- 파일 → 계정 → Excel 정보. 32비트인가요? 여기서 멈추세요. 그것이 해결책입니다.
- Ctrl+End. 데이터보다 훨씬 먼 곳에 도착하나요? 원인 3입니다.
- 수식 → 계산 옵션 → 수동. 이제 빨라졌나요? 원인 2입니다.
- 파일 크기를 내용과 비교합니다. 8,000행에 30MB라면 원인 3 또는 4입니다.
- 어느 것도 아닌데 파일이 수백만 행인가요? 원인 5입니다. 이 경우 엑셀은 고장 난 것이 아니라 맞지 않는 도구입니다.
추가 기능(add-in)은 따로 배제하세요. excel /safe로 엑셀을 시작합니다. 통합 문서가 정상적으로 동작하면 추가 기능이 원인이었고, 위의 내용은 상관이 없습니다.
대신 할 수 있는 일
문서가 아니라 데이터 파일이라면. 사람들을 곤란하게 만드는 패턴은 스프레드시트를 데이터베이스처럼 쓰는 것입니다. 수십만 행에, 전체에 걸쳐 계산하는 수식 열이 있고, 그 위에 피벗이 올라간 경우입니다. 이런 작업에는 쿼리 엔진이 맞습니다.
duckdb -c "SELECT region, SUM(amount) FROM 'export.csv' GROUP BY region"
엑셀이 2분과 멈춤을 거쳐야 하는 일을 DuckDB는 약 1초에 답하고, 구문도 중첩된 SUMIFS보다 쉽습니다. 더 자세한 안내는 데이터베이스 없이 CSV에서 SQL 쿼리 실행하기에 있습니다.
엑셀에 남아야 한다면. Power Query(데이터 → 데이터 가져오기)는 파일 전체를 처리하고 요약만 시트에 내려놓으므로, 수백만 행이 워크시트를 차지하지 않습니다. 데이터 모델은 시트에 담을 수 있는 것보다 많은 행을 다루며, 그 위에서 피벗 테이블을 바로 돌릴 수 있습니다.
그냥 내용만 읽으면 된다면. 데이터 파일을 문서가 아닌 데이터로 다루는 도구에서 열면 다섯 가지 원인이 한꺼번에 사라집니다.
파일을 가져오지 않고 그대로 읽습니다. 재계산도, 서식 정보도, 피벗 캐시도 없습니다. 적힌 그대로의 값에 SQL이나 일상 언어로 질문할 수 있습니다.
기능대부분을 막아 주는 두 가지 습관
값과 보이는 모양을 분리하세요. 서식도 수식도 없는 원본 데이터 시트 하나, 그것을 참조하는 분석 시트 하나입니다. 문제가 큰 통합 문서 대부분은 시트 하나가 세 가지 일을 모두 하고 있습니다.
열이 아니라 범위를 참조하세요. 어디서든 A:A 대신 A1:A50000을 씁니다. 통합 문서가 커져도 계속 쓸 수 있느냐에 가장 큰 영향을 주는 습관입니다.