Удалить строки, имеющие значение Specifi c в столбце Specifi c - PullRequest
1 голос
/ 22 января 2020

У меня проблема с макросом, который я пытаюсь сделать.

Я хочу удалить строки, если в Range("D5",Range("D5").End(xlDown)) обнаруживает, что определенные значения не совпадают, но когда я запускаю код, он пропускает некоторые значения.

Это мой код:

Dim Codex As Range
Set Codex = Worksheets("Centerlines Tracking").Range("D5", Range("D5").End(xlDown))

For Each Cell In Codex
    If Cell.Value = "AD001" _
    Or Cell.Value = "AD002" _
    Or Cell.Value = "AD015" _
    Or Cell.Value = "AD031" _
    Or Cell.Value = "AD005" _
    Or Cell.Value = "AD035" _
    Or Cell.Value = "AD100" _
    Or Cell.Value = "AD107" _
    Or Cell.Value = "AD108" _
    Or Cell.Value = "AD152" _
    Or Cell.Value = "AD173" _
    Or Cell.Value = "CO017" _
    Or Cell.Value = "CO081" _
    Or Cell.Value = "CO102" _
    Or Cell.Value = "CO035" _
    Or Cell.Value = "CO169" _
    Or Cell.Value = "CR003" Then

    Else
        Cell.EntireRow.Delete
    End If
Next

Большое спасибо заранее

Ответы [ 2 ]

1 голос
/ 22 января 2020

Вы должны l oop назад при удалении строк, иначе вы можете пропустить строки. Следовательно, вы также должны переключиться на счетчик в вашем l oop.

Sub x()

Dim Codex As Range, i As Long

Set Codex = Worksheets("Centerlines Tracking").Range("D5", Range("D5").End(xlDown))

For i = Codex.Count To 1 Step -1
    Select Case Codex.Cells(i)
        Case "AD001", "AD002", "AD015", "AD031", "AD005", "AD035", "AD100", "AD107", "AD108", _
             "AD152", "AD173", "CO017", "CO081", "CO102", "CO035", "CO169", "CR003"
            'do nothing
        Case Else
            Codex.Cells(i).EntireRow.Delete
    End Select
Next i

End Sub
0 голосов
/ 22 января 2020

Рассмотрите возможность использования этой функции: https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/instr-function

Плюс оператор выбора случая:

testvalue = VBA.Trim(Cell.Value) '' use trim() to normalize the input
''debug.print(testvalue) ''enable this line to see what is happening in debug

Select Case True

   Case instr(testvalue, "CR003", 1, vbTextCompare) ''use vbTextCompare to ignore caps/lower
   ''do stuff like delete or w/e
   Case instr(testvalue, "CR004", 1, vbTextCompare)

   Case Else
   ''do nothing or put a goto next: label
End Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...