본문 바로가기
■ 칼퇴를 위한 VBA : 사례/- VBA for 엑셀

VBA 코드를 활용한 엑셀 데이터 병합 및 분할 방법

by 포탈메이커 2023. 6. 26.

VBA 코드를 활용한 엑셀 데이터 병합 및 분할 방법

엑셀은 많은 양의 데이터를 처리하는 데에 있어서 유용한 도구입니다. 하지만 데이터의 양이 많아지면 처리하기가 어려워집니다. 이럴 때 VBA 코드를 활용하면 엑셀 데이터의 병합 및 분할이 쉬워집니다.

 

1. 엑셀 데이터의 병합

두 개의 엑셀 파일을 하나로 병합하고자 할 때, VBA 코드를 사용해보겠습니다.

Sub MergeExcelFiles()
    Dim CurrentWorkbook As Workbook
    Dim MergeWorkbooks As Workbook
    Dim CurrentSheet As Worksheet
    Dim MergeSheet As Worksheet

    ' Set the current Excel workbook as the reference
    Set CurrentWorkbook = ThisWorkbook
    Set CurrentSheet = CurrentWorkbook.Sheets(1)

    ' Open the workbook to be merged
    Set MergeWorkbooks = Workbooks.Open("file path")
    Set MergeSheet = MergeWorkbooks.Sheets(1)

    ' Copy data from the workbook to be merged
    MergeSheet.UsedRange.Copy

    ' Merge into the last row of the current workbook
    Dim LastRow As Long
    LastRow = CurrentSheet.Range("A" & Rows.Count).End(xlUp).Row
    CurrentSheet.Range("A" & LastRow + 1).PasteSpecial

    ' Close the workbook to be merged
    MergeWorkbooks.Close
End Sub

이 코드를 실행하면, 파일 경로에 있는 엑셀 파일의 데이터가 현재 열려있는 엑셀 파일의 마지막 행에 병합됩니다.


2. 엑셀 데이터의 분할

하나의 엑셀 파일에 있는 데이터를 지정한 행 수에 맞게 여러 개의 엑셀 파일로 분할하고자 할 때, VBA 코드를 사용해보겠습니다.

Sub SplitExcelFileByRows()
    ' Open the Excel file to be split
    Dim SourceWorkbook As Workbook
    Set SourceWorkbook = Workbooks.Open("file path")

    ' Specify the number of rows per split
    Dim RowsPerFile As Long
    RowsPerFile = 1000

    ' Specify the destination path for split files
    Dim DestinationPath As String
    DestinationPath = "destination path"

    Dim CurrentRow As Long
    CurrentRow = 2

    Dim FileIndex As Long
    FileIndex = 1

    Dim CurrentWorkbook As Workbook
    Dim CurrentSheet As Worksheet
    Dim DestinationWorkbook As Workbook
    Dim DestinationSheet As Worksheet

    ' Create split Excel files
    Do While CurrentRow <= SourceWorkbook.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
        ' Copy specified number of rows to create a new file
        Set CurrentWorkbook = ThisWorkbook
        Set CurrentSheet = SourceWorkbook.Sheets(1)
        CurrentSheet.Range("A" & CurrentRow & ":A" & CurrentRow + RowsPerFile - 1).Copy

        ' Set name for the split file
        Dim NewFileName As String
        NewFileName = "file name " & FileIndex & ".xlsx"

        ' Create a new split file
        Set DestinationWorkbook = Workbooks.Add
        Set DestinationSheet = DestinationWorkbook.Sheets(1)
        DestinationSheet.Range("A1").PasteSpecial

        ' Save the newly created file
        DestinationWorkbook.SaveAs DestinationPath & NewFileName

        ' Close the newly created file
        DestinationWorkbook.Close

        ' Move to the next set of rows for the next split file
        CurrentRow = CurrentRow + RowsPerFile
        FileIndex = FileIndex + 1
    Loop

    ' Close the source Excel file
    SourceWorkbook.Close
End Sub

이 코드를 실행하면, 파일 경로에 있는 엑셀 파일의 데이터가 저장 경로에 지정된 경로에 분할된 엑셀 파일로 저장됩니다. 각각의 파일은 파일 이름 1, 파일 이름 2, 파일 이름 3, ... 의 형태로 저장됩니다.


3. 마치며

VBA 코드를 활용하면 엑셀 데이터의 병합 및 분할이 쉬워집니다. 엑셀을 사용하는 모든 사용자들은 VBA 코드를 활용해 병합 및 분할 작업을 보다 효율적이고 간편하게 처리할 수 있습니다.



포스팅이 도움이 되셨다면 구독, 공감, 댓글 부탁드려요!

행복한 하루 되세요!