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

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

홈페이지 » 엑셀 시트 나눠서 저장 매크로 :: Save_EachWS 명령문

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

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

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

명령문 구문
Save_EachWS [파일경로], [덮어쓰기여부], [제외할시트]
사용된 인수 및 변수 알아보기
인수 설명
파일경로
[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 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
    Application.ActiveWorkbook.Close False
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
3 1 투표
게시글평점
guest
1 댓글
Inline Feedbacks
모든 댓글 보기
yuri
yuri
2021년 6월 14일 2:02 오후
게시글평점 :
     

안녕하세요 항상 좋은 정보를 제공해주셔서 감사합니다.
매크로초보자입니다. 올려주신 코드에 대해 한줄씩 설명문을 써주시면 아주
감사하겠습니다.
有益な情報をたくさんありがとうございます!
大変恐縮ではございますが、コートについてもう少し詳しく説明文を添えて頂けたら凄くありがたいです!

From 해바라기

Last edited 11 일 전 by yuri
1
0
여러분의 생각을 댓글로 남겨주세요.x