2015-06-01 3 views
1

У меня есть файл excel, где на ячейках столбца 3d (C) есть текст. Если строка ячейки не содержит: "(DELETED)", я хочу, чтобы вся строка была удалена. Я пробовал следующий код, и он работает, но насколько это касается синтаксиса, его нужно отредактировать.Удалить строки Excel, если они не содержат определенную строку в ячейке

Print Screen of the Excel file

Sub sbDelete_Rows_IF_Cell_Contains_Specific_String() 
Dim lRow As Long 
Dim iCntr As Long 
lRow = 5 
    For iCntr = lRow To 1 Step -1 
    celltxt = Cells(iCntr, 3).Value 
    If InStr(1, celltxt, "(DELETED)") Then 

    Else 
    Rows(iCntr).Delete 
    End If 
    Next 
End Sub 

Если сценарий находит клетки, которые содержат строку: «(Исключено)», то программа не будет ничего делать. Он удалит те, которые не содержат эту строку. Синтаксис плох, и мне интересно, как я могу комбинировать функции «InStr» и «IF NOT».

+1

Функция InStr возвращает целое число, указывающее позицию текст можно найти по адресу , Хотя он может работать как логический, я бы посоветовал вам проверить, вернёт ли функция instr 0 (не найден) или положительное число (найдено). В вашем случае, вероятно, достаточно иметь Instr (1, celltxt, "" (Deleted) ") = 0 в инструкции if и затем удалить строку. – Tom

+1

Изменить' If InStr (1, celltxt, "(DELETED)") Затем 'to' If Not InStr ..... 'и избавиться от' Else'. Это то, что вы имели в виду? – nhee

+0

@nhee «If Not» не работает для меня. Возможно, это была ошибка. –

ответ

2

Как уже упоминалось, Том, он возвращает целое число, так что было бы легче сделать что-то вроде этого, а не с помощью NOT

Sub test() 
Dim lrow As Integer 
lrow = Cells(Rows.Count, "A").End(xlUp).Row 

For i = lrow To 1 Step -1 
    If InStr(1, Cells(i, 3), "(DELETED)") = 0 Then 
     Rows(i).EntireRow.Delete 
    End If 
Next 
End Sub 
+0

Идеально. Что означает «A»? –

+0

«A» - это буква столбца, которое оно считает. – Raystafarian

+0

Это может быть все, что я могу предположить. «B». Хорошо ли использовать «ws.Rows.Count» вместо? –

Смежные вопросы