본문 바로가기
엑셀/VBA

[VBA] 외부 엑셀 파일의 시트를 현재 파일로 복사하고 시트 이름 바꾸기

by 큐브빌드 2025. 4. 19.
반응형

 

 

엑셀 자동화 작업을 하다 보면 외부 엑셀 파일의 특정 시트를 현재 작업 중인 파일에 복사하고, 그 시트의 이름까지 내가 원하는 이름으로 바꾸고 싶을 때가 많습니다. 오늘은 VBA를 이용해서 이 작업을 간단하게 처리하는 방법을 소개합니다.


 

✅ 사용 시나리오

  • 외부 엑셀 파일에 템플릿 시트가 있고, 이를 여러 엑셀 파일에 복사해 활용해야 할 때
  • 팀원에게 받은 데이터 시트를 내 워크북으로 옮길 때
  • 외부에서 복사해 온 시트를 구분하기 쉽게 이름을 지정하고 싶을 때

💻 VBA 코드 예제

Sub CopySheetWithUniqueName()
    Dim sourcePath As String
    Dim sourceWb As Workbook
    Dim sourceWs As Worksheet
    Dim targetWs As Worksheet
    Dim newSheetName As String
    Dim suffix As Integer
    
    ' 복사할 파일 경로
    sourcePath = "C:\Users\YourName\Desktop\SourceFile.xlsx"
    
    ' 외부 파일 열기
    Set sourceWb = Workbooks.Open(sourcePath)
    Set sourceWs = sourceWb.Sheets("Sheet1")
    
    ' 시트 복사 (현재 워크북 끝에 추가)
    sourceWs.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Set targetWs = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    
    ' 기본 시트 이름
    newSheetName = "복사된시트"
    suffix = 1
    
    ' 중복 확인 및 고유한 이름 만들기
    Do While SheetNameExists(newSheetName)
        newSheetName = "복사된시트 (" & suffix & ")"
        suffix = suffix + 1
    Loop
    
    targetWs.Name = newSheetName
    
    ' 외부 파일 닫기
    sourceWb.Close SaveChanges:=False
End Sub

' 시트 이름이 존재하는지 확인하는 함수
Function SheetNameExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    SheetNameExists = False
    For Each ws In ThisWorkbook.Sheets
        If ws.Name = sheetName Then
            SheetNameExists = True
            Exit Function
        End If
    Next ws
End Function

🔎 주요 포인트 정리

항목 설명
Workbooks.Open 외부 엑셀 파일 열기
sourceWs.Copy 시트 복사 작업 수행
ThisWorkbook.Sheets.Count 현재 파일의 마지막 시트 위치 지정
targetWs.Name = "복사된시트" 새로 복사된 시트 이름 변경
On Error Resume Next 이름 중복 등의 오류 무시 처리

📌 주의사항

  • 시트 이름이 중복되면 오류가 발생하므로 사전에 이름 확인 또는 예외 처리 코드를 추가하는 것이 좋습니다. (위 예시 코드에는 Function으로 포함되어 있습니다.)
  • 외부 파일 경로는 항상 절대 경로로 입력하거나, Application.GetOpenFilename으로 사용자 선택을 받을 수 있습니다.
반응형

댓글