VBA скрипт для поиска строки в столбце и удаления всей строки, содержащей эту строку? - PullRequest
0 голосов
/ 14 января 2019

У меня есть около 100 строк с 10 столбцами. Я хочу удалить всю строку, если ячейка в столбце B (или 2) содержит определенную строку «XYZ» (скажем)

Приведенный ниже код отлично работает, если строка присутствует в начале. Но я хочу, чтобы это работало и для следующих случаев:

  1. "XYZadjsaoda" (Случай 1: Начало строки)
  2. "asdsalXYZasdsa" (Случай 2: середина строки)
  3. "dsadsad32XYZ" (Случай 3: Конец строки)

Если строка присутствует, следует удалить всю строку.

Sub DeleteRowBasedOnCriteria()
    Dim RowToTest As Long
    Sheets("Jira").Select
    For RowToTest = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
        With Cells(RowToTest, 2)
            If .Value = "XYZ" _        
            Then _
            Rows(RowToTest).EntireRow.Delete
        End With
    Next RowToTest
End Sub

Функция должна соответствовать XYZ независимо от расположения внутри ячейки и удалять всю строку.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

В качестве альтернативы оператору Like вы можете использовать функцию InStr :

If InStr(1, "XYZ", .Value, vbTextCompare) > 0 Then

Вы можете использовать ...

  • vbTextCompare, чтобы сделать его не чувствительным к регистру.
  • vbBinaryCompare, чтобы сделать его чувствительным к регистру.
0 голосов
/ 14 января 2019

Используйте оператор Like с подстановочными знаками (возможно, и с квалификацией регистра).

Хотя автофильтр может быть лучшим вариантом.

Sub DeleteRowBasedOnCriteria()
Dim RowToTest As Long
Sheets("Jira").Select
For RowToTest = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
    With Cells(RowToTest, 2)
        If .Value Like "*XYZ*" Then Rows(RowToTest).EntireRow.Delete
        'If ucase(.Value) Like "*XYZ*" Then Rows(RowToTest).EntireRow.Delete  CASE INSENSITIVE 
    End With
Next RowToTest
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...