반응형

실무 자동화 (10편): 조건에 맞는 데이터만 골라 시트별로 자동 분리하기

 

안녕하세요, 물류 현장의 노가다를 코딩으로 찢어버리는 '칵칵'입니다. ☕

물류 센터나 영업소에서 데이터를 다루다 보면 이런 요청을 정말 많이 받습니다. "이 전체 리스트에서 담당자별로 시트 좀 나눠서 줘." 혹은 "지역별로 파일 따로 만들어서 메일 보내야 해." 수천 줄의 데이터를 보며 필터 걸고, 복사하고, 시트 만들고, 붙여넣고... 이걸 수십 번 반복하다 보면 어느새 창밖은 어두워지죠. 오늘은 이 작업을 1초 만에 끝내줄 자동 분리 매크로를 공유합니다.

🛠 시트 자동 분할 VBA 코드

Sub SplitDataToSheets()
    Dim mainWS As Worksheet
    Dim lastRow As Long, i As Long
    Dim categoryName As String
    Dim targetWS As Worksheet
    
    Set mainWS = ThisWorkbook.Sheets("원본데이터") ' 1. 원본 시트명 확인
    lastRow = mainWS.Cells(Rows.Count, 1).End(xlUp).Row
    
    Application.ScreenUpdating = False
    
    For i = 2 To lastRow
        categoryName = mainWS.Cells(i, 1).Value ' 2. 첫 번째 열 기준으로 분리
        
        ' 시트 존재 여부 확인 후 없으면 생성
        On Error Resume Next
        Set targetWS = ThisWorkbook.Sheets(categoryName)
        On Error GoTo 0
        
        If targetWS Is Nothing Then
            Set targetWS = ThisWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
            targetWS.Name = categoryName
            mainWS.Rows(1).Copy targetWS.Rows(1) ' 제목줄 복사
        End If
        
        ' 데이터 복사
        mainWS.Rows(i).Copy targetWS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Set targetWS = Nothing
    Next i
    
    mainWS.Activate
    Application.ScreenUpdating = True
    MsgBox "모든 데이터 분리가 완료되었습니다!"
End Sub

💡 코드 핵심 해설 (실무 포인트)

  • On Error Resume Next: 해당 이름의 시트가 없을 때 발생하는 오류를 무시하고 다음 코드로 넘어가게 하여 시트를 새로 생성할 수 있게 돕습니다.
  • mainWS.Rows(1).Copy: 새로운 시트를 만들 때 가장 중요한 '제목 행'을 자동으로 복사해 넣어줍니다.
  • After:=Sheets(Sheets.Count): 새로운 시트를 항상 가장 뒤쪽에 정렬되도록 위치를 지정합니다.

⚠️ 칵칵의 포인트 해설: 여기서 실수하면 에러납니다!

  • 실수 1: 시트 이름 금지 문자 - 시트 이름에는 / \ ? * [ ] : 기호를 쓸 수 없습니다. 분할 기준이 되는 데이터(담당자명, 지역명 등)에 이런 기호가 섞여 있으면 시트 생성 오류가 납니다. 꼭 미리 확인하세요!
  • 실수 2: 오타 주의 - 데이터에 "서울"과 "서울 " (공백 포함)이 섞여 있으면 엑셀은 다른 카테고리로 인식해 시트를 두 개 만듭니다. 실행 전 **[공백 제거]**는 필수입니다!
  • 실수 3: 시트 이름 길이 제한 - 시트 이름은 최대 31자까지만 가능합니다. 긴 문장이 분리 기준이라면 코드 실행 중 중단될 수 있습니다.
  • 실수 4: 성능 이슈 - 이 코드는 한 행씩 복사하는 방식이라 수만 줄의 데이터에서는 속도가 느려질 수 있습니다. 데이터가 너무 많다면 '고급 필터'를 활용한 VBA 방식으로 업그레이드해야 합니다.

 

#엑셀VBA #매크로 #시트분할 #데이터나누기 #업무자동화 #칼퇴꿀팁 #물류관리 #VBA강좌 #직장인코딩 #데이터정리 #엑셀꿀팁 #칵칵 #자동화코드 #직장인필수앱 #엑셀공부

다음 엑셀 이야기 예고: 「엑셀 VBA (11편): 버튼 클릭으로 대량의 이메일 자동 발송하기 (Outlook 연동)」

반응형

+ Recent posts