- 공유 링크 만들기
- X
- 이메일
- 기타 앱
이 글의 목적은 엑셀에서 “메모리 또는 디스크 공간이 부족하여 저장할 수 없다”와 유사한 오류를 체계적으로 진단하고, 메모리 사용량을 줄여 안전하게 저장하는 실무 대책을 단계별로 제시하는 것이다.
1. 오류 현상과 즉시 대응 순서
엑셀에서 저장 실패가 발생하면 데이터 손실 위험이 증가하므로 즉시 아래 순서로 안전조치를 수행해야 한다.
- 다른 모든 통합문서를 닫고 엑셀만 남기는 최소 환경을 만든다.
- F12 를 눌러 다른 이름으로 저장 을 시도하고, Excel 바이너리 통합 문서(.xlsb) 로 저장한다.
- 저장이 안 되면 새 통합문서 를 열고 문제가 되는 시트만 복사해 붙여넣어 저장을 시도한다.
- 자동 계산을 일시적으로 중지한다: 파일 > 옵션 > 수식 > 계산 옵션: 수동 으로 전환한다.
- 임시 저장 경로나 네트워크가 원인일 수 있으므로 로컬 디스크 (예: C:\Users\계정\Documents)에 저장한다.
2. 근본 원인 구조 이해
엑셀 메모리 부족은 크게 파일 구조 팽창, 계산 엔진 부담, 애드인·개체 누적, 32비트 환경 제약, 외부 요인으로 구분된다.
| 범주 | 세부 원인 | 주요 징후 | 대표 해결 레버 |
|---|---|---|---|
| 파일 구조 팽창 | 과도한 서식, 숨김 시트 다수, 사용 영역 과다, 피벗 캐시 중복 | 파일 용량 급증, 저장 지연 | 서식 정리, 사용영역 재설정, 캐시 공유 |
| 계산 엔진 부담 | 휘발성 함수 다량(OFFSET, INDIRECT, TODAY 등), 배열 수식 남발, 순환 참조 | 재계산 때마다 멈춤 | 수식 최적화, 계산 모드 수동, 값 고정 |
| 애드인·개체 누적 | COM/XLAM 애드인 누수, 이미지·도형·개체 다량 | 세션 지속 후만 느려짐 | 애드인 점검, 개체 압축·삭제 |
| 32비트 제약 | 프로세스 가용 RAM 한계, 대용량 모델·피벗 | 큰 데이터에서 반복 오류 | 64비트 전환, 데이터 모델 경량화 |
| 외부 요인 | 네트워크 드라이브, 백신 실시간 검사, 임시폴더 포화 | 임의 시점 저장 실패 | 로컬 저장, 예외처리, 임시파일 정리 |
3. 고장 모드별 해결 절차
3.1 파일 구조 팽창 정리
- 엑셀 바이너리(.xlsb) 저장 으로 메모리 풋프린트를 즉시 낮춘다.
- 과도 서식 제거 를 수행한다. 조건부 서식은 규칙 관리자에서 시트별 중복 규칙을 병합한다.
- 사용영역(UsedRange) 축소 를 위해 마지막 데이터 아래 행·우측 열 전체를 선택해 삭제 후 저장한다.
' VBA: UsedRange 재설정 Sub ResetUsedRange() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.UsedRange ' 트리거 Next ws End Sub
3.2 피벗 캐시와 데이터 모델 최적화
- 피벗 캐시 공유 를 위해 동일 원본의 피벗테이블을 복제해 사용하고 새로 만들 때는 기존 피벗에서 복사한다.
- 데이터 모델 에서는 불필요한 열을 제거하고 정수형·날짜형으로 다운캐스팅해 사전 압축률을 높인다.
- 피벗 항목의 항목 보존 안 함 을 설정해 불필요한 캐시를 줄인다.
3.3 계산 엔진 부하 경감
- 휘발성 함수 대체 를 적용한다. OFFSET/INDIRECT는 INDEX, XLOOKUP, 구조적 참조로 치환한다.
- 수식 영역 분할 로 재계산 그래프를 단순화한다.
- 중간 결과 값 고정 을 통해 대량 수식을 값으로 변환한다.
# 예: 동적 범위를 OFFSET 대신 INDEX로 구현 =SUM(INDEX(B:B,2):INDEX(B:B, MATCH(9.999E+307,B:B)))
3.4 개체·이미지·이름 관리
- 개체 선택 창 에서 사용하지 않는 도형·컨트롤·차트를 일괄 삭제한다.
- 이미지는 그림 압축 을 적용하고 해상도를 필요한 수준으로 낮춘다.
- 정의된 이름 범위를 검토하고 깨진 참조(#REF!)와 숨김 이름을 정리한다.
3.5 애드인·환경 점검
- 안전 모드 로 엑셀을 기동하여 재현 여부를 확인한다.
윈도우 실행 창: excel.exe /safe
- 문제가 재현되지 않으면 파일 > 옵션 > 추가 기능 에서 COM/Excel 애드인을 순차 비활성화하며 원인을 좁힌다.
- 그래픽 가속 옵션은 저장 오류와 무관한 경우가 많으나 화면 프리즈를 줄일 수 있어 보조적으로 비활성화한다.
3.6 임시 파일·가상 메모리 관리
- 사용자 Temp 폴더의 오래된 ~\$로 시작하는 잠금·임시 파일을 정리한다.
- 페이지 파일(가상 메모리)을 시스템 관리 크기로 설정해 메모리 압박을 완화한다.
# PowerShell: 사용자 Temp 내 오래된 엑셀 임시파일 정리(주의하여 사용) Get-ChildItem $env:TEMP -Filter "~$*" -File | Remove-Item -Force
4. 32비트 vs 64비트, 파일 형식, 저장 전략
| 항목 | 권장값/선택 | 효과 |
|---|---|---|
| 엑셀 아키텍처 | 64비트 | 대용량 데이터 모델·피벗 처리 안정성이 개선된다. |
| 파일 형식 | .xlsb | 메모리 풋프린트와 저장 시간을 단축한다. |
| 저장 주기 | 단위 작업 후 수시 저장 | Undo 스택 누적을 제한한다. |
| 네트워크 저장 | 로컬 후 업로드 | 잠금 충돌과 네트워크 지연을 회피한다. |
| 그림·개체 | 압축·정리 | 워킹 셋을 안정화한다. |
' VBA: 모든 시트 개체 수를 진단하여 과다 여부 확인 Sub CountShapes() Dim ws As Worksheet, c As Long For Each ws In ActiveWorkbook.Worksheets c = c + ws.Shapes.Count Debug.Print ws.Name, ws.Shapes.Count Next ws MsgBox "총 개체 수: " & c End Sub
5. 저장이 계속 실패할 때의 회피·복구 시나리오
5.1 시트별 분할 저장
문제가 되는 통합문서에서 시트를 그룹으로 나눠 부분 저장을 시도한다.
- 시트 1~N/2를 새 통합문서로 복사해 .xlsb로 저장한다.
- 나머지 시트를 같은 방식으로 저장하여 용량과 메모리를 분산한다.
5.2 값 붙여넣기 스냅샷 저장
연산이 무거운 영역을 값으로 고정해 임시 저장본을 만든다. 필요하면 원본을 별도 보관한다.
5.3 외부 연결 끊기
쿼리·외부 링크가 많은 통합문서는 데이터 > 쿼리 및 연결 에서 불필요 연결을 제거하거나 링크 끊기를 수행한다.
5.4 Open and Repair
파일 열기 대화상자에서 파일을 선택하고 열기 버튼 옆 화살표를 눌러 열기 및 복구 를 실행한다.
5.5 새 통합문서로 청정 복원
숨김 시트·이름·컨트롤이 오염된 파일은 새 통합문서를 만들고 데이터만 가져오는 방식이 가장 확실하다.
6. 데이터 모델·파워쿼리 환경 최적화 체크리스트
| 영역 | 점검 항목 | 권장 설정 |
|---|---|---|
| 파워쿼리 | 타입 지정, 불필요 열 제거, 단계 머지 정리 | 최종 단계에서 컬럼 최소화 |
| 데이터 모델 | 인덱스·키 정제, 다대다 회피 | 관계 단순화 및 정규화 |
| 피벗 | 캐시 수 최소화 | 동일 원본 피벗 복제 사용 |
| 수식 | 휘발성 치환, 불필요 배열 제거 | 동등 기능의 비휘발성 함수로 대체 |
| 서식 | 조건부 서식 중복 | 범위 단일화 및 규칙 통합 |
7. 성능 병목 패턴과 대체 설계
- 대량 VLOOKUP 체인 은 관계형 조인 구조나 XLOOKUP, 파워쿼리 머지로 대체한다.
- 시트 간 다중 간접참조 는 테이블 기반 구조적 참조로 정리한다.
- 피벗 다중 중첩 은 중간 집계를 생성하여 계층을 얕게 만든다.
8. 조직 차원의 예방 가이드
- 템플릿 표준화 로 서식 범위와 조건부 규칙을 최소화한다.
- 버전 정책 으로 64비트 환경과 최신 업데이트를 유지한다.
- 저장 규칙 으로 로컬 작업 후 저장을 의무화한다.
- 검수 스크립트 로 UsedRange·개체 수·이름 유효성 검사를 자동화한다.
' VBA: 깨진 이름과 #REF! 참조를 제거 Sub CleanBrokenNames() Dim n As Name For Each n In ActiveWorkbook.Names On Error Resume Next If InStr(1, n.RefersTo, "#REF!") > 0 Then n.Delete On Error GoTo 0 Next n End Sub
9. 진단 워크플로우 요약
- 안전 확보 : .xlsb로 임시 저장을 우선 시도한다.
- 환경 분리 : 안전 모드로 재현 여부를 확인한다.
- 구조 정리 : 서식·사용영역·개체·이름을 정리한다.
- 계산 최적화 : 휘발성 제거와 값 고정으로 부하를 낮춘다.
- 데이터 모델 경량화 : 불필요 열 제거와 캐시 공유를 적용한다.
- 외부 요인 배제 : 로컬 저장과 임시파일 정리로 실패 요인을 제거한다.
FAQ
파일 크기는 작아도 저장 실패가 발생하는가?
가능하다. 파일 크기와 메모리 사용량은 일치하지 않는다. 조건부 서식, 숨겨진 이름, 사용영역 팽창, 피벗 캐시 중복 등은 파일 용량에 비해 워킹 메모리를 과하게 사용하게 만든다.
.xlsb로 저장하면 무엇이 달라지는가?
.xlsb는 이진 형식으로 저장·열기 속도가 빠르고 메모리 풋프린트가 낮아지는 경향이 있다. 수식·기능은 동일하게 유지된다.
64비트로 바꾸면 모든 문제가 해결되는가?
아니다. 64비트는 큰 데이터에서 안정성을 높이지만 비효율적 수식·서식·개체 누수가 존재하면 저장 실패가 반복될 수 있다. 구조 최적화가 선행되어야 한다.
네트워크 드라이브에 바로 저장해도 되는가?
권장하지 않는다. 네트워크 지연과 잠금 파일 충돌로 오류가 발생할 수 있다. 로컬 저장 후 동기화하는 절차가 안전하다.
열기 및 복구로 고쳐지지 않는 경우는?
오염된 파일에서는 새 통합문서를 만들고 데이터만 이행하는 것이 가장 확실하다. 이때 개체와 이름은 가져오지 않도록 주의한다.