엑셀 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 녹두장군

댓글을 달아 주세요

  1. 2016.02.16 17:54  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://mainia.tistory.com 녹두장군 2016.02.16 18:16 신고  댓글주소  수정/삭제

      네 들어가 있는 내용을 For 문 돌면서 쪼개서 원하는 시트에 넣을 수 있습니다. 시트의 원하는 셀에 데이터를 가공해서 넣을 수도 있습니다. 가능합니다.

  2. 안녕하세요. 2016.02.16 18:47  댓글주소  수정/삭제  댓글쓰기

    혹시 포스팅하실 예정이 있으신가요?

  3. 안녕하세요. 2016.02.17 09:34  댓글주소  수정/삭제  댓글쓰기

    너무 감사드립니다! 즐찾해두었어요^^ 많은 정보 배워가겠습니다~

  4. 2019.03.04 11:04  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://mainia.tistory.com 녹두장군 2019.03.05 07:35 신고  댓글주소  수정/삭제

      네 충분히 가능합니다. 데이터를 가져와서 비교한 후 결과값(0)을 입력할 수 있기 때문에 그 보다 더 복잡한 것도 쉽게 구현할 수 있습니다. 간단하게 샘플을 만들어서 gonhaha@naver.com 으로 보내 주시면 구현해 드리겠습니다.

  5. 2019.03.11 08:22  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  6. 방문자 2019.03.15 14:50  댓글주소  수정/삭제  댓글쓰기

    음, 리눅스 검색 하다가 들어왔는데 혹시 제가 아는 녹두장군의 식도락 운영하시는 분 맞나요?? 그냥 궁금해서 여쭤봅니다.
    맞다면 시스템과 맛집에 엄청난 일가견이 있으신 분이시군요 ㄷㄷ

  7. 2019.03.26 01:49  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  8. 안개 2019.05.27 23:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 회사에서 많은 양의 엑셀을 다루는데요
    엑셀 한파일에 200,300개 가량의 시트가 있은데 이중 다수의 시트를
    새파일로 이동복사하여 저장하고 싶습니다.
    워크시트를 하나씩 새파일로 분리하여 자장하는 건 찾았으나
    다수의 특정시트를 선택해 새 워크북으로 저장하는 방법은 없는것 같습니다.

    리스트박스에 현재파일의 워크시트명을 모두 불러오고 리스트박스에서
    다수의 특정시트명을 선택하여 저장을 누르고 파일이름을 입력하면 바로 새파일로
    저장 되는 방법이 있을까요?

    리스트박스에 다수의 시트명을 선택하여 새파일로 저장하고나면 선택했던 시트명은 리스트박스에서 삭제되면 좋겠습니다. 제가 어떤 시트를 새파일로 저장 안했는지 체크할수 있었으면 좋겠어요

    매번 200,300개가 넘어가는 시트를 몇개씩 이동복사해 새파일을 만드려니
    완전 노가다입니다. ㅠㅠ
    저좀 도와주세요.