본문 바로가기

엑셀 VBA를 이용한 여러 시트 데이터 합치기

ggqudrndl 2024. 11. 18.

엑셀을 사용하다 보면 여러 개의 시트에 분산된 데이터를 하나의 시트로 통합해야 할 때가 자주 있습니다. 예를 들어, 월별로 관리되는 데이터를 연간 데이터로 합치거나, 여러 부서에서 제공한 자료를 하나의 시트로 모아야 하는 경우 등이 있습니다. 이런 작업을 수작업으로 하게 되면 많은 시간이 소요되지만, 엑셀의 VBA(Visual Basic for Applications) 기능을 활용하면 간단하게 처리할 수 있습니다.

이번 포스팅에서는 엑셀 VBA를 이용해 여러 시트의 데이터를 하나의 시트로 합치는 방법에 대해 알아보겠습니다.

엑셀 VBA란?

VBA는 엑셀에서 제공하는 프로그래밍 언어로, 이를 통해 엑셀 내에서 자동화 작업을 수행할 수 있습니다. 반복적인 작업이나 대량의 데이터를 처리할 때 매우 유용하며, 매크로를 통해 복잡한 작업을 단순화할 수 있습니다.

VBA를 사용해 여러 시트 데이터 합치기

1. 기본적인 VBA 코드

여러 시트를 하나의 시트로 합치는 가장 기본적인 코드는 아래와 같습니다. 이 코드는 각 시트의 데이터를 순차적으로 복사하여 첫 번째 시트에 붙여넣습니다.

Sub CombineSheets()
    Dim ws As Worksheet
    Dim DestSheet As Worksheet

    ' 통합할 데이터를 붙일 새로운 시트 생성
    Set DestSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    DestSheet.Name = "통합된 시트"

    ' 모든 원본 시트의 데이터를 병합
    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> DestSheet.Name Then
            ws.UsedRange.Copy DestSheet.Cells(DestSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
        End If
    Next ws

    ' 열 너비 자동 조정
    DestSheet.Columns.AutoFit
End Sub

이 코드를 실행하면, 각 시트의 데이터가 "통합된 시트"라는 새로운 시트에 순차적으로 복사됩니다. 이 방법은 각 시트의 모든 데이터를 그대로 복사해 붙여넣기 때문에 간단하면서도 효율적입니다.

2. VBA 코드 실행 방법

  1. 엑셀 파일 열기: 엑셀 파일을 엽니다.
  2. VBA 편집기 열기: Alt + F11 키를 눌러 VBA 편집기를 엽니다.
  3. 모듈 추가: 상단 메뉴에서 삽입모듈을 선택하여 새 모듈을 추가합니다.
  4. 코드 입력: 위에 제공된 코드를 복사하여 새 모듈에 붙여넣습니다.
  5. 매크로 실행: F5 키를 눌러 매크로를 실행합니다.

3. 다른 방식의 데이터 합치기

위 코드는 기본적으로 각 시트의 모든 데이터를 순차적으로 복사해 하나의 시트에 붙여넣습니다. 하지만 상황에 따라서는 조금 더 세부적인 조건을 설정하거나 다른 방식으로 데이터를 합쳐야 할 수도 있습니다.

(1) 첫 번째 행을 제외하고 합치기

각 시트에서 첫 번째 행은 보통 헤더 정보일 경우가 많습니다. 이럴 때는 첫 번째 행을 제외하고 나머지 데이터를 합치는 것이 필요합니다. 아래 코드는 각 시트에서 첫 번째 행을 제외하고 데이터를 병합하는 방법입니다.

Sub CombineSheetsWithoutHeaders()
    Dim ws As Worksheet
    Dim DestSheet As Worksheet

    ' 통합할 데이터를 붙일 새로운 시트 생성
    Set DestSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    DestSheet.Name = "통합된 시트"

    ' 첫 번째 시트를 기준으로 헤더 복사
    Sheets(1).Rows(1).Copy Destination:=DestSheet.Rows(1)

    ' 모든 원본 시트를 순회하며 첫 번째 행 제외하고 복사
    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> DestSheet.Name Then
            ws.Rows("2:" & ws.Rows.Count).Copy Destination:=DestSheet.Cells(DestSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
        End If
    Next ws

    ' 열 너비 자동 조정
    DestSheet.Columns.AutoFit
End Sub

이 코드는 각 시트에서 첫 번째 행은 제외하고 나머지 데이터만 복사하여 하나의 통합된 시트에 붙여넣습니다.

(2) 특정 범위만 합치기

모든 셀을 복사하는 대신 특정 범위만 복사하고 싶다면 아래와 같은 방식으로 코드를 수정할 수 있습니다.

Sub CombineSpecificRange()
    Dim ws As Worksheet
    Dim DestSheet As Worksheet

    ' 통합할 데이터를 붙일 새로운 시트 생성
    Set DestSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    DestSheet.Name = "통합된 시트"

    ' 특정 범위(A2:D100)를 병합
    For Each ws In ThisWorkbook.Sheets
        If ws.Name <> DestSheet.Name Then
            ws.Range("A2:D100").Copy Destination:=DestSheet.Cells(DestSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
        End If
    Next ws

    ' 열 너비 자동 조정
    DestSheet.Columns.AutoFit
End Sub

이 코드는 각 워크시트에서 A2:D100 범위만 선택하여 통합된 시트에 복사합니다. 필요에 따라 원하는 범위를 지정하여 사용할 수 있습니다.

4. VBA 코드 활용 팁

  • 데이터 양이 많을 때: 여러 개의 워크시트를 한 번에 병합할 경우 데이터 양이 많아질 수 있습니다. 이때는 처리 속도를 고려해 불필요한 데이터는 제외하거나 필요한 데이터만 선택적으로 병합하는 것이 좋습니다.
  • 자동화 버튼 추가: 자주 사용하는 매크로라면 엑셀 리본 메뉴에 버튼을 추가하여 클릭 한 번으로 매크로를 실행할 수 있도록 설정할 수 있습니다.
  • 백업 파일 생성: VBA 매크로 실행 전에 원본 파일을 백업해 두는 것이 좋습니다. 잘못된 코드나 실수로 인해 원본 데이터가 손상될 가능성이 있기 때문입니다.

결론

엑셀 VBA를 사용하면 여러 개의 워크시트를 빠르고 효율적으로 하나의 워크시트로 병합할 수 있습니다. 특히 대량의 데이터를 다룰 때나 반복적인 작업이 필요할 때 매우 유용합니다. 이번 포스팅에서 소개한 다양한 방법들을 활용해 업무 효율성을 높여보시길 바랍니다.


자주 묻는 질문 (FAQ)

Q1: VBA 매크로 실행 중 오류가 발생하면 어떻게 해야 하나요?

A: 오류가 발생하면 On Error Resume Next 구문을 추가하여 오류 발생시에도 계속 진행되도록 설정할 수 있습니다. 그러나 근본적인 문제 해결을 위해서는 오류 메시지를 확인하고 해당 부분을 수정하는 것이 좋습니다.

Q2: 여러 개의 파일에서 데이터를 병합할 수 있나요?

A: 네, 가능합니다. 여러 개의 파일에서 데이터를 병합하려면 파일 경로를 지정하고 각 파일을 열어 데이터를 가져오는 추가적인 코드가 필요합니다.

Q3: 특정 열만 병합하고 싶으면 어떻게 해야 하나요?

A: 특정 열만 병합하려면 ws.Range("A:A")와 같이 원하는 열 범위를 지정하여 해당 열만 복사하도록 코드를 수정하면 됩니다.

댓글