엑셀 차트 축 최소값·최대값 설정이 저장되지 않을 때 해결 방법(축 범위 고정 완벽 가이드)

이 글의 목적은 엑셀에서 차트 축의 최소값·최대값 설정이 저장되지 않거나 자동으로 초기화되는 문제를 사용 사례별로 정확히 진단하고 재발 없이 고정하는 실무 절차와 VBA 자동화 방법을 제공하는 것이다.

문제 정의와 증상 진단

차트 축 범위가 저장되지 않는 대표 증상은 다음과 같다고 요약할 수 있다.

  • 축 최소값·최대값을 수동 입력했지만 시트 재계산·파일 재열기·데이터 새로고침 후 다시 자동으로 바뀌는 현상이다.
  • 피벗차트에서 분기별·월별 데이터를 업데이트하면 축이 다시 자동으로 확대·축소되는 현상이다.
  • 보조축을 쓰는 복합차트에서 한쪽 축을 고정하면 다른 축의 스케일이 같이 틀어지는 현상이다.
  • 날짜 축에서 주말·공휴일 제외 설정 또는 빈 셀 처리 방법 변경 시 축이 원치 않게 재계산되는 현상이다.
주의 : “저장되지 않는다”라는 표현의 근본 원인은 대개 엑셀이 자동 스케일 논리를 다시 적용하기 때문이며, 이는 데이터 원본의 범위·형식·필터·피벗 새로고침 이벤트와 연결되는 경우가 많다.

원인별 해법 개요(의사결정 트리)

다음 표에서 자신의 상황을 먼저 매칭한 뒤 해당 절로 이동하면 된다.

상황주요 원인우선 조치심화 조치
일반 차트(피벗 아님) 자동 스케일 재적용, 숨김/빈 셀 처리, 동적 범위 변동 축 옵션에서 자동 해제 후 수동 값 입력 데이터 범위 고정, 숨김 데이터 표시, VBA로 고정
피벗차트 피벗 새로고침 이벤트가 축 스케일 초기화 피벗범주 고정, 그룹 레벨 고정 Worksheet_PivotTableUpdate 이벤트에서 축 재적용
보조축 사용하는 복합차트 1차·2차 축 스케일 불일치 및 자동 재조정 두 축 모두 수동 고정 계열별 축 지정 재점검 및 단위 통일
날짜 축(시간 척도) 축 유형이 ‘텍스트’ 또는 불연속 날짜 축 유형을 ‘날짜’로 지정 CDbl(Date) 기반 VBA로 최소/최대값 고정
로그 축 0 또는 음수 데이터 포함으로 자동 스케일 0/음수 제외 또는 변환 데이터 전처리 및 보간치 사용

기본 조치: 축 옵션에서 자동 스케일 해제

  1. 차트를 클릭하고 축을 선택한 뒤 축 서식 창을 연다.
  2. 경계(최소/최대)주 단위 항목의 자물쇠 아이콘 또는 ‘자동’ 체크를 해제한다.
  3. 필요 최소값·최대값·주 단위 값을 직접 입력한다.
  4. 파일을 저장하고 다시 열어 변동 여부를 확인한다.
주의 : 소수점 기호를 시스템 구분자와 다르게 입력하면 값이 무시될 수 있다. 한국어 윈도우에서 소수점은 보통 ‘.’이다. 지역 설정에서 ‘,’로 되어 있으면 엑셀이 입력을 거부하거나 반올림할 수 있다.

데이터 원본과 숨김/빈 셀 처리 점검

축 스케일은 데이터 범위 확장·감소, 빈 셀 처리 방식에 직접 영향을 받는다.

  • 데이터 범위 고정: 표 객체(Table)로 되어 있고 행이 자동으로 늘어나는 경우 축 자동 스케일 재적용이 잦다. 동적 범위를 유지하되 축은 VBA로 고정하는 전략을 권장한다.
  • 숨김 및 빈 셀: 차트 → 데이터 선택숨김 및 빈 셀 → ‘숨겨진 행과 열의 데이터 표시’를 켠다. 빈 셀은 ‘간격’ 대신 ‘선으로 연결’이 축 스케일 안정에 유리하다.

보조축이 있는 복합차트의 체크리스트

  1. 계열 서식에서 해당 계열이 보조축인지 기본축인지 확인한다.
  2. 값 축(세로축)을 기본축과 보조축 각각 선택해 최소값·최대값을 모두 수동으로 입력한다.
  3. 주 단위·보조 단위도 각각 수동으로 맞춘다.
  4. 계열 단위가 크게 다른 경우(예: 백만 vs %) 보조축에 % 계열만 올린다.
주의 : 한쪽 축만 고정하고 다른 축을 자동으로 두면 엑셀이 가독성을 위해 반대 축 스케일을 재조정하는 경우가 있다. 두 축 모두 수동 고정이 안전하다.

날짜 축(시간 척도)에서 범위가 풀리는 경우

