구간범위 내의 행 전체가 비어 있는 경우에만 삭제하고 싶은 경우의 VBA 코드입니다.
항상 삭제를 할 때에는 아래행부터 시작해서 위로 시작한다는 것을 명심하셔야 합니다.
Sub 행전체가빈셀인경우()
Dim rngDB As Range
Dim r, LastRow, k As Double
Application.ScreenUpdating = False '// 화면 업데이트 일시정지
LastRow = Cells(Rows.Count, "C").End(3).Row '// 마지막 셀이 있는 행을 찾기 위해서
For r = LastRow To 1 Step -1
Set rngDB = Range(Cells(r, "A"), Cells(r, "D")) '// 각 행의 D열까지를 범위구간으로 선언
If Application.WorksheetFunction.CountA(rngDB) = 0 Then '// 범위구간 전부가 비어 있으면
Rows(r).EntireRow.Delete '// 해당 행 전체 삭제
k = k + 1 '// 삭제되는 행의 숫자를 카운트 하기 위해
End If
Next r
MsgBox k & "행 삭제완료"
End Sub
그런데 해당행 전체가 아니라 표의 해당구간내의 경우에만 삭제를 하고 싶다면 어떻게 해야 할까요?
Sub 범위구간의빈셀인경우행삭제()
Dim rngDB As Range
Dim r, LastRow, k As Double
Application.ScreenUpdating = False '// 화면 업데이트 일시정지
LastRow = Cells(Rows.Count, "C").End(3).Row '// 마지막 셀이 있는 행을 찾기 위해서
For r = LastRow To 1 Step -1
Set rngDB = Range(Cells(r, "A"), Cells(r, "D")) '// 각 행의 D열까지를 범위구간으로 선언
If Application.WorksheetFunction.CountA(rngDB) = 0 Then '// 범위구간 전부가 비어 있으면
rngDB.Delete '// 범위구간의 행 전체 삭제
k = k + 1 '// 삭제되는 행의 숫자를 카운트 하기 위해
End If
Next r
MsgBox k & "행 삭제완료"
End Sub
위의 코드와 아래 코드 전부 동일한테 적색으로 표시한 부분만 다릅니다.
결과화면은
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 엑셀 표 테두리 씌우기 (0) | 2015.05.08 |
---|---|
요일별 최대값, 최소값 구하는 VBA (0) | 2015.05.05 |
메모리 부하없이 다량의 주소 정리 (0) | 2015.05.01 |
특정 워크시트를 파일로 저장하기 (1) | 2015.04.26 |
엑셀 각 시트를 각각의 파일로 저장 (0) | 2015.04.25 |