/ / Excel VBA видаляє рядок, якщо містить певні рядки або має набір прапорів видалення - excel, vba

Excel VBA видаляє рядок, якщо містить певні рядки або має прапорець delete set - excel, vba

Я намагаюся шукати стовпець B для 3 різних рядків. Мені потрібно, щоб шукати місто, штат і zip, і якщо будь-яка з стовпців має відповідність міста, штату або zips, то мені потрібен цей рядок.

У мене також є налаштування для видалення рядка, якщо є 0 на початку поля в колонці D, але я не міг змусити цього працювати.

Ось код, який я маю дотепер:

Sub Removal()
Dim i As Long

For i = Range("B" & Rows.Count).End(xlUp).Row To 1 Step -1
If Left(Range("D" & i), 1) = "0" Then
Rows(i).Delete
Else
Select Case LCase(Range("B" & i))
Case Is = "Orlando", "FL", "37941"
Rows(i).Delete
End Select
End If
Next i
End Sub

Код не робить нічого.

Відповіді:

1 для відповіді № 1

Це тому, що ви робите LCase на значеннях у стовпці B, але порівняно з TitleCase ("Orlando") і UpperCase "FL" слова у вашій заяві Case.

Змініть свій код так, як ви. Я перевірив його на своєму локальному Excel і він працює.

UPDATE Я також змінив код для обробки випадків, про які ви згадували в коментарях.

Sub Removal()
Dim i As Long, searchString As String

For i = Range("B" & Rows.Count).End(xlUp).Row To 1 Step -1
" if a row is marked for deletion, delete it and continue.
If Left(Range("D" & i), 1) = "0" Then
Rows(i).Delete
" skip to next row
GoTo NextRow
End If

searchString = LCase(Range("B" & i))

If (InStr(1, searchString, "orlando") > 0) Or _
(InStr(1, searchString, "fl") > 0) Or _
(InStr(1, searchString, "37941") > 0) Then
Rows(i).Delete
End If

NextRow:
Next i

End Sub

ПЕРЕД Виконуваним кодом:

раніше

AFTER Код виконання:

після