📌 여러 시트에 흩어진 데이터를 하나로 통합하기 위해
엑셀을 사용하다 보면 하나의 파일에 여러 시트가 존재하고, 각 시트마다 같은 구조(예: 동일한 머리글)로 데이터가 분산되어 있는 경우가 많습니다.
예를 들어:
- 부서별 보고서(영업부, 마케팅부, 인사부 등)
- 월별 실적(1월, 2월, 3월…)
- 지점별 매출 데이터
이런 경우 하나의 통합된 시트를 만들어야 전체 데이터를 한눈에 파악하거나 분석(Pivot Table, 차트 등)할 수 있습니다.
🔧 이 코드의 주요 기능
- 기존 "통합" 시트 삭제 후 새로 생성
- 매번 실행할 때마다 새로운 시트로 갱신되어 불필요한 중복 제거
- 사용자에게 머리글 행 수를 직접 입력받음
- 유연한 구조: 표의 머리글이 1행일 수도, 2행 이상일 수도 있기 때문
- 모든 시트에서 머리글을 제외한 데이터만 추출하여 한 시트에 이어붙임
- 중복 없이 깔끔하게 통합 가능
- 열 너비 자동 맞춤
- 가독성 향상
Sub MergeSheetsToNewSummary() Dim headerRowCount As Variant Dim summarySheet As Worksheet Dim currentSheet As Worksheet Dim pasteRow As Long Application.ScreenUpdating = False Application.DisplayAlerts = False ' 기존 "통합" 시트가 있다면 삭제 On Error Resume Next Sheets("통합").Delete On Error GoTo 0 Application.DisplayAlerts = True ' 사용자에게 머리글 행 개수 입력 받기 InputHeader: headerRowCount = Application.InputBox( _ Prompt:="※ 표 머리글의 마지막 행 번호를 입력하세요!" & vbCrLf & _ "예시: 1행만 있으면 1, 2행까지 있으면 2", _ Title:="머리글 행 번호", Default:=1) ' 입력값 검증 If Not IsNumeric(headerRowCount) Or headerRowCount < 1 Then If TypeName(headerRowCount) = "Boolean" Then Exit Sub ' 취소 시 종료 MsgBox "숫자를 입력하세요!", vbExclamation, "입력 오류" GoTo InputHeader End If ' 새 통합 시트 생성 Set summarySheet = Worksheets.Add(Before:=Sheets(1)) summarySheet.Name = "통합" ' 두 번째 시트가 존재하면, 그 시트의 머리글을 복사 If Worksheets.Count > 1 Then Worksheets(2).Rows("1:" & headerRowCount).Copy Destination:=summarySheet.Range("A1") Else MsgBox "통합할 시트가 없습니다.", vbExclamation, "오류" Exit Sub End If ' 각 시트의 데이터를 통합 시트에 복사 For Each currentSheet In Worksheets If currentSheet.Index > 1 And currentSheet.Visible Then ' 현재 통합 시트의 마지막 행 위치 찾기 pasteRow = summarySheet.Cells(Rows.Count, 1).End(xlUp).Row + 1 ' 머리글을 제외한 데이터 복사 currentSheet.UsedRange.Offset(headerRowCount).Copy Destination:=summarySheet.Cells(pasteRow, 1) End If Next currentSheet ' 열 너비 자동 맞춤 summarySheet.UsedRange.EntireColumn.AutoFit Application.ScreenUpdating = True MsgBox "모든 시트의 데이터가 성공적으로 통합되었습니다!", vbInformation, "작업 완료" End Sub |