728x90
이번 포스팅은 다른 글에서 특정값의 행전체를 삭제하는 소스의 문제점을 보완해서 코드를 작성했습니다.
우선 이 문제를 찾아주신 닉네임 '블루페일닷'님 감사합니다.
// 문제의 코드
Sub 특정_행_전체삭제()
Dim r
For Each r In Selection //선택한 값들을 각각 하나하나씩 r에 저장한다.
If r = "목표" Then // 현재 위차한 r 즉, 셀값이 목표인 경우를 찾는다.
r.EntireRow.Delete // 셀값이 목표이면 행전체를 삭제한다.
End If
Next r
End Sub
위 코드블럭의 코드는 '목표' 값을 찾았을 경우 삭제하면 행전체가 삭제되기 때문에 엑셀에서 주소 값이 하나가 줄어들게 됩니다.
이렇게 됐을 때 문제가 목표라는 값이 연속해서 존재할 경우 다음 '목표값'의 위치(주소 값)가 한 줄씩 밀리기 때문에 '선택 값'은 원래 계산해야 하는 값을 무시한 후 넘어가서 누락되는 현상이 있었습니다.
이를 보완해서 다시 만들었습니다.
// 문제점을 보완한 코드
Sub 특정_행_전체삭제_업그레이드_Ver()
For i = 0 To Selection.Rows.Count - 1
If ActiveCell.Offset(i, 0).Value <> "" Then
If ActiveCell.Offset(i, 0).Value = "목표" Then
ActiveCell.Offset(i, 0).EntireRow.Delete
i = i - 1
End If
Else
Exit For
End If
Next i
End Sub
위 코드블럭의 코드를 사용해주세요. 코드 설명은 아래를 소스를 이용해주세요.
// 문제점을 보완한 코드
Sub 특정_행_전체삭제_업그레이드_Ver()
For i = 0 To Selection.Rows.Count - 1 // 0 ~ (선택한 행 개수 - 1)만큼 반복
If ActiveCell.Offset(i, 0).Value <> "" Then // 공백인 경우 함수를 종료
If ActiveCell.Offset(i, 0).Value = "목표" Then // 목표인 경우
ActiveCell.Offset(i, 0).EntireRow.Delete //행 삭제
i = i - 1 // 행을 삭제했으니 다시 원래 위치로 돌아감
End If
Else
Exit For
End If
Next i
End Sub
※ 디테일 보충설명
- ActiveCell은 현재 선택된 셀을 의미. 그리고 드래그를 했을 경우 가장 상단의 셀을 인식.
- Offset 상대적 위치를 의미.
728x90
'기타 > Excel(VBA)' 카테고리의 다른 글
VBA 예제 ] VBA코드로 선택한 값이 특정값일 때 행전체 삭제(4탄) (0) | 2021.07.27 |
---|---|
VBA 예제 ] VBA코드로 선택한 값이 특정값일 때 행전체 삭제(3탄) (0) | 2021.02.13 |
VBA 기초] 디버깅 및 값 출력 / VBA코드 사용방법(2탄) (0) | 2021.01.15 |
VBA 예제 ] VBA코드로 선택한 값이 특정값일 때 행전체 삭제 (3) | 2020.04.06 |
VBA 예제] VBA 콤마(,)기준으로 셀값 분리하기 / VBA 콤마 기준 분리 (0) | 2020.04.03 |