Mam wiele zmiennych tekstowych (owoce), które kiedy i jeśli pojawią się na kolumnie r, muszę usunąć cały wiersz. Mam następujący kod, ale ponieważ mam 15 zmiennych "owoców" (i może być konieczne dodanie więcej w przyszłości) zastanawiałem się, jak mogłem zrobić to pojedynczy podprogram z pętlą. Próbowałem wielu sposobów, które zawodzą. Prawdopodobnie z tablicą łańcuchową, w tym wszystkie nazwiska?

Z góry dziękuję,

Sub Fix1()
Dim Fruit As String

Fruit = "Apple"

Do
On Error GoTo ByeBye
Range("R:R").Find(Fruit).EntireRow.Delete
Loop
ByeBye:
Exit Sub
End Sub



Sub Fix2()
Dim Fruit As String

Fruit = "Orange"
Do
On Error GoTo ByeBye
Range("R:R").Find(Fruit).EntireRow.Delete
Loop
ByeBye:
Exit Sub
End Sub
0
Jonorl 15 luty 2017, 16:41

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć AutoFiter():

Sub FixAll()
    Dim Fruits As Variant

    Fruits = Array("Apple", "Banana", "Pear") '<--| list your fruits
    With Range("R:R") '<--| reference your range
        .AutoFilter Field:=1, Criteria1:=Fruits, Operator:=xlFilterValues '<--| filter referenced column with 'Fruits'" content
        If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete '<--| if any cell found other than header one then delete its corresponding row
    End With
    ActiveSheet.AutoFilterMode = False
End Sub
2
user3598756 15 luty 2017, 17:26

Jeśli nie potrzebujesz pierwszego rzędu usunięte:

Dim r As Range
Set r = ActiveSheet.UsedRange

r.AutoFilter 19 - r.Column, Array("Apple", "Orange"), xlFilterValues 
r.Offset(1).Delete xlShiftUp                               ' deletes the non-filtered rows
r.AutoFilter                                               ' hide the filter
0
Slai 15 luty 2017, 14:30