날짜 데이터는 축 유형이 중요하다.

  • 축 유형을 ‘텍스트’가 아니라 ‘날짜(시간 척도)’로 지정한다.
  • 주말·공휴일 제외로 데이터가 불연속이면 엑셀이 축을 다시 계산할 수 있다. 불연속 날짜라도 날짜 축을 유지하면 최솟값·최댓값 고정이 안정적이다.

피벗차트에서 축이 매번 초기화될 때

피벗차트는 새로고침그룹 변경 시 내부적으로 차트를 재생성하여 축 범위를 되돌릴 수 있다. 다음 순서로 대응한다.

  1. 피벗 필드에서 범주(예: 월, 분기) 그룹 레벨을 고정한다.
  2. 값 필드의 표시 형식·집계를 바꾸지 않는다. 바꾸어야 한다면 아래 VBA 이벤트로 축을 재적용한다.
  3. Worksheet_PivotTableUpdate 이벤트에 축 고정 코드를 넣어 매번 자동으로 최소/최대값을 재설정한다.
' 시트 모듈(예: Sheet1 코드)에 삽입 Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) On Error Resume Next With Me.ChartObjects("chtSales").Chart With .Axes(xlValue) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = 0 .MaximumScale = 1000000 .MajorUnitIsAuto = False .MajorUnit = 200000 End With ' 보조축 사용하는 경우 If .HasAxis(xlValue, xlSecondary) Then With .Axes(xlValue, xlSecondary) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = 0 .MaximumScale = 100 .MajorUnitIsAuto = False .MajorUnit = 10 End With End If End With End Sub 
주의 : ChartObjects 이름(위 예시의 "chtSales")은 실제 차트 개체 이름으로 바꾸어야 한다. 차트를 선택하고 이름 상자에서 확인·수정한다.

VBA로 일반 차트 축을 영구 고정하는 방법

데이터 범위가 동적이어도 다음 매크로로 열린 즉시·저장 직전 고정할 수 있다.

' 표준 모듈(Module1) Sub LockAxis_AllChartsOnSheet() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart.Axes(xlValue) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = 0 ' 필요 값으로 변경 .MaximumScale = 100 ' 필요 값으로 변경 .MajorUnitIsAuto = False .MajorUnit = 20 ' 필요 값으로 변경 End With ' 보조축이 있을 경우 If co.Chart.HasAxis(xlValue, xlSecondary) Then With co.Chart.Axes(xlValue, xlSecondary) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = 0 .MaximumScale = 100 .MajorUnitIsAuto = False .MajorUnit = 10 End With End If Next co End Sub 

파일 저장 시 자동 적용하려면 ThisWorkbook 모듈에 다음을 추가한다.

Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.ScreenUpdating = False Call LockAxis_AllChartsOnSheet Application.ScreenUpdating = True End Sub 
주의 : 시트가 여러 개면 각 시트에서 차트를 순회하도록 루프를 확장한다. 또한 보호 통합 문서 상태에서는 축 서식 적용이 거부될 수 있으므로 보호를 일시 해제한다.

날짜 축을 VBA로 정확히 고정하기

날짜는 일련번호(Double)로 저장되어 축 최소·최대값도 숫자여야 한다. DateSerial을 사용하면 안정적이다.

Sub LockDateAxis() Dim ch As Chart Set ch = ActiveSheet.ChartObjects("chtDate").Chart With ch.Axes(xlCategory) .CategoryType = xlTimeScale .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = CDbl(DateSerial(2025, 1, 1)) .MaximumScale = CDbl(DateSerial(2025, 12, 31)) .BaseUnit = xlDays .MajorUnit = 30 .MajorUnitIsAuto = False End With End Sub 
주의 : 데이터에 날짜가 텍스트로 저장되어 있으면 축이 날짜로 인식되지 않는다. TEXT를 실제 날짜 값으로 변환한다.

로그 축에서 값이 초기화되는 경우

  • 로그 축은 0 또는 음수 데이터가 있으면 설정이 강제로 해제되거나 스케일이 왜곡된다.
  • 0 값을 아주 작은 양수(예: 0.0001)로 대체하거나, 로그 축이 필요한 계열만 별도 차트로 분리한다.

동적 범위(테이블·OFFSET·INDEX) 사용 시 권장 패턴

동적 범위로 새 행이 추가될 때마다 최대값이 커지면 엑셀이 스케일을 다시 잡으려 한다. 다음 패턴으로 차트의 재계산은 허용하되 축은 고정한다.

  1. 원본 범위는 테이블로 관리하여 수식·서식을 자동 확장한다.
  2. 차트는 테이블 열을 직접 참조하되, 축 최소/최대는 VBA로 주기적 재적용한다.
  3. 월말 등 정기 시점에만 축 상한을 상향 조정하는 매크로를 만든다.
