저는 엑셀로 데이터를 관리하다가 시트를 복사할 때마다 이름을 수동으로 바꾸는 일이 반복되며 비효율적이라는 것을 체감했습니다. 특히 보고서처럼 순번이 중요한 문서 형식에서 실수가 잦아졌고, 이를 자동화하고 싶었습니다. 다행히 VBA(매크로)를 활용하면 시트를 복사할 때 이름이 자동으로 증가하도록 만드는 기능을 손쉽게 구현할 수 있습니다. 아래 내용은 제가 실제로 적용해 본 두 가지 일반적인 증가 형식에 대해 정리한 경험담과 실무에 바로 쓸 수 있는 방법입니다.

VBA를 이용한 자동 증가 아이디어
엑셀 기본 기능으로는 시트 복사 시 이름 자동 증가를 바로 지원하지 않지만, VBA를 활용하면 원하는 형식으로 시트 이름을 자동으로 구성할 수 있습니다. 아래 두 가지 대표적인 형식을 예시로 설명합니다. 실행 전에 매크로를 저장 가능한 형식으로 저장해야 하며(확장자 .xlsm), 보안 설정에서 매크로 실행이 허용되도록 해야 합니다.

옵션 1: 숫자만 증가하는 형식
설명
현재 활성 시트를 복사한 뒤, 사용자가 입력한 기본 이름에 대해 이미 존재하는 시트 이름 중에서 가장 큰 수를 찾아 그 다음 숫자를 붙여 새 시트 이름을 만듭니다. 예를 들어 기본 이름이 “보고서”라면 새 시트 이름은 “보고서 4″처럼 증가합니다.

코드 예시

Sub CopySheetWithAutoIncrement_NumberOnly()
    Dim originalSheet As Worksheet
    Dim newSheet As Worksheet
    Dim baseName As String
    Dim nextNum As Long
    Dim ws As Worksheet
    Dim currentName As String
    Dim tempNum As Long
    Dim regex As Object
    Dim matches As Object

    Set originalSheet = ActiveSheet

    baseName = InputBox("새 시트의 '기본 이름'을 입력하세요 (예: '보고서', '데이터')." & vbCrLf & _
                       "숫자는 자동으로 증가합니다.", "시트 이름 기본값 설정", originalSheet.Name)

    If baseName = "" Then Exit Sub

    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Global = True
        .IgnoreCase = True
        .Pattern = "^" & Replace(baseName, "(", "(") & "s*(d+)$"
    End With

    nextNum = 0

    For Each ws In ThisWorkbook.Sheets
        currentName = ws.Name
        If regex.test(currentName) Then
            Set matches = regex.Execute(currentName)
            tempNum = CLng(matches(0).SubMatches(0))
            If tempNum > nextNum Then
                nextNum = tempNum
            End If
        End If
    Next ws

    nextNum = nextNum + 1

    Dim newSheetName As String
    newSheetName = baseName & " " & nextNum

    If Len(newSheetName) > 31 Then
        MsgBox "생성될 시트 이름이 31자를 초과합니다. 자동으로 이름을 조정합니다.", vbExclamation
        newSheetName = Left(baseName, 31 - Len(" " & nextNum)) & " " & nextNum
        If Len(newSheetName) > 31 Then
            newSheetName = Left(baseName, 25) & " " & nextNum
        End If
    End If

    originalSheet.Copy After:=Sheets(Sheets.Count)
    Set newSheet = ActiveSheet
    newSheet.Name = newSheetName

    MsgBox "'" & originalSheet.Name & "' 시트가 '" & newSheet.Name & "' (으)로 복사되었습니다.", vbInformation
End Sub

옵션 2: 기본 이름 뒤에 괄호 안의 숫자가 증가하는 형식
설명
현재 활성 시트를 복사한 뒤, 사용자가 입력한 기본 이름에 대해 괄호 안의 숫자 증가 형식으로 새 시트 이름을 구성합니다. 예를 들어 기본 이름이 “데이터”라면 새 시트 이름은 “데이터 (4)”처럼 증가합니다.

코드 예시

