반응형
엑셀 자동화 작업을 하다 보면 외부 엑셀 파일의 특정 시트를 현재 작업 중인 파일에 복사하고, 그 시트의 이름까지 내가 원하는 이름으로 바꾸고 싶을 때가 많습니다. 오늘은 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으로 사용자 선택을 받을 수 있습니다.
반응형
'엑셀 > VBA' 카테고리의 다른 글
[VBA + Selenium] 웹페이지를 이미지로 저장하는 방법! TakeScreenshot 사용법 (0) | 2025.04.20 |
---|---|
[VBA] TXT(텍스트) 파일을 읽고 다양한 방식으로 활용하는 법 (0) | 2025.04.20 |
[VBA] 이상한 문자(?)의 정체와 제거 방법 (0) | 2025.04.19 |
Excel VBA로 XML 유효성 검사 + XML 타입 비교까지 정리! (0) | 2025.04.15 |
CONCAT vs CONCATENATE 함수 비교와 구버전 Excel에서 대체하는 방법 (VBA 활용) (0) | 2025.04.13 |
댓글