Код для удаления строк, содержащих строку поиска, пропускает некоторые строки со строкой - PullRequest
0 голосов
/ 13 декабря 2018

Ниже я написал некоторый код в Excel VBA, который удаляет строки на основе пользовательского ввода.Это почти полностью работает, но в некоторых случаях оставляет один или два экземпляра строки поиска в данных.

Dim SrchStr As String

'enter email address to be searched

SrchStr = InputBox("Enter email")

'open each file and if email address is found, delete that row and save workbook

Workbooks.Open File1
Dim Cell As Variant
Dim SrchRng As Range
Set SrchRng = ActiveSheet.UsedRange

For Each Cell In SrchRng
    If Cell.Value = SrchStr Then
        Cell.EntireRow.Delete
    End If
Next Cell

ActiveWorkbook.Close SaveChanges:=True

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Попробуйте этот код:

Dim SrchStr As String

'enter email address to be searched

SrchStr = InputBox("Enter email")

'open each file and if email address is found, delete that row and save workbook

Workbooks.Open File1
Dim Cell As Variant
Dim SrchRng As range
Set SrchRng = ActiveSheet.UsedRange

lastIndex = SrchRng.Rows.Count

For i = lastIndex To 1 Step -1
    For Each Cell In SrchRng.Rows(i).Cells
        If Cell.Value = SrchStr Then
            Cell.EntireRow.Delete
            Exit For
        End If
    Next
Next

ActiveWorkbook.Close SaveChanges:=True
0 голосов
/ 13 декабря 2018

Вам нужно удалить снизу вверх.Это потому, что когда вы удаляете строку, строки ниже сдвигаются вверх, то есть «следующая» ячейка, которую нужно проверить, будет в той же строке, а не в следующей.Работа от начала до конца обходит это аккуратно.

Dim i as Long
With SrchRng
    For i = .Cells.Count To 1 Step -1
        If .Cells(i).Value = SrchStr Then
        .Cells(i).EntireRow.Delete
        End If
    Next 
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...