지난번에 작성한 엑셀 스타일 삭제 및 오류있는 수식 삭제 방법 포스팅에서 매크로 기능을 이용해 수많은 스타일을 자동으로 삭제하는 방법을 알아봤다. 지난 포스팅에 이어서 매크로 기능을 이용해 사용자에게 입력받은 숫자만큼 시트를 복사 및 이동하는 방법을 알아보자.

왜 시트를 복사 및 이동하는 것을 매크로로 구현을 할까? 의문이 가진다.

엑셀로 사무 업무를 처리하는 사람들은 보통 반복적인 작업을 수행한다. 물론 셀의 합계, 셀의 평균 등은 함수로 처리할 수 있다. 하지만, 특정 시트를 수 십개, 수 백개를 복사 및 이동하려면 시트를 우측 클릭을 하고 이동/복사 메뉴를 선택해야 한다.


수 십개의 시트는 몇 분 안에 끝날지라도 수 백개의 시트는 복사를 하려면 시간이 상당히 오래 걸린다. 오래 걸리는 이유는 수동적인 작업으로 시트를 이동 및 복사를 하고, 시트 이름이 변경되므로 이에 맞춰 변경해야 한다.

시트를 복사 및 이동하는 반복적인 작업도 매크로 기능을 이용하면 단 몇 초안에 생성할 수 있다.


▶ 엑셀 스타일 삭제 및 오류있는 수식 삭제 방법


엑셀 입력 받은 숫자만큼 시트 복사/이동 하기

새로운 엑셀 문서를 열고 Alt + F11를 누르면 매크로를 작업할 수 있는 창이 나타난다.


상단 메뉴에서 삽입(I) > 모듈(M) 순서로 클릭하고, 아래의 소스코드를 복사해서 그림과 같이 붙여 넣는다. 해당 코드는 입력 받은 숫자만큼 sheet01 시트를 복사 및 이동하는 코드이다.


각 사용자마다 엑셀 문서와 시트 이름이 차이가 있으므로 코드의 시트 이름을 변경해서 작업해야 한다.

Sheet_Copy.txt
0.00MB

Sub Sheet_Copy()

  Dim I As Long
  Dim xNumber As Integer
  Dim xName As String
  Dim xActiveSheet As Worksheet
  On Error Resume Next
  Application.ScreenUpdating = False
  
  Set xActiveSheet = ActiveSheet
  
  xNumber = InputBox("현재 시트를 몇 개를 복사할까요?")

  xName = ActiveSheet.name
  If xName = "sheet01" Then
    For I = 1 To xNumber
      If I < 10 Then
        xName = ActiveSheet.name
        xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
        ActiveSheet.name = "sheet0" & I
      Else
        xName = ActiveSheet.name
        xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
        ActiveSheet.name = "sheet" & I
      End If
    Next

    xActiveSheet.Activate
    Application.ScreenUpdating = True

    Application.DisplayAlerts = False
    Worksheets("sheet01 (2)").Delete
    Application.DisplayAlerts = True
  End If

  MsgBox xNumber & "개의 시트 복사 완료!!!"
  
End Sub


각 사용자의 환경에 맞게 코드를 변경하려면 코드를 볼 줄 알아야 한다. 이 부분을 간단하게 살펴보자.


ㅇ 자동으로 시트를 이동 및 복사하는 매크로 이름 (함수 이름)

Sub Sheet_Copy()

ㅇ 변수 선언

ㅇ 시트 이름 뒤에 삽입할 숫자, 복사할 개수, 시트 이름, 활성화된 시트 등 각 변수 선언

  Dim I As Long
  Dim xNumber As Integer
  Dim xName As String
  Dim xActiveSheet As Worksheet
  On Error Resume Next
  Application.ScreenUpdating = False

ㅇ xActiveSheet 변수는 현재 활성화된 시트를 저장하는 변수
ㅇ xNumber 변수는 복사할 시트 개수를 사용자에게 요구

  Set xActiveSheet = ActiveSheet
  
  xNumber = InputBox("현재 시트를 몇 개를 복사할까요?")

ㅇ 사용자에게 입력 받은 숫자만큼 시트를 복사 및 이동

ㅇ 수동으로 복사 및 이동하면 시트 이름 뒤에 (2), (3) 등이 삽입되는데 이름을 변경

ㅇ 시트 이름 뒤에 01, 02, 03 ~ 09, 10, 11, 12 ... 등의 숫자가 삽입

ㅇ 해당 코드는 sheet01 시트가 있어야 자동으로 복사 및 이동이 되므로 각 사용자의 시트 이름을 변경해야 함

  xName = ActiveSheet.name
  If xName = "sheet01" Then
    For I = 1 To xNumber
      If I < 10 Then
        xName = ActiveSheet.name
        xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
        ActiveSheet.name = "sheet0" & I
      Else
        xName = ActiveSheet.name
        xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
        ActiveSheet.name = "sheet" & I
      End If
    Next

ㅇ 최초 시트를 이동 및 복사하면 불필요한 시트가 존재

ㅇ 해당 시트를 삭제 처리

    Application.DisplayAlerts = False
    Worksheets("sheet01 (2)").Delete
    Application.DisplayAlerts = True

매크로를 실행하기 전 5개의 시트를 복사 및 이동을 하면 시트 이름이 (1), (2), (3) .. 등으로 변경된다. 불필요하게 시트 이름이 변경되므로 사용자가 원하는 시트 이름을 수동으로 변경해야 한다.



Alt + F8 키를 누르면 매크로를 실행할 수 있는 창이 나타나고, 조금 전 작업한 Sheet_Copy 함수가 등록되어 있다. 해당 함수를 선택하고 실행 버튼을 클릭하면 매크로가 실행된다. 매크로가 실행되는 순서를 살펴보면 다음과 같다.

ㅇ 현재 선택한 시트를 몇 개를 복사할지 안내 창이 나타나면 복사할 개수를 입력한다.
ㅇ 입력한 숫자만큼 시트가 자동으로 복사 및 이동이 되고, 불필요하게 삽입된 시트 이름을 변경한다.


▶ 엑셀 CSV 구분자 변경

▶ 엑셀 시트보호 해제 (패스워드 없이 해제)

▶ 엑셀 스타일 삭제 및 오류있는 수식 삭제 방법


  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유

댓글을 달아 주세요

  1. 알파카
    2021.01.03 09:58

    안녕하세요. 시트복사 매크로 관련 문의드리고 싶은데 어떻게 해야할까요?