엑셀 시트 나누기 매크로 :: Save_EachWS 명령문 사용법

각 시트를 나누어 각각의 통합문서로 저장하는 Save_EachWS 명령문의 사용법 및 동작원리를 살펴봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 12. 02. 21:57
URL 복사
메모 남기기 : (8)

엑셀 시트 나눠서 저장 매크로 :: Save_EachWS 명령문 사용법

엑셀 Save_EachWS 명령문 목차 바로가기
요약

엑셀 Save_EachWS 는 통합문서의 각 시트를 여러개의 파일로 나누어 저장하는 명령문입니다.

명령문 구문
Save_EachWS [파일경로], [시트명], [덮어쓰기여부], [제외할시트]
사용된 인수 및 변수 알아보기
인수 설명
파일경로
[String, 선택인수]
각 시트를 나누어 저장할 파일 경로입니다. 기본값은 실행중인 통합문서와 동일한 경로입니다.
시트명
[String, 선택인수]
시트명을 지정하면 모든 파일의 시트 이름이 동일하게 저장됩니다. 기본값은 해당 시트 이름을 그대로 유지합니다.
덮어쓰기여부
[Boolean, 선택인수]
TRUE 일 경우, 기존 파일 존재시 파일을 덮어쓰기 합니다. 기본값은 False 입니다. 덮어쓰기여부가 False이면서 기존파일이 존재할 경우, 파일명-1, 파일명-2, .. 로 파일명에 순번을 매겨 저장합니다.
제외할시트
[String, 선택인수]
시트 나누기에서 제외할 시트 목록입니다. 제외할 시트를 쉼표(,) 로 나누어 입력합니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


상세 설명

엑셀 Save_EachWS 명령문은 실행 중인 통합문서의 각 시트를 나누어 여러개의 통합문서로 저장하는 엑셀 시트 나누기 매크로 명령문입니다. 시트에 입력된 범위를 여러개의 시트로 나누려면 Split_EachWS 명령문을 사용하세요.

보조 명령문으로 파일 존재여부를 확인하는 FileExists 명령문과 파일명에 순번을 매겨 저장하는 FileSequence 명령문이 사용되었습니다.

만약 각 시트별로 분할 된 통합문서를 바탕화면에 저장하려면 GetDesktopPath 함수를 사용하여 파일경로를 바탕화면으로 지정할 수 있습니다.

Save_EachWS GetDesktopPath
'실행중인 통합문서의 각 시트를 여러개의 통합문서로 나눠서 바탕화면에 저장합니다.
실전 사용 예제
  1. 통합문서의 각 시트를 나눠서 통합문서와 동일한 경로에 저장
    Sub Test1()
     
    '통합문서의 각 시트를 나누어 통합문서와 동일한 경로에 저장합니다.
    Save_EachWS
    End Sub
  2. 통합문서에서 '시트1'과 '시트2'는 제외한 채, 나머지 시트를 나누어 바탕화면에 저장
    Sub Test2()
    '통합문서에서 '시트1'과 '시트2'는 제외한 나머지 시트를 나누어 바탕화면에 저장합니다.
    Save_EachWS GetDesktopPath, , "시트1,시트2"
     
    End Sub

엑셀 시트나눠서 저장 매크로, Save_EachWS 명령문 동작원리

Save_EachWS 명령문 전체 코드
Sub Save_EachWS(Optional SavePath As String, Optional SheetName As String, Optional isOverWrite As Boolean = False, Optional ExcludeSheets As String)
 
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ Save_EachWS 함수
'▶ 각 시트를 각각의 통합문서로 나누어 저장합니다.
'▶ 인수 설명
'_____________SavePath      : 시트를 나누어 통합문서로 저장할 폴더경로입니다. 기본값은 실행중인 통합문서와 동일한 경로입니다.
'_____________isOverWrite   : 덮어쓰기 여부입니다. 기본값은 False 입니다.
'_____________ExcludeSheets : 시트 나누기에서 제외할 시트입니다. 쉼표로 나누어 여러개 시트를 지정할 수 있습니다.
'▶ 보조 명령문 안내 : FileExist, FileSequence 함수
'###############################################################
 
Dim WS As Worksheet
Dim FPath As String
Dim vSheets As Variant: Dim vSheet As Variant
 
If SavePath = "" Then SavePath = Application.ActiveWorkbook.Path
If ExcludeSheets <> "" Then vSheets = Split(ExcludeSheets, ",")
 
Application.ScreenUpdating = False
Application.DisplayAlerts = False
 
For Each WS In ThisWorkbook.Sheets
    If ExcludeSheets <> "" Then
        For Each vSheet In vSheets
            If WS.Name = Trim(vSheet) Then
                GoTo Pass:
            End If
        Next
    End If
 
    WS.Copy
    FPath = SavePath & "\" & WS.Name & ".xlsx"
    If FileExists(FPath) And isOverWrite = False Then
        FPath = FileSequence(FPath)
    End If
    Application.ActiveWorkbook.SaveAs Filename:=FPath
    If SheetName <> "" Then Application.ActiveWorkbook.Worksheets(1).Name = SheetName
    Application.ActiveWorkbook.Close True
Pass:
Next
 
Application.DisplayAlerts = True
Application.ScreenUpdating = True
 
End Sub
 
Public Function FileExists(ByVal path_ As String) As Boolean
 
'########################################################
'입력한 파일경로에 파일 존재여부를 확인합니다.
'https://www.oppadu.com/vba-fileexists-함수/
'########################################################
 
    FileExists = (Dir(path_, vbDirectory) <> "")
 
End Function
 
 
Private Function FileSequence(FilePath As String, Optional Sequence As Long = 1, Optional Delimiter As String = "-") As String
 
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ FileSequence 함수
'▶ 기존 파일이 존재할 경우 순번을 매겨 파일을 저장합니다.
'▶ 인수 설명
'_____________FilePath  : 확장자를 포함한 파일 경로입니다.
'_____________Sequence  : 순번을 매길 시작번호입니다.
'_____________Delimiter : 파일명과 순번을 구분할 구분자입니다.
'▶ 보조 명령문 안내 : FileExist 함수
'###############################################################
 
Dim Ext As String: Dim Path As String: Dim newPath As String
Dim Pnt As Long
 
Pnt = InStrRev(FilePath, ".")
Path = Left(FilePath, Pnt - 1)
Ext = Right(FilePath, Len(FilePath) - Pnt + 1)
 
newPath = Path & Delimiter & Sequence & Ext
 
Do Until FileExists(newPath) = False
    Sequence = Sequence + 1
    newPath = Path & Delimiter & Sequence & Ext
Loop
 
FileSequence = newPath
 
End Function
엑셀 시트 나눠서 저장 명령문 단계별 알아보기
  1. 명령문에 사용할 변수를 선언하고 각 변수 안에 값을 입력합니다.
    Dim WS As Worksheet
    Dim FPath As String
    Dim vSheets As Variant: Dim vSheet As Variant
     
    If SavePath = "" Then SavePath = Application.ActiveWorkbook.Path
    If ExcludeSheets <> "" Then vSheets = Split(ExcludeSheets, ",")
  2. 빠른 동작을 위해 화면업데이트를 중단하고 통합문서 생성/종료를 위해 알림창을 비활성화합니다.
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
  3. 시트가 제외할 시트일 경우 명령문을 중단하고 다음 단계로 넘어갑니다.
    For Each WS In ThisWorkbook.Sheets
        For Each vSheet In vSheets
            If WS.Name = Trim(vSheet) Then
                GoTo Pass:
            End If
        Next
  4. 제외할 시트가 아닐 경우 시트를 통합문서로 저장합니다.
        WS.Copy
        FPath = SavePath & "\" & WS.Name & ".xlsx"
        If FileExists(FPath) And isOverWrite = False Then
            FPath = FileSequence(FPath)
        End If
        Application.ActiveWorkbook.SaveAs Filename:=FPath
        Application.ActiveWorkbook.Close False
    Pass:
    Next
  5. 화면업데이트 및 알림창을 활성화 한 후 명령문을 종료합니다.
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
4.6 5 투표
게시글평점
8 댓글
Inline Feedbacks
모든 댓글 보기
8
0
여러분의 생각을 댓글로 남겨주세요.x