1초 만에 데이터 찢기! 부서별/지역별 시트 자동 분할 매크로 (복붙용 코드 포함) 🚀
안녕하세요! 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다. ☕
오늘 하루도 이런 지시를 받지 않으셨나요?
"김대리, 이번 달 전체 매출 데이터 뽑은 거, 각 부서별로 시트 나눠서 따로 정리 좀 해줘."
부서가 3~4개면 필터를 걸고 복사해서 새 시트에 붙여넣는 작업을 기꺼이 할 수 있습니다. 하지만 부서가 20개, 30개라면 어떨까요?
거래처별, 지역별, 담당자별로 데이터를 찢어야 한다면 귀중한 오전 시간은 'Ctrl+C, Ctrl+V'만 하다가 날아가 버립니다. 😱
오늘은 이 지독한 복붙 노가다를 버튼 클릭 한 번, 단 1초 만에 해결해 주는 '데이터 자동 분할' 매크로를 준비했습니다. VBA를 몰라도 괜찮습니다. 늘 그랬듯, 아래 순서대로 복사해서 붙여넣기만 하세요! 👇
## 🛠️ Step 1. 매크로를 담을 그릇 만들기
먼저 엑셀에 코드를 입력할 공간을 열어야 합니다.
* [개발 도구] 탭을 누릅니다.
* 혹시 '개발 도구' 탭이 안 보이나요? 상단 메뉴 아무 곳이나 마우스 우클릭 → [리본 사용자 지정] → 오른쪽 목록에서 **[개발 도구]**에 체크하고 확인을 누르세요! ✅
* 가장 왼쪽에 있는 [Visual Basic] 버튼을 클릭합니다. (단축키: Alt + F11)
* 새로 뜬 창 상단 메뉴에서 [삽입] → **[모듈]**을 클릭합니다.
* 이제 하얀색 빈 메모장 같은 창이 나타날 거예요. 여기에 아래 코드를 복사해서 붙여넣으세요!
## 💻 Step 2. 마법의 코드 복사하기
아래 코드를 그대로 복사해서 방금 만든 하얀 창에 붙여넣으세요. 📋
'// 기능: 특정 열을 기준으로 데이터를 시트별로 자동 분할합니다.
Sub SplitDataByColumn()
Dim ws As Worksheet, newWs As Worksheet
Dim rng As Range, cell As Range
Dim dict As Object
Dim key As Variant
Dim lastRow As Long, colIndex As Long
Set ws = ActiveSheet
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
'1. 기준 열 번호 입력받기
On Error Resume Next
colIndex = InputBox("데이터를 나눌 기준 열 번호를 숫자로 입력하세요." & vbNewLine & "(예: A열=1, B열=2, C열=3)", "기준 열 선택", 1)
If colIndex = 0 Then Exit Sub
On Error GoTo 0
Set dict = CreateObject("Scripting.Dictionary")
'2. 고유한 기준값(부서명 등) 추출
For Each cell In ws.Range(ws.Cells(2, colIndex), ws.Cells(lastRow, colIndex))
If cell.Value <> "" And Not dict.exists(cell.Value) Then
dict.Add cell.Value, Nothing
End If
Next cell
Application.ScreenUpdating = False '작업 속도 향상
'3. 시트 생성 및 데이터 복사
For Each key In dict.keys
ws.Range("A1").AutoFilter Field:=colIndex, Criteria1:=key
'이미 해당 이름의 시트가 있는지 확인 후 생성
On Error Resume Next
Set newWs = Sheets(CStr(key))
If newWs Is Nothing Then
Set newWs = Sheets.Add(After:=Sheets(Sheets.Count))
newWs.Name = CStr(key)
Else
newWs.Cells.Clear '기존 데이터가 있으면 삭제
End If
On Error GoTo 0
ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Destination:=newWs.Range("A1")
newWs.Columns.AutoFit
Set newWs = Nothing
Next key
ws.AutoFilterMode = False
ws.Activate
Application.ScreenUpdating = True
MsgBox "모든 시트 분할이 완료되었습니다! 칼퇴하세요! 🎉", vbInformation
End Sub
## 🚀 Step 3. 매크로 실행해서 노가다 끝내기!
코드를 붙여넣었다면 이제 엑셀 시트로 돌아오세요.
* [개발 도구] → **[매크로]**를 클릭합니다. (단축키: Alt + F8)
* 목록에서 SplitDataByColumn을 선택하고 **[실행]**을 누릅니다.
* 작은 창이 뜨면, 데이터를 나눌 기준이 되는 열 번호를 입력하세요.
* 부서명이 B열에 있다면 숫자 2를 입력하고 확인!
* 눈 깜짝할 사이에 시트 탭이 늘어나며 데이터가 완벽하게 분리됩니다! ✨
## ⚠️ 혹시 막히시나요? 대안을 알려드려요!
Q1. 매크로를 실행했는데 오류가 떠요!
* 이유: 데이터의 제목(머리글)이 1행이 아니거나, 데이터 중간에 빈 행이 있을 때 그럴 수 있습니다.
* 대안: 데이터 제목줄을 1행으로 맞추고, 중간에 완전히 빈 행이 없는지 확인해 보세요! 🧐
Q2. 시트가 만들어지다 멈춰요.
* 이유: 부서명(시트 이름이 될 값)에 /, :, ?, *, [, ] 같이 시트 이름으로 쓸 수 없는 특수문자가 섞여 있을 때 발생합니다.
* 대안: 원본 데이터의 기준 열에서 특수문자를 제거하거나 다른 문자로 바꿔보세요! 🛠️
Q3. 파일을 껐다 켜니 매크로가 사라졌어요!
* 이유: 일반 엑셀 파일(.xlsx)로 저장해서 그렇습니다.
* 대안: 반드시 **[다른 이름으로 저장]**에서 파일 형식을 **[Excel 매크로 사용 통합 문서(.xlsm)]**로 선택해서 저장해 주세요! 💾
## 결론: 엑셀에게 일을 시키세요!
매일 하던 30분짜리 단순 노동, 오늘부터는 1초 만에 끝내고 여유롭게 아침 커피 한 잔 하시기 바랍니다. ☕ 이 매크로 하나가 여러분의 소중한 시간을 벌어다 줄 거예요.
사용해 보시다가 궁금한 점이나 "이런 기능도 추가하고 싶어요!" 하는 의견이 있다면 언제든 댓글로 남겨주세요! 💬
칼퇴는 실력이고, 그 실력은 올바른 도구 활용에서 나옵니다. 💪
'코딩으로 시간 벌기 > 엑셀 VBA' 카테고리의 다른 글
| 드롭다운 목록, 매크로로 자동 업데이트하기! 🔽 (0) | 2026.03.12 |
|---|---|
| 세 번째 이야기: 색깔별 정렬, 클릭 한 번으로 끝내기! 🎨 (0) | 2026.03.10 |
| 두 번째 이야기: 색깔 있는 셀, 합계도 5초 만에! (0) | 2026.03.05 |
| 엑셀 보고서 작성, 아직도 '다른 이름으로 저장' 하세요? (5) | 2025.08.26 |
| 첫 번째 이야기: 색깔 있는 셀, 5초 만에 세는 방법 (0) | 2025.08.20 |