Sub CopySheetWithAutoIncrement_Parentheses()
    Dim originalSheet As Worksheet
    Dim newSheet As Worksheet
    Dim baseName As String
    Dim nextNum As Long
    Dim ws As Worksheet
    Dim currentName As String
    Dim tempNum As Long
    Dim regex As Object
    Dim matches As Object

    Set originalSheet = ActiveSheet

    baseName = InputBox("새 시트의 '기본 이름'을 입력하세요 (예: '데이터', '보고서')." & vbCrLf & _
                       "괄호 안의 숫자는 자동으로 증가합니다.", "시트 이름 기본값 설정", originalSheet.Name)

    If baseName = "" Then Exit Sub

    Set regex = CreateObject("VBScript.RegExp")
    With regex
        .Global = True
        .IgnoreCase = True
        .Pattern = "^" & Replace(baseName, "(", "(") & "s*(s*(d+)s*)$"
    End With

    nextNum = 0

    For Each ws In ThisWorkbook.Sheets
        currentName = ws.Name
        If regex.test(currentName) Then
            Set matches = regex.Execute(currentName)
            tempNum = CLng(matches(0).SubMatches(0))
            If tempNum > nextNum Then
                nextNum = tempNum
            End If
        End If
    Next ws

    nextNum = nextNum + 1

    Dim newSheetName As String
    newSheetName = baseName & " (" & nextNum & ")"

    If Len(newSheetName) > 31 Then
        MsgBox "생성될 시트 이름이 31자를 초과합니다. 자동으로 이름을 조정합니다.", vbExclamation
        newSheetName = Left(baseName, 31 - Len(" (" & nextNum & ")")) & " (" & nextNum & ")"
        If Len(newSheetName) > 31 Then
            newSheetName = Left(baseName, 20) & " (" & nextNum & ")"
        End If
    End If

    originalSheet.Copy After:=Sheets(Sheets.Count)
    Set newSheet = ActiveSheet
    newSheet.Name = newSheetName

    MsgBox "'" & originalSheet.Name & "' 시트가 '" & newSheet.Name & "' (으)로 복사되었습니다.", vbInformation
End Sub

매크로 실행 방법
먼저 열려 있는 엑셀 파일에서 매크로를 실행할 수 있는 환경을 준비합니다.

절차

  1. 매크로 대화 상자 열기: Alt + F8 키를 눌러 실행 가능한 매크로 목록을 불러옵니다.
  2. 원하는 매크로를 선택하고 실행 버튼을 클릭합니다. 옵션 1은 CopySheetWithAutoIncrement_NumberOnly, 옵션 2는 CopySheetWithAutoIncrement_Parentheses입니다.
  3. 자주 사용할 경우 빠른 실행 도구 모음이나 리본에 매크로 버튼을 추가해 빠르게 실행할 수 있습니다.

참고 링크
– Microsoft 공식 문서에서 VBA와 Excel 개요를 확인할 수 있습니다: https://learn.microsoft.com/ko-kr/office/vba/api/overview/excel
– VBA에서 더 자세한 객체 모델 정보를 참고하고 싶다면 아래 문서를 참고해 보세요: https://learn.microsoft.com/ko-kr/office/vba/api/overview
– 시트를 복사하고 이름을 변경하는 추가 팁이나 예제를 찾고 싶다면 신뢰할 수 있는 교육 자료를 구글에서 확인하시면 좋습니다.

주의사항 및 팁
– 시트를 복사할 때 원본 시트의 내용은 그대로 복사되며, 새로운 시트의 이름은 자동으로 지정됩니다.
– 시트 이름은 31자까지로 제한되어 있으니, 기본 이름이 매우 길 경우 자동 조정이 적용됩니다.
– 매크로를 저장하려면 파일 형식을 Excel 매크로 활성 통합 문서(.xlsm)로 저장해야 합니다. 일반 .xlsx 파일에는 매크로가 포함될 수 없습니다.
– 보안 설정에 따라 매크로 실행 시 경고가 표시될 수 있으므로 신뢰할 수 있는 파일에서만 사용하시길 권장합니다.

마지막으로 이 방법을 적용하면서 제가 느낀 점은, 반복되는 작업이 줄어들고 이름 관리의 실수가 확실히 줄어든다는 사실입니다. 또한 필요 시 두 가지 형식 중 하나를 선택해 사용하면 상황에 맞게 깔끔하게 시트 이름을 관리할 수 있습니다. 만약 사용 중에 특정 형식이 기대와 다르게 동작한다면, 입력하는 기본 이름이나 시트 이름의 규칙을 조금씩 조정해 보시길 권합니다.