#2 엑셀 오류 가이드

엑셀에서 부분합(Subtotal) 기능 사용 후 원본 데이터 정렬 오류 해결

이세계의엑셀 2025. 4. 18. 22:45
반응형

Meta Description: 엑셀에서 부분합(Subtotal) 기능 사용 후 원본 데이터 정렬 오류 해결 방법을 단계별로 소개합니다. 오류 원인 분석부터 VBA 자동화 스크립트까지 한 번에 정리해 효율적인 데이터 관리와 보고서 작성에 도움을 드립니다.

첫 문단
엑셀에서 엑셀에서 부분합(Subtotal) 기능 사용 후 원본 데이터 정렬 오류 해결 문제가 자주 발생합니다. 부분합으로 그룹화한 뒤 정렬을 시도하면 행이 뒤섞이거나 요약열이 잘못 계산되는 현상이 나타나 업무 흐름을 방해합니다.


부분합과 정렬 오류가 생기는 원리

부분합(데이터 ▶ 부분합)을 설정하면 엑셀은 내부적으로 OUTLINE 레벨(윤곽)​과 SUBTOTAL() 함수로 각 그룹을 감싸며, 숨김 행​과 요약 행​이 하나의 패키지처럼 고정됩니다.

  • 정렬 명령은 표시된 셀만 정렬하려 하지만, 숨김 행까지 끌어당겨 버려 레코드가 꼬입니다.
  • SUBTOTAL() 함수가 참조 범위를 잃어 “#REF!”를 뿜어내거나, 잘못된 범위를 합산해 총계가 달라집니다.
현상 주요 징후 원인
행 섞임 동일 ID 끼리 떨어짐 숨김 행과 함께 이동
합계 오류 SUBTOTAL → #REF! 참조 영역 변형
필터 오류 일부 행 제외 내부 Outline 간섭

반응형

정렬 오류 진단 체크리스트

  1. 실제 숨김 행 수 확인 → Ctrl + Shift + 9로 모든 행 표시
  2. Outline 레벨 해제 여부 → 데이터 ▶ 개요 ▶ 그룹 해제
  3. SUBTOTAL 함수 에 #REF! 포함 여부 → F2로 직접 확인
  4. 정렬 기준 이 같은 데이터 형식인지(텍스트·숫자 혼합 여부)

팁: 오류가 반복되면 원본 시트를 복제해 테스트해 두세요.


실전 해결 방법 — 수동 접근

단계 1: 부분합 제거 뒤 정렬

  1. 원본 범위 선택
  2. 데이터 ▶ 부분합 ▶ 모두 제거 클릭 → Outline·SUBTOTAL 행 전부 삭제
  3. 이제 정렬(데이터 ▶ 정렬) 실행 → 행 순서가 안정적으로 변경

단계 2: 정렬 후 다시 부분합

  1. 정렬이 끝난 범위 유지
  2. 데이터 ▶ 부분합 → 그룹 필드·계산 함수·합계 대상 열 지정
  3. 확인 후 그룹 레벨(1 – 3)을 이용해 원하는 상세/요약 보기 전환

VBA로 자동화해 한 번에 해결하기

자주 반복된다면 매번 메뉴를 누르느라 시간 낭비가 큽니다. 다음 VBA 매크로를 개발 탭 ▶ Visual Basic 에 삽입하고 실행하면 “제거→정렬→재부분합”이 한 번에 완료됩니다.

Sub FixSubtotalSort()
    Const KEY_FIELD As String = "A"           '정렬 기준 열
    Const FUNC_NUM As Integer = 9             '합계=9, 평균=1 등
    Dim rng As Range, ws As Worksheet

    Set ws = ActiveSheet
    Set rng = ws.UsedRange

    Application.ScreenUpdating = False

    '1) 기존 부분합 제거
    On Error Resume Next
    ws.Outline.ShowLevels RowLevels:=8        '모든 숨김 행 표시
    ws.Cells.RemoveSubtotal                   '부분합 삭제
    On Error GoTo 0

    '2) 데이터 정렬
    rng.Sort Key1:=ws.Columns(KEY_FIELD), _
             Order1:=xlAscending, Header:=xlYes

    '3) 부분합 재적용
    rng.Subtotal GroupBy:=ws.Columns(KEY_FIELD).Column, _
                 Function:=FUNC_NUM, TotalList:=Array(2, 3), _
                 Replace:=True, PageBreaks:=False, SummaryBelowData:=True

    Application.ScreenUpdating = True
    MsgBox "부분합 재적용과 정렬이 완료되었습니다!", vbInformation
End Sub

사용법

  • KEY_FIELD에 “B” 처럼 원하는 열 문자 입력
  • FUNC_NUM이 9면 합계, 1이면 평균, 2면 개수
  • TotalList 배열에 합계가 필요한 열 인덱스를 추가

오류를 방지하기 위한 데이터 관리 팁

  • 원본 유지: 가급적 “_RAW” 시트를 두고, 작업은 “_WORK” 시트에서 진행
  • 테이블 기능: Ctrl + T로 테이블로 지정하면 구조가 고정돼 정렬이 안전
  • 계산 열 분리: 가공용 열(예: 월별 요약)을 원본 오른쪽에 두어 범위 충돌 최소화
  • 매일 사본 저장: 자동 백업 매크로로 D-1 파일 보관 → 돌이킬 수 있음

요약 및 추가 팁

이번 글에서는 엑셀에서 부분합(Subtotal) 기능 사용 후 원본 데이터 정렬 오류 해결 원인을 진단하고, 메뉴 조작·VBA 자동화 두 가지 솔루션으로 문제를 해결했습니다. 앞으로는 테이블 기능과 백업 매크로를 병행하면 같은 오류를 크게 줄일 수 있습니다. 꾸준히 연습해 엑셀에서 부분합(Subtotal) 기능 사용 후 원본 데이터 정렬 오류 해결 경험을 쌓아 보세요!

반응형