(Visual Basic Code) 엑셀에서 컬럼 데이터로 시트 구분후 각각시트를 따로 파일로 저장하기

sehwanforeal·2019년 11월 26일
0

엑셀에서 컬럼 데이터로 시트 구분후 각각시트를 따로 파일로 저장하기

  1. 엑셀파일에서 ALT + F11 을 눌러 Visual Basic for Applications 을 연다
  2. 프로젝트 윈도우( 왼쪽상단 ) 에서 마우스 오른쪽 클릭 후 삽입 -> 모듈을 선택해 module 1 을 생성한다
  3. 열린 module 1 윈도우에
Sub split_Sheet()
​
    Dim rng As Range
    Dim colsCnt As Integer
    Dim colNm As String
    Dim Imsi
    Dim sht As Long
    
    Application.ScreenUpdating = False
    For sht = Sheets.Count To 2 Step -1
        Application.DisplayAlerts = False
        Sheets(sht).Delete
        Application.DisplayAlerts = True
    Next sht
    colNm = InputBox("시트로 분리할 필드의 열 머리글을 입력해 주세요.", "필드 머리글 입력")
    
    Set rng = ActiveSheet.UsedRange
    colsCnt = rng.Columns.Count
    
    rng.Columns(colNm).AdvancedFilter Action:=2, _
        CopyToRange:=Cells(1, colsCnt + 1), Unique:=1
        
    Imsi = Range(Cells(2, colsCnt + 1), Cells(Rows.Count, colsCnt + 1).End(3))
                                                                                       
    For sht = 1 To UBound(Imsi, 1)
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = Imsi(sht, 1)
    Next sht
    
    Sheets(1).Activate
            
    For sht = 1 To UBound(Imsi, 1)
        Cells(2, colsCnt + 1) = Imsi(sht, 1)
        rng.AdvancedFilter Action:=2, CriteriaRange:=Cells(1, colsCnt + 1).Resize(2), _
        CopyToRange:=Sheets(sht + 1).Cells(1, 1), Unique:=0
        Sheets(sht + 1).Columns.AutoFit
    Next sht
    Columns(colsCnt + 1).Delete
    Set rng = Nothing
End Sub

위 코드를 붙어넣기한다, 만약 두번째 줄에 없던 Print가 생겼다면 지워주도록 한다.
위 코드는 행의 데이터를 기준으로 새로운 워크 시트를 생성한다.

  1. 그리고 같은방법으로 module 2 를 생성한다 ( 마우스 우클릭 후 삽입 -> 모듈 )
    module2 에는
Sub Splitbook()
Dim xPath As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In ThisWorkbook.Sheets
    xWs.Copy
    Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsx"
    Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

주의 !! MAC OS라면 8번째줄 "\""/"로 바꿔준다!!

위 코드를 넣어준다. 이 코드는 분리된 워크 시트들을 각각새로운 파일들로 현재 폴더에 저장시키는 기능을 한다.

  1. 모듈 2개가 모두 완성되었다면, 상단의 재생버튼 ( ▶️ ) 을 눌러 모듈들을 실행시킨다.

  2. 실행을 누르면 split_sheet 와 Splitbook 중 선택하는 창이 나타난다. 그 중 split_sheet를 선택해 실행한다.

  3. 실행이 잘 되었다면, 인풋 창이 뜨는데 그곳에서 워크 시트를 나누게 될 기준이 되는 행의 순서 ( 라틴문자 A , B ,C ) 를 입력한다

  • 예) 첫번째 행: A 두번째: B
  1. 확인을 누르면, 정상적으로 나뉘어진 워크 시트들이 생성된다.

  2. 분리된 워크시트들이 생성이 되었다면, 다시 상단의 재생 버튼을 눌러 두번째 모듈 ( Splitbook ) 을 실행시킨다. 그러면 현재 파일이있는 폴더에 각각의 워크시트들이 독립된 파일들로 생성된다.

profile
@FrontEnd

0개의 댓글