DATA

모든 시트를 하나로 통합

노만e 2025. 3. 24. 07:21

📌 여러 시트에 흩어진 데이터를 하나로 통합하기 위해

엑셀을 사용하다 보면 하나의 파일에 여러 시트가 존재하고, 각 시트마다 같은 구조(예: 동일한 머리글)로 데이터가 분산되어 있는 경우가 많습니다.
예를 들어:

  • 부서별 보고서(영업부, 마케팅부, 인사부 등)
  • 월별 실적(1월, 2월, 3월…)
  • 지점별 매출 데이터

이런 경우 하나의 통합된 시트를 만들어야 전체 데이터를 한눈에 파악하거나 분석(Pivot Table, 차트 등)할 수 있습니다.

 

🔧 이 코드의 주요 기능

  1. 기존 "통합" 시트 삭제 후 새로 생성
    • 매번 실행할 때마다 새로운 시트로 갱신되어 불필요한 중복 제거
  2. 사용자에게 머리글 행 수를 직접 입력받음
    • 유연한 구조: 표의 머리글이 1행일 수도, 2행 이상일 수도 있기 때문
  3. 모든 시트에서 머리글을 제외한 데이터만 추출하여 한 시트에 이어붙임
    • 중복 없이 깔끔하게 통합 가능
  4. 열 너비 자동 맞춤
    • 가독성 향상
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

 

 

 

MergeSheetsToNewSummary.xlsm
0.03MB