Worksheet 개체

Copy 메서드

노만e 2025. 3. 13. 05:07

엑셀 VBA에서 Sheets.Copy 메서드는 특정 시트를 복사하는 기능을 제공합니다.

즉, 현재 워크북 내에서 또는 새로운 워크북으로 시트를 복사할 때 사용됩니다.


1. 기본 문법

Sheets("시트이름").Copy Before:=Sheets("기준시트")
Sheets("시트이름").Copy After:=Sheets("기준시트")
  • Before → 지정한 시트 앞에 복사본을 삽입
  • After → 지정한 시트 뒤에 복사본을 삽입
  • Sheets("시트이름").Copy → 복사한 시트를 새로운 워크북에 생성

📌 Before 또는 After를 생략하면 복사한 시트가 새 워크북으로 이동됨

📌 복사된 시트의 이름은 원본(2), 원본(3)처럼 자동으로 붙음

📌 워크북 간 시트 복사도 가능


2. 현재 워크북에서 특정 시트 복사

Sub 특정시트_복사()
Sheets("매출현황").Copy After:=Sheets("재무보고")
End Sub

📌 "매출현황" 시트를 "재무보고" 시트 뒤에 복사


3. 첫 번째 시트 앞에 복사

Sub 첫번째시트_앞에복사()
Sheets("Sheet1").Copy Before:=Sheets(1)
End Sub

📌 "Sheet1"을 첫 번째 시트 앞에 복사


4. 마지막 시트 뒤에 복사

Sub 마지막시트_뒤에복사()
Sheets("데이터").Copy After:=Sheets(Sheets.Count)
End Sub

📌 "데이터" 시트를 마지막 시트 뒤에 복사


5. 복사된 시트 이름 변경

Sub 시트복사_이름변경()
Dim ws As Worksheet
Sheets("원본").Copy After:=Sheets(Sheets.Count)
Set ws = ActiveSheet
ws.Name = "복사본"
End Sub

📌 "원본" 시트를 복사한 후 복사된 시트의 이름을 "복사본"으로 변경


6. 새 워크북에 시트 복사

Sub 새워크북으로_복사()
Sheets("Sheet1").Copy
End Sub

📌 "Sheet1"을 새로운 엑셀 파일(워크북)로 복사하여 생성


7. 새 워크북으로 시트 복사 후 저장

Sub 새파일에_시트복사_저장()
Dim wb As Workbook
Sheets("Sheet1").Copy
Set wb = ActiveWorkbook
wb.SaveAs "C:\Users\Public\새파일.xlsx"
wb.Close
End Sub

📌 "Sheet1"을 새 엑셀 파일로 복사 후 "C:\Users\Public\새파일.xlsx"로 저장


8. 현재 워크북에서 모든 시트 복사

Sub 모든시트_복사()
Dim ws As Worksheet
For Each ws In Sheets
ws.Copy After:=Sheets(Sheets.Count)
Next ws
End Sub

📌 모든 시트를 현재 워크북 내에서 복사 (각 시트를 마지막에 추가)


9. 현재 시트를 여러 번 복사

Sub 현재시트_여러번복사()
Dim i As Integer
For i = 1 To 3 ' 3번 복사
ActiveSheet.Copy After:=Sheets(Sheets.Count)
Next i
End Sub

📌 현재 선택된 시트를 3번 복사하여 마지막에 추가


10. 특정 시트 복사 후 특정 위치로 이동

Sub 특정시트_복사_이동()
Sheets("보고서").Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Move Before:=Sheets(1)
End Sub

📌 "보고서" 시트를 복사한 후 첫 번째 시트 앞으로 이동


11. 다른 워크북으로 시트 복사

Sub 다른워크북으로_복사()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\Public\타겟.xlsx") ' 대상 파일 열기
Sheets("Sheet1").Copy After:=wb.Sheets(wb.Sheets.Count) ' 마지막 시트 뒤에 복사
wb.Save
wb.Close
End Sub

📌 현재 워크북의 "Sheet1"을 "타겟.xlsx"의 마지막 시트 뒤에 복사


12. 복사한 시트의 셀 서식 유지

Sub 시트복사_서식유지()
Dim ws As Worksheet
Sheets("원본").Copy After:=Sheets(Sheets.Count)
Set ws = ActiveSheet
ws.Cells.Copy
ws.Cells.PasteSpecial Paste:=xlPasteFormats ' 서식만 붙여넣기
Application.CutCopyMode = False
End Sub

📌 "원본" 시트를 복사한 후 서식만 다시 붙여넣기


13. 특정 단어가 포함된 시트 복사

Sub 특정단어포함_시트복사()
Dim ws As Worksheet
For Each ws In Sheets
If InStr(ws.Name, "보고서") > 0 Then
ws.Copy After:=Sheets(Sheets.Count)
End If
Next ws
End Sub

📌 "보고서"라는 단어가 포함된 시트만 복사하여 마지막 시트 뒤에 추가


14. 워크북 내 특정 시트 개수 이상이면 복사 제한

Sub 시트개수제한_복사()
If Sheets.Count < 10 Then
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
Else
MsgBox "시트 개수가 10개 이상이므로 복사할 수 없습니다.", vbExclamation
End If
End Sub

📌 워크북 내 시트가 10개 이상이면 복사하지 않도록 설정


15. 사용자가 입력한 시트 이름 복사 (InputBox 활용)

Sub 사용자입력_시트복사()
Dim 시트이름 As String
시트이름 = InputBox("복사할 시트 이름을 입력하세요:", "시트 복사")

If 시트이름 <> "" Then
On Error Resume Next
Sheets(시트이름).Copy After:=Sheets(Sheets.Count)
If Err.Number <> 0 Then
MsgBox "해당 시트가 존재하지 않습니다.", vbExclamation
End If
On Error GoTo 0
Else
MsgBox "시트 이름을 입력하지 않았습니다.", vbExclamation
End If
End Sub

📌 사용자가 입력한 시트를 복사, 존재하지 않는 경우 오류 메시지 출력


📝 정리

기능
VBA 코드
특정 시트 복사
Sheets("Sheet1").Copy After:=Sheets(Sheets.Count)
첫 번째 시트 앞에 복사
Sheets("Sheet1").Copy Before:=Sheets(1)
마지막 시트 뒤에 복사
Sheets("데이터").Copy After:=Sheets(Sheets.Count)
새 워크북으로 복사
Sheets("Sheet1").Copy
새 워크북으로 복사 후 저장
wb.SaveAs "C:\파일.xlsx"
모든 시트 복사
For Each ws In Sheets: ws.Copy After:=Sheets(Sheets.Count): Next ws
현재 시트를 여러 번 복사
For i = 1 To 3: ActiveSheet.Copy After:=Sheets(Sheets.Count): Next i
다른 워크북으로 복사
Workbooks("타겟.xlsx").Sheets("Sheet1").Copy After:=wb.Sheets(wb.Sheets.Count)
사용자 입력 시트 복사
Sheets(InputBox("시트 이름?")).Copy

🔥 VBA의 Sheets.Copy를 활용하면 시트를 동적으로 복사하고 관리할 수 있습니다!🚀