VBA 워크시트 복사하기

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 3월 8, 2023

이 튜토리얼에서는 VBA를 사용하여 시트 또는 워크시트를 복사하는 방법에 대해 설명합니다.

워크시트를 새 통합 문서로 복사하기

워크시트새 통합 문서로 복사하려면 다음과 같이 하세요:

Sheets("Sheet1").Copy

활성 시트를 새 통합 문서로 복사하기

ActiveSheet를 새 통합 문서로 복사하려면 다음과 같이 하세요:

ActiveSheet.Copy

여러 시트를 새 통합 문서로 복사하기

여러 시트를 새 통합 문서로 복사하려면 다음과 같이 하세요:

ActiveWindow.SelectedSheets.Copy

같은 통합 문서 내에서 시트 복사하기

가장 간단한 시트 복사 예제인 시트를 새 통합 문서로 복사하는 것부터 시작했습니다. 아래 예제에서는 동일한 통합 문서 내에서 시트를 복사하는 방법을 보여드리겠습니다. 통합 문서 내에서 시트를 복사할 때는 위치를 지정해야 합니다. 위치를 지정하려면 다른 워크시트 이전 또는 이후에 워크시트를 이동하도록 VBA에 알려줘야 합니다.

다른 시트 앞에 시트 복사하기

아래 코드를 실행하면 Sheet2 앞에 Sheet1을 복사하여 붙여 넣도록 지정합니다.

Sheets("Sheet1").Copy Before:=Sheets("Sheet2")

첫 번째 시트 앞에 시트 복사하기

시트 이름을 지정하는 대신 시트 위치를 지정할 수도 있습니다. 여기에서는 통합 문서의 첫 번째 시트 앞에 시트를 복사하여 붙여 넣습니다.

Sheets("Sheet1").Copy Before:=Sheets(1)

이제 새로 만든 시트가 통합 문서의 첫 번째 시트가 됩니다.이제 새로 만든 시트가 통합 문서의 첫 번째 시트가 됩니다.
vba copy sheet before first sheet

마지막 시트 다음에 시트 복사하기

After 속성을 사용하여 다른 시트 다음에 시트를 붙여넣도록 VBA에 지시합니다. 여기에서는 통합 문서의 마지막 시트 뒤에 시트를 복사하여 붙여 넣습니다:

Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)

통합 문서에 있는 시트 수를 계산하기 위해 Sheets.Count를 사용했음을 알 수 있습니다.

vba copy after last sheet

시트 이동하기

유사한 구문을 사용하여 통합 문서 내에서 시트를 이동할 수도 있습니다. 아래 코드는 Sheet1을 통합 문서의 끝으로 이동합니다:

Sheets("Sheet1").Move After:=Sheets(Sheets.Count)

시트를 복사하고 이름을 새로 지정하기

시트를 복사하여 붙여 넣으면 새로 만든 시트가 활성시트가 됩니다. 따라서 새 시트의 이름을 바꾸려면 ActiveSheet.Name을 사용하면 됩니다:

Sub CopySheetRename1()

Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "LastSheet"

End Sub

 

시트 이름이 이미 존재하는 경우 위의 코드를 실행하면 오류가 발생합니다. “On Error Resume Next“를 사용하면 시트 이름 지정을 무시하고 나머지 절차를 계속 진행하도록 VBA에 지시할 수 있습니다:

Sub CopySheetRename2()

    Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = "LastSheet"
    On Error GoTo 0

End Sub

 

또는 RangeExists 함수를 사용하여 시트 복사 코드를 실행하기 전에 시트 이름이 이미 존재하는지 테스트합니다:

Sub CopySheetRename3()

    If RangeExists("LastSheet") Then
        MsgBox "동일한 이름을 가진 시트가 존재합니다."
    Else
        Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "LastSheet"
    End If

End Sub

Function RangeExists(WhatSheet As String, Optional ByVal WhatRange As String = "A1") As Boolean
    Dim test As Range
    On Error Resume Next
    Set test = ActiveWorkbook.Sheets(WhatSheet).Range(WhatRange)
    RangeExists = Err.Number = 0
    On Error GoTo 0
End Function

시트를 복사하고 셀 값으로 이름 지정

시트를 복사하고 셀 값을 기반으로 시트 이름을 지정할 수도 있습니다. 이 코드는 A1의 셀 값을 기반으로 워크시트의 이름을 지정합니다.

Sub CopySheetRenameFromCell()

    Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
    On Error Resume Next
    ActiveSheet.Name = Range("A1").Value
    On Error GoTo 0

End Sub

워크시트를 다른 통합 문서로 복사하기

지금까지는 통합 문서 내에서 시트를 복사하는 코드를 소개해 드렸습니다. 이제 시트를 복사하여 다른 통합 문서에 붙여넣는 예제를 살펴보겠습니다. 이 코드는 시트를 다른 통합 문서의 시작 부분에 복사합니다:

Sheets("Sheet1").Copy Before:=Workbooks("예제.xlsm").Sheets(1)

이 코드는 시트를 다른 통합 문서의 끝 부분에 복사합니다:

Sheets("Sheet1").Copy After:=Workbooks("예제.xlsm").Sheets(Workbooks("Example.xlsm").Sheets.Count)

마지막 워크시트를 가져오기 위해 1을 Workbooks(“Example.xlsm”).Sheets.Count로 바꾼 것에 주목하세요

워크시트를 닫힌 통합 문서로 복사하기

워크시트를 닫힌 통합 문서로 복사하고 싶을 수도 있습니다. 이 코드는 닫힌 통합 문서를 열어 시트를 복사할 수 있도록 합니다.

Sub CopySheetToClosedWB()
Application.ScreenUpdating = False

    Set closedBook = Workbooks.Open("D:\Dropbox\excel\articles\예제.xlsm")
    Sheets("Sheet1").Copy Before:=closedBook.Sheets(1)
    closedBook.Close SaveChanges:=True

Application.ScreenUpdating = True
End Sub

다른 통합 문서를 열지 않고 시트 복사하기

반대로, 아래 코드는 복사할 통합 문서를 수동으로 열지 않고 닫힌 통합 문서에서 워크시트를 복사합니다.

Sub CopySheetFromClosedWB()
Application.ScreenUpdating = False

    Set closedBook = Workbooks.Open("D:\Dropbox\excel\articles\예제.xlsm")
    closedBook.Sheets("Sheet1").Copy Before:=ThisWorkbook.Sheets(1)
    closedBook.Close SaveChanges:=False

Application.ScreenUpdating = True
End Sub

이 두 예제에서는 프로세스가 백그라운드에서 실행되도록 ScreenUpdating을 비활성화했습니다.

Excel 시트 여러 번 복제하기

Loop를 사용하여 Excel 시트를 여러 번 복제할 수도 있습니다.

Sub CopySheetMultipleTimes()
Dim n As Integer
Dim i As Integer
On Error Resume Next

    n = InputBox("몇개의 사본을 만드시겠습니까?")

    If n > 0 Then
        For i = 1 To n
            ActiveSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count)
        Next
    End If

End Sub

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기