여덟 번째 이야기: 수천 줄 데이터에서 '원하는 것'만 쏙 뽑아내기
물류아재 칵칵 · 엑셀 VBA 시리즈 8편
안녕하세요, 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다. 😊
매일 아침 수천 줄의 전일 출고 데이터를 열 때마다 드는 생각이 있죠. "이 중에서 '미출고' 건만 따로 모아서 보고해야 하는데..." 필터를 걸고 복사해서 새 시트에 붙여넣는 일, 5분이면 하지만 매일 하면 일 년에 20시간이 넘는 노동이 됩니다. 오늘은 이 노가다를 단 1초 만에 끝내주는 데이터 자동 추출 매크로를 배워보겠습니다.
자동 추출의 원리 💡
1. 원본 시트의 데이터를 한 줄씩 읽는다.
2. "이 줄의 상태가 '미출고'인가?"라고 묻는다 (If문).
3. 맞다면 추출 시트의 다음 빈 줄에 복사해서 붙여넣는다.
데이터 자동 추출 코드 (복붙용) 🛠️
원본 시트 이름이 **"Data"**이고, 데이터를 모을 시트 이름이 **"Extract"**라고 가정합니다. 원본의 **B열(2번째 열)**에 상태값이 있다고 설정했습니다.
Sub ExtractData() Dim wsSource As Worksheet, wsTarget As Worksheet Dim lastRow As Long, i As Long, targetRow As Long Set wsSource = Sheets("Data") Set wsTarget = Sheets("Extract") '1. 기존 추출 데이터 삭제 wsTarget.Cells.Clear wsSource.Rows(1).Copy wsTarget.Rows(1) '제목줄 복사 lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row targetRow = 2 '2. 반복문을 돌며 조건 확인 For i = 2 To lastRow If wsSource.Cells(i, 2).Value = "미출고" Then wsSource.Rows(i).Copy wsTarget.Rows(targetRow) targetRow = targetRow + 1 End If Next i MsgBox "추출 완료! 총 " & targetRow - 2 & "건을 찾았습니다." End Sub
코드 포인트 레슨 📚
| 코드 | 설명 |
|---|---|
| targetRow = 2 | 추출 시트에 데이터를 쌓을 시작 위치입니다. |
| Cells(i, 2) | 2번째 열(B열)의 값을 확인하라는 뜻입니다. |
| Rows(i).Copy | 조건에 맞으면 해당 줄 전체를 통째로 복사합니다. |
💡 칵칵의 실무 팁
만약 '미출고' 뿐만 아니라 '오배송' 건도 같이 뽑고 싶다면?
If wsSource.Cells(i, 2).Value = "미출고" Or wsSource.Cells(i, 2).Value = "오배송" Then
이렇게 Or를 사용해 조건을 확장할 수 있습니다!
⚠️ 주의사항
- 시트 이름이 코드와 정확히 일치해야 합니다 (Data, Extract).
- 데이터 양이 수만 건 이상이라면 속도가 느려질 수 있습니다.
반복적인 추출 작업에 소모되던 에너지를 이제 기획과 분석에 쓰세요. VBA는 여러분의 시간을 벌어다 주는 가장 든든한 비서입니다. 💪
다음 편에서는 "여러 개의 엑셀 파일을 하나로 합치는 마법"을 소개해 드릴 예정입니다. 물류 현장의 수많은 일일 리스트를 하나로 합칠 때 필수적인 기능이니 기대해 주세요! 😊