Sub RaiseAxisCapIfNeeded() Dim co As ChartObject, maxData As Double maxData = Application.WorksheetFunction.Max(Range("tblSales[Amount]")) For Each co In ActiveSheet.ChartObjects With co.Chart.Axes(xlValue) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False If .MaximumScale < maxData Then .MaximumScale = WorksheetFunction.Ceiling_Precise(maxData, 10000) End With Next co End Sub 

재발 방지를 위한 설정 체크리스트

항목권장 설정비고
축 경계/단위 자동 해제 후 수동 값 기본축·보조축 모두 적용
숨김/빈 셀 숨긴 데이터 표시, 빈 셀은 선으로 연결 스케일 급변 억제
축 유형 날짜 데이터는 날짜 축 텍스트 축은 불연속으로 인식
피벗 새로고침 PivotTableUpdate에서 축 재설정 자동화를 통한 일관성
로그 축 0/음수 데이터 제거 또는 변환 필요 시 별도 차트
지역 소수점 시스템 구분자와 동일 입력 무시 방지
문서 보호 축 변경 전 보호 해제 특히 공유통합문서

자주 발생하는 함정과 해결 팁

  • 차트 템플릿(.crtx) 재적용: 템플릿에 자동 스케일이 저장돼 있으면 적용 시 현재 설정이 덮어쓴다. 템플릿을 다시 저장한다.
  • 축이 다른 개체를 참조: 복합 차트에서 특정 계열이 잘못된 축에 할당되면 스케일이 상충한다. 계열별 축을 재배치한다.
  • 계산 모드: 수동 계산 모드에서 데이터가 변경되었는데 재계산 전에 축을 고정하면 실제 데이터와 불일치가 생긴다. 재계산 후 축 고정을 적용한다.
  • 범례 필터: 범례에서 계열을 토글하면 축이 다시 조정될 수 있다. 필요 시 이벤트 기반 고정을 사용한다.

현장 적용 예시: 보고서용 매출 추이 차트 고정

  1. 매출 테이블(tblSales)을 월별로 관리한다.
  2. 꺾은선형 차트에 Amount 열을 연결한다.
  3. 세로축 최소 0, 최대 1,000,000, 주 단위 100,000으로 수동 입력한다.
  4. 숨김 및 빈 셀에서 ‘숨김 데이터 표시’, 빈 셀은 ‘선으로 연결’을 선택한다.
  5. 다음 VBA를 ThisWorkbook에 넣어 저장 전 자동 고정한다.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.ScreenUpdating = False Call LockAxis_AllChartsOnSheet Application.ScreenUpdating = True End Sub 

고급: 특정 차트만 대상, 조건부 축 상한 적용

보고서마다 요구 스케일이 다르면 차트 이름 기반으로 조건을 건다.

Sub LockAxis_ByChartName() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects Select Case co.Name Case "chtRevenue" With co.Chart.Axes(xlValue) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = 0 .MaximumScale = 1500000 End With Case "chtMargin" With co.Chart.Axes(xlValue) .MinimumScaleIsAuto = False .MaximumScaleIsAuto = False .MinimumScale = -10 .MaximumScale = 50 End With End Select Next co End Sub 

테스트 체크리스트(완료 기준)

  • 파일을 닫았다가 열어도 축 값이 동일하다.
  • 데이터 추가·삭제 후에도 축 값이 유지된다.
  • 피벗 새로고침 후에도 축이 유지되거나 이벤트로 즉시 재적용된다.
  • 보조축이 있는 경우 두 축 모두 의도한 값으로 고정되어 있다.
  • 로그 축·날짜 축에서도 예외 없이 동작한다.

FAQ

피벗차트에서만 축이 자꾸 풀린다. 일반 차트로 바꾸는 것이 좋은가?

피벗차트는 새로고침 시 내부 재생성이 발생하여 축이 초기화되기 쉽다. 피벗 유지가 필요하다면 Worksheet_PivotTableUpdate 이벤트에서 축을 재설정하는 자동화를 권장한다. 피벗 기능이 필요 없고 데이터가 확정적이라면 일반 차트로 변환하여 안정성을 높이는 것이 낫다.

날짜 축에서 최솟값을 특정 월의 1일로 고정하고 싶다.

축 유형을 날짜로 지정한 뒤 CDbl(DateSerial(연, 월, 1)) 값을 VBA로 설정한다. UI에서 직접 입력도 가능하나 VBA가 재현성과 이식성이 높다.

로그 축에서 0 값이 있어 오류가 난다.

0을 아주 작은 양수로 대체하거나 로그 축 전용 보조 계열로 분리한다. 데이터 전처리 단계에서 0 제거가 가장 확실하다.

보조축을 쓰면 색상·범례가 자주 바뀐다.

계열이 이동될 때 서식 재적용이 일어난다. 서식 템플릿을 저장하거나 VBA로 축과 함께 서식을 재설정한다.

축 주 단위가 바뀌어 보기가 불편하다.

주 단위를 자동 해제하고 보고서 규격(예: 5, 10, 100, 10,000 등)으로 고정한다. 날짜 축은 MajorUnit을 일 단위로 지정한다.