VBA 워크시트 복사하기
In this Article
이 튜토리얼에서는 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)
이제 새로 만든 시트가 통합 문서의 첫 번째 시트가 됩니다.이제 새로 만든 시트가 통합 문서의 첫 번째 시트가 됩니다.
마지막 시트 다음에 시트 복사하기
After 속성을 사용하여 다른 시트 다음에 시트를 붙여넣도록 VBA에 지시합니다. 여기에서는 통합 문서의 마지막 시트 뒤에 시트를 복사하여 붙여 넣습니다:
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
통합 문서에 있는 시트 수를 계산하기 위해 Sheets.Count를 사용했음을 알 수 있습니다.
시트 이동하기
유사한 구문을 사용하여 통합 문서 내에서 시트를 이동할 수도 있습니다. 아래 코드는 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