VBA: Excel에서 필터링된 행을 삭제하는 방법은 무엇입니까?
나는 약간의 데이터가 포함된 엑셀 테이블을 가지고 있습니다.다음 vba 코드를 사용하여 일부 필드에서 빈 셀만 필터링하고 이 행을 삭제하려고 합니다.
ActiveSheet.Range("$A$1:$I$" & lines).AutoFilter Field:=7, Criteria1:= _
"="
ActiveSheet.Range("$A$1:$I$" & lines).AutoFilter Field:=8, Criteria1:= _
"="
ActiveSheet.Range("$A$1:$I$" & lines).AutoFilter Field:=9, Criteria1:= _
"="
ActiveSheet.UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.rows.Count - 1).rows.Delete
ActiveSheet.ShowAllData
이 열에 빈 셀이 있는 경우에만 작동합니다.하지만 빈 셀이 없을 때 문제가 발생했습니다. 위의 코드를 사용하면 모든 범위가 시트에서 제거됩니다.이 문제를 방지하는 방법은 무엇입니까?필터 상태를 변경해야 합니까 아니면 다른 것을 변경해야 합니까?
특수 셀을 사용하여 자동 필터링 후 표시되는 행만 삭제합니다.
ActiveSheet.Range("$A$1:$I$" & lines).SpecialCells _
(xlCellTypeVisible).EntireRow.Delete
범위에 삭제하지 않을 헤더 행이 있는 경우 범위에 오프셋을 추가하여 제외합니다.
ActiveSheet.Range("$A$1:$I$" & lines).Offset(1, 0).SpecialCells _
(xlCellTypeVisible).EntireRow.Delete
UsedRange를 사용하거나 명시적인 범위 주소를 제공하는 대신 AutoFilter를 사용합니다.범위 속성은 영향을 받는 범위를 지정할 수도 있습니다.
ActiveSheet.AutoFilter.Range.Offset(1,0).Rows.SpecialCells(xlCellTypeVisible).Delete(xlShiftUp)
여기서 사용하는 것처럼 오프셋을 사용하면 AutoFilter 범위 다음의 첫 번째 행도 삭제됩니다.그것을 피하기 위해, 저는 을 사용해 보겠습니다.뒤의 크기를 조정합니다.오프셋().
언급URL : https://stackoverflow.com/questions/17194394/vba-how-to-delete-filtered-rows-in-excel
'programing' 카테고리의 다른 글
왜 마이크로소프트가.사무실. 인터럽트.Excel. 지원서.종료() 백그라운드 프로세스를 실행 상태로 두시겠습니까? (0) | 2023.07.08 |
---|---|
WPF MouseLeftButtonDown 이벤트 핸들러의 Ctrl 키 누름 조건 (0) | 2023.07.08 |
Python 중첩 함수 변수 범위 지정 (0) | 2023.07.08 |
새 리포지토리에서 오리진 마스터 푸시 오류 (0) | 2023.07.08 |
사이트 '글로벌이 정의되지 않았습니다' (0) | 2023.07.08 |