엑셀 VBA 여러 시트 합치는 방법

엑셀(Excel)/VBA

엑셀 VBA 여러 시트 합치는 방법

 

환경: Microsoft Excel 2013

 

VBA 코드를 이용하면 자동으로 여러 시트에 있는 값을 지정한 시트로 합칠 수 있습니다. 여러 시트에 나누어져 있는 데이터가 많을 수록 도움이 됩니다. VBA 코드로 간단하게 합쳐 보세요. 이번 예제는 두, 세 번째 시트 값을 첫 번째에 복사해서 넣습니다. 

 

아래 그림은 샘플의 구조를 설명한 것입니다. 시트 구분을 위해 데이터를 1-1, 2-1, 3-1 형태로 집어 넣었습니다. 

엑셀 VBA 여러 시트 합치는 방법

 

자동으로 시트의 내용을 합치려면 VBA 소스를 실행할 컨트롤이 있어야 합니다. 함수 실행을 위해 버튼을 만듭니다. 버튼 컨트롤을 추가하려면 [개발 도구] > [삽입] 리본 메뉴를 클릭해야 합니다. 컨트롤 목록에서 버튼을 클릭한 후 시트에 드래그하면 버튼이 만들어 집니다.  

엑셀 VBA 여러 시트 합치는 방법

 

버튼 컨트롤을 추가했다면 매크로를 지정해야 합니다. 클릭 이벤트가 발생했을 때 실행할 소스가 들어 있는 함수가 되겠죠. 함수 명을 적고 [새로 만들기] 버튼을 클릭하시면 소스 코드 편집 창이 뜹니다.

엑셀 VBA 여러 시트 합치는 방법

 

VBA 편집창이 뜨면 아래 소스를 넣습니다. 버튼을 클릭하게 되면 실행될 소스 입니다. 소스는 Module1 에 들어가게 됩니다.

엑셀 VBA 여러 시트 합치는 방법

 

소스를 분석해 드리겠습니다. 첫 번째 시트 객체는 ws 입니다. 다른 시트의 값을 첫 번째 시트에 복사하기 위해서는 가장 마지막 행을 찾아야 합니다. 그것을 찾는 소스가 ws.Cells(Rows.Count, 1).End(xlUp) 입니다. 그리고 Offset(1, 0) 함수로 첫 번째 열 위치 개체를 가져옵니다. 다음은 For 문을 돌면서 두 번째 시트부터 복사해서 첫 번째 시트의 위치 개체인 rg 에 붙여 넣는 것이죠. 그것이 Sheets(i).UsedRange.Copy rg 입니다.

 

Sub Sheet_Click()

 

    Dim i As Integer

    Dim ws As Worksheet

    Dim rg As Range

    Set ws = Sheets(1)

   

    For i = 2 To Sheets.Count

        Set rg = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

        Sheets(i).UsedRange.Copy rg

    Next i

 

End Sub

 

버튼을 클릭해서 소스를 실행한 결과 입니다. 시트2, 시트3 에 있던 내용들이 전부 시트1 에 복사되었습니다. 이걸 응용하시면 다양하게 활용할 수 있습니다.

엑셀 VBA 여러 시트 합치는 방법

 

Posted by 녹두장군