programing

VBA: Excel에서 필터링된 행을 삭제하는 방법은 무엇입니까?

lovejava 2023. 7. 8. 10:25

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