[Excel] VBA 매크로로 엑셀의 빈 값이 있는 셀 일괄삭제
VBA 매크로를 사용해 엑셀의 "빈 것처럼 보이는" 모든셀을 삭제하는 방법
◆ 증상 및 원인
직업분류코드값을 엑셀 자료로 받았는데 엑셀에서 Ctrl + ↓ (아래 방향키)를 사용하면 보통 연속된 데이터 블록 내에서만 이동하고, 중간에 빈 셀이 있으면 거기서 멈춰야 하지만 아래와 같이 빈 셀에서 멈추지 않고 끝라인까지 이동하는 문제가 발생함.
중간에 멈추지 않는다는 것은 빈 셀이 없다는 의미이기 때문에, 혹시나 해서 셀에서 Delete키를 눌러 셀의 데이터를 삭제하여 빈 셀을 만든 뒤 Ctrl + 방향키로 동작해 보니 방금 데이터를 삭제한 셀에서 잘 멈추었다.
결국 빈 셀 처럼 보이지만 내용이 있는 셀 이라는 의미이고, 실제로 빈 것처럼 보이는 셀의 값을 확인해보니 공백이 들어가 있는 상태였다.
◆ VBA 매크로를 사용해 빈 셀 삭제
빈 셀을 일일히 체크하여 데이터를 삭제하기에는 갯수가 너무 많기에, VBA를 이용해 한번에 삭제를 하기로 했다.
1.「Alt + F11」로 VBA 편집기 열기
2. 마우스 우클릭 ⇒「삽입」 ⇒「모듈」클릭
3. 모듈에 아래 코드를 작성
Sub RemoveInvisibleData()
Dim cell As Range
For Each cell In ActiveSheet.UsedRange
If cell.MergeCells Then
If Trim(Replace(Replace(cell.MergeArea.Cells(1, 1).Value, " ", ""), Chr(9), "")) = "" Then
cell.MergeArea.Clear
End If
Else
If Trim(Replace(Replace(cell.Value, " ", ""), Chr(9), "")) = "" Then cell.Clear
End If
Next cell
End Sub
위 코드를 간단히 요약하면 사용중인 모든 셀을 대상으로 체크하는데 셀이 탭이나 스페이스, 공백 등의 빈 값이 존재하는 셀이라면 해당 셀을 완전히 지우는 처리를 한다.
주의할 점은 병합된 셀인 경우가 있기 때문에 일반셀과 병합된 셀의 처리를 분기해 놓았다.
병합된 셀의 경우 병합된 첫번째 셀을 대상(셀이 병합될 경우 데이터는 첫번째 셀부터 쌓이기 때문)으로 데이터의 유무를 판단한다.
4.「F5」 ⇒「실행」버튼 클릭하여 매크로 실행
매크로 실행 후 결과를 확인해보니 공백이 포함된 빈 값이 전부 삭제되어, Ctrl + 방향키로 이동 시 빈 셀에 잘 멈추는 것을 확인할수 있었다.
글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --