mygems

엑셀이 큰 파일에서 죽는 이유와 대안

응답 없음, 스크롤 시 멈춤, 저장 시 종료. 원인은 행 수보다 메모리, 재계산, 서식인 경우가 많습니다. 어느 쪽인지 구분하는 방법입니다.

작성: uos ·

엑셀이 죽는 이유가 행이 너무 많아서인 경우는 거의 없습니다. 그 행 위에 무엇이 올라가 있느냐 때문에 죽습니다.

단순 값만 들어 있는 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분이면 됩니다. 이 순서대로 확인하세요.

  1. 파일 → 계정 → Excel 정보. 32비트인가요? 여기서 멈추세요. 그것이 해결책입니다.
  2. Ctrl+End. 데이터보다 훨씬 먼 곳에 도착하나요? 원인 3입니다.
  3. 수식 → 계산 옵션 → 수동. 이제 빨라졌나요? 원인 2입니다.
  4. 파일 크기를 내용과 비교합니다. 8,000행에 30MB라면 원인 3 또는 4입니다.
  5. 어느 것도 아닌데 파일이 수백만 행인가요? 원인 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(데이터 → 데이터 가져오기)는 파일 전체를 처리하고 요약만 시트에 내려놓으므로, 수백만 행이 워크시트를 차지하지 않습니다. 데이터 모델은 시트에 담을 수 있는 것보다 많은 행을 다루며, 그 위에서 피벗 테이블을 바로 돌릴 수 있습니다.

그냥 내용만 읽으면 된다면. 데이터 파일을 문서가 아닌 데이터로 다루는 도구에서 열면 다섯 가지 원인이 한꺼번에 사라집니다.

CSV File Viewer - Smart CSViPhone 및 iPad · Android

파일을 가져오지 않고 그대로 읽습니다. 재계산도, 서식 정보도, 피벗 캐시도 없습니다. 적힌 그대로의 값에 SQL이나 일상 언어로 질문할 수 있습니다.

기능

대부분을 막아 주는 두 가지 습관

값과 보이는 모양을 분리하세요. 서식도 수식도 없는 원본 데이터 시트 하나, 그것을 참조하는 분석 시트 하나입니다. 문제가 큰 통합 문서 대부분은 시트 하나가 세 가지 일을 모두 하고 있습니다.

열이 아니라 범위를 참조하세요. 어디서든 A:A 대신 A1:A50000을 씁니다. 통합 문서가 커져도 계속 쓸 수 있느냐에 가장 큰 영향을 주는 습관입니다.

자주 묻는 질문

큰 파일에서 엑셀이 계속 “응답 없음”이라고 뜨는 이유는 무엇인가요?
크기보다 재계산 때문인 경우가 많습니다. 휘발성 함수(OFFSET, INDIRECT, NOW, TODAY, RAND)는 통합 문서 어디에서든 무언가 바뀔 때마다 다시 계산되고, A:A 같은 열 전체 참조는 수식마다 100만 셀을 훑게 만듭니다. 수식 → 계산 옵션 → 수동으로 바꿔서 바로 빨라지면 그것이 원인입니다.
내 엑셀이 32비트인지 어떻게 알고, 그게 중요한가요?
파일 → 계정 → Excel 정보에서 확인하세요. 32비트 버전은 컴퓨터의 RAM이 얼마든 메모리가 약 2GB로 제한되므로, 64비트 버전이라면 쉽게 열 통합 문서에서도 실패합니다. Microsoft가 오랫동안 32비트를 기본으로 배포해서 지금도 많은 설치가 32비트입니다. 해당한다면 64비트로 다시 설치하는 것이 가장 큰 해결책입니다.
데이터가 거의 없는데 엑셀 파일이 이렇게 큰 이유는 무엇인가요?
거의 항상 열 전체에 적용한 서식 때문이며, 엑셀이 열마다 100만 셀 분의 상태를 저장하게 됩니다. Ctrl+End를 눌러 실제 데이터보다 훨씬 먼 곳으로 이동한다면 사용된 범위가 부풀어 있는 것입니다. 데이터 뒤의 빈 행과 열을 삭제하고, 저장한 뒤 닫았다가 다시 여세요.
엑셀이 1,048,576행 제한 때문에 죽나요?
아니요. 이 제한은 충돌을 일으키지 않습니다. 엑셀은 들어가는 행만 불러오고 멈추며, 분명한 경고가 없는 경우도 많습니다. 그 뒤에 보는 합계가 조용히 틀려 있기 때문에 죽는 것보다 위험합니다. 충돌과 멈춤은 메모리, 재계산, 서식, 피벗 캐시에서 옵니다.
피벗 테이블 때문에 통합 문서가 커지는 것을 어떻게 막나요?
피벗 테이블은 캐시를 공유하지 않는 한 각자 원본 데이터의 복사본을 가집니다. 새 피벗 테이블은 원본에서 다시 만들지 말고 기존 것을 복사해서 만드세요. 작업 방식이 허락한다면 피벗 테이블 옵션에서 “파일과 함께 원본 데이터 저장”도 끄세요.
큰 데이터 파일에는 엑셀 대신 무엇을 써야 하나요?
데이터에 대해 질문하려면 DuckDB가 가져오기 단계 없이 CSV를 그 자리에서 약 1초 만에 쿼리합니다. 엑셀에 남아야 한다면 Power Query와 데이터 모델이 워크시트에 담을 수 있는 것보다 훨씬 많은 행을 처리하고 요약만 시트에 내려놓습니다. 큰 파일을 단순히 읽기만 하려면 문서가 아닌 데이터로 다루는 뷰어를 쓰세요.

uos — CSV Editor와 Smart CSV Viewer를 만들고 있으며, 통합 문서의 어느 부분이 문제인지 찾느라 의도했던 것보다 많은 시간을 썼습니다.