반응형
실무 자동화 (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 (11편): 버튼 클릭으로 대량의 이메일 자동 발송하기 (Outlook 연동)」
반응형
'코딩으로 시간 벌기 > 엑셀 VBA' 카테고리의 다른 글
| 실무 자동화 (12편): 클릭 한 번으로 "거래처별 대량 메일 자동 발송" (Outlook 연동) (0) | 2026.04.04 |
|---|---|
| 실무 자동화 (11편): 조건에 맞는 데이터만 "PDF로 자동 변환" 하여 저장하기 (0) | 2026.03.31 |
| 실무 자동화 (9편): 1시간 노가다를 1초로 - 여러 파일 하나로 합치기 (0) | 2026.03.24 |
| 여덟 번째 이야기: 수천 줄 데이터에서 '원하는 것'만 쏙 뽑아내기 (0) | 2026.03.22 |
| 일곱 번째 이야기: 보고서 자동화의 기초, 주소 지정의 기술 (0) | 2026.03.17 |
