Удалить строку в столбце, если длина ячейки не соответствует условию - PullRequest
0 голосов
/ 03 октября 2019

Я работаю в коде в Excel VBA, чтобы удалить строки, если значение длины ячейки не равно 10

Я пытаюсь избежать использования фильтров, потому что я использую файл, который содержит около 1 миллионастрок, а при использовании фильтров Excel вылетает.

это то, что мне нужно

Например:

Столбец A содержит идентификационные номера,

но если длина ячейки с идентификатором не 10 символов

Я хочу удалить строку, эта строка мне не нужна

Я обыскал форумы и собрал несколько кодов длясоздайте следующий код

Sub DeleteRows()
    Dim c As Range
    Dim LR As Integer
    Dim i As Integer
    Dim sht As Worksheet

    Set sht = Worksheets(2)

    LR = sht.Cells(Rows.Count, "A").End(xlUp).Row

    For i = 2 To LR
        For Each c In sht.Range("A2:A" & LR).Cells
            If Len(c.Value) <> 10 Then
                c.EntireRow.Delete
            End If                              '<---------here is the error
        Next
    Next

    Range("A1").Select

End Sub

, когда макрос работает, он застрял, я должен нажать ESC , чтобы остановить макрос, и ошибка появляется в строке End If

Этот макрос удаляет строки, которые не соответствуют условию длины, когда я нажимаю кнопку ESC

Есть ли решение в этом коде? или существует лучший метод для удаления строк без использования фильтров?

1 Ответ

0 голосов
/ 03 октября 2019

Поскольку вы удаляете строки, вам действительно следует считать вверх, так как это испортит ваш счет. Например, я нахожусь в строке 3, а затем удаляю строку 3, теперь строка 4 находится в строке 3, и я собираюсь продолжить на том, что раньше было строкой 5. Поэтому вместо этого продолжайте свой путь снизу вверх.

Sub DeleteRows()
    Dim LR As Long
    Dim i As Long
    Dim sht As Worksheet

    Set sht = Worksheets(2)

    LR = sht.Cells(Rows.Count, "A").End(xlUp).Row

    For i = LR to 2 Step -1
        If Len(sht.cells(i,1).value)<>10 then
            sht.Rows(i).delete
        End If
    Next

Range("A1").Select

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...