Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 개별 파일 시트 복사해서 하나의 파일에 통합하기

엑셀(Excel)/VBA
반응형

오늘 소개할 내용은 여러 개의 파일로 분리된 데이터들을 하나의 파일로 통합하는 방법입니다. 각각의 파일에 있는 시트 데이터를 불러와서 하나의 파일에 통합하는 소스입니다. 개별 파일을 차례대로 열어서 시트를 복사한 후 통합 파일에 붙여 넣을 것입니다.

 

  

▼ 먼저 개별 엑셀 파일을 선택하기 위한 파일 선택 다이얼로그 창을 띄워야 합니다. Application 객체의 GetOpenFilename 함수를 이용합니다. 여러 파일을 선택할 것이기 때문에 MultiSelect 를 True 로 세팅했습니다.

fileNo = Application.GetOpenFilename(Filefilter:="엑셀파일(*.xlsx*),*.xlsx*", MultiSelect:=True)

 


  

▼ 파일을 선택하고 창을 닫으면 파일 목록을 반환합니다. 파일 개수만큼 For 문을 돌면서 파일을 오픈한다.

 

For i = 1 To UBound(fileNo)

	Set ingFile = Workbooks.Open(Filename:=fileNo(i), ReadOnly:=True)

Next i

 

▼ 오픈한 파일의 첫 번째 시트에 데이터를 복사합니다. 복사할 영역은 Range 함수로 지정한다. 여기에 여러 시트를 복사하는 방법은 없습니다. 하나의 시트만 있다고 가정한 소스입니다.

 

With ingFile.Sheets(1)

	Range("B2:F7").Copy

End With

 

▼ 다음으로 복사한 개별 시트 데이터를 현재 작업 엑셀에 붙여 넣는 작업을 진행하겠습니다. 그러기 위해서 Sheets.Add 로 시트를 추가합니다. 시트 이름은 사용자가 ws.Name 속성으로 정의합니다.

 

'' 시트 추가
Set ws = ThisWorkbook.Sheets.Add
sSheetName = "AddSheet" & i
ws.Name = sSheetName

 

▼ 위에서 새로 만든 시트에 복사한 데이터를 붙여 넣습니다.

 

iRow = ws.Range("A1").CurrentRegion.Rows.Count
ws.Cells(iRow, 1).PasteSpecial

 

▼ 오픈한 파일을 닫고 다음 파일로 넘어가서 지금까지 한 작업을 반복합니다.

 

ingFile.Close

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 반복문 For Next 사용하기
엑셀 VBA 참조하는 여러가지 방법
엑셀 VBA 함수 만들어서 매크로와 연결하기
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기
셀 VBA 각종 함수 사용법과 샘플 소스 쉽게 얻는 방법

 

 

▼ 지금까지 설명한 전체 소스는 다음과 같습니다.

 

Sub sum_multi_sheet()

    Dim fileNo As Variant
    Dim i As Integer
    Dim ingFile As Workbook
    Dim ws As Worksheet
    Dim iRow As Integer
    Dim sSheetName As String

    fileNo = Application.GetOpenFilename(Filefilter:="엑셀파일(*.xlsx*),*.xlsx*", MultiSelect:=True)

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For i = 1 To UBound(fileNo)
        Set ingFile = Workbooks.Open(Filename:=fileNo(i), ReadOnly:=True)

        With ingFile.Sheets(1)
            '.Range(.Range("B2").End(xlDown), .Range("B2").End(xlToRight)).Copy
            .Range("B2:F7").Copy
        End With
		
        '' 시트 추가
        Set ws = ThisWorkbook.Sheets.Add
        sSheetName = "AddSheet" & i
        ws.Name = sSheetName

        iRow = ws.Range("A1").CurrentRegion.Rows.Count
        ws.Cells(iRow, 1).PasteSpecial

        ingFile.Close

    Next i
	
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

 

 

▼ 그림처럼 개발 파일에서 복사한 시트를 통합파일에 추가했습니다.

 

※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 반복문 For Next 사용하기
엑셀 VBA 참조하는 여러가지 방법
엑셀 VBA 함수 만들어서 매크로와 연결하기
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기
셀 VBA 각종 함수 사용법과 샘플 소스 쉽게 얻는 방법
반응형
Posted by 녹두장군1
,