Автофильтр со специальными ячейками для удаления строк также удаляет строку заголовка - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь удалить строки на основе значения в столбце. Я знаю несколько способов сделать это, но мне интересно, почему этот метод также удаляет строку заголовка. Нужно ли указывать другой диапазон?

Sub DeleteForeign()
    Dim LastRow As Long
    Dim Rng As Excel.Range
'
' Choose entire column
    With ActiveSheet
        LastRow = .Range("D" & .Rows.Count).End(xlUp).Row
' Changing the range from Cells(1, "D") to Cells(2, "D") keeps the header intact,
' but deletes the next row which should be left since it has the value, "US"
        Set Rng = .Range(Cells(1, "D"), Cells(LastRow, "D"))
    End With
' This construct avoids looping which would be time-consuming for long lists
' Looking for country code, "US", and to delete all others
    With Rng
        .AutoFilter Field:=1, Criteria1:="<>US", Operator:=xlFilterValues
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
End Sub

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Попробуйте использовать приведенный ниже код: единственное отличие здесь в том, что я переопределяю диапазон перед удалением отфильтрованных строк.

Sub Macro2()

    Dim LastRow As Long

    LastRow = Range("D" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range(Cells(1, "D"), Cells(LastRow, "D")).AutoFilter Field:=1, Criteria1:="<>US", Operator:=xlFilterValues
    Range(Cells(2, "D"), Cells(LastRow, "D")).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    ActiveSheet.ShowAllData  

End Sub
0 голосов
/ 23 апреля 2020

Измените его с: Cells(1, "D") на: Cells(2, "D")

Это делает то, что вы хотите? В Excel VBA, как и в других средах, это всегда (строка, столбец). См. Ссылку ниже для получения дополнительной информации.

https://www.informit.com/articles/article.aspx?p=2021718&seqNum=7

...