Как удалить строки Excel, содержащие ячейки с количеством символов меньше определенного? - PullRequest
2 голосов
/ 01 июля 2019

Это то, что я хочу сделать:

enter link description here

И я тоже попробовал anwsers в этой теме; - Как удалить ячейку из Excel, которая содержит меньшечем 3 персонажа?У меня есть только один столбец на листе

Но я не могу заставить его работать.

Я пробовал некоторые коды, подобные этим, после поиска в течение нескольких часов, но ни один из них не работал илиможет быть, я делаю не правильно:

Код 1:

With ActiveSheet    
    lastrow = .Cells(.Rows.Count, "N").End(xlUp).Row
    For i = lastrow To 2 Step -1    
        If Len(.Cells(i, "N").Value) < 6 Then    
            .Rows(i).Delete
       End If
    Next i

Код 2:

Sub M_snb()
    [N1:N100] = [if(len(N1:N100)<6,"",N1:N100))]
    Columns(14).SpecialCells(4).EntireRow.Delete
End Sub

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Удаление строк из Excel является довольно «дорогой» задачей, поэтому для экономии времени это следует делать не построчно, а сразу:

Sub RemoveRows()

    Dim rowsToDelete    As Range
    Dim cnt             As Long
    Dim currentlastRow  As Long
    Dim ws              As Worksheet
    Dim myCell          As Range

    Set ws = Worksheets(1)
    currentlastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    For cnt = 1 To currentlastRow
        Set myCell = ws.Cells(cnt, 1)
        If Len(myCell.Value2) < 6 Then
            If rowsToDelete Is Nothing Then
                Set rowsToDelete = myCell.EntireRow
            Else
                Set rowsToDelete = Union(rowsToDelete, myCell.EntireRow)
            End If
        End If
    Next cnt

    If Not rowsToDelete Is Nothing Then
        rowsToDelete.Delete
    End If

End Sub

Таким образом, в приведенном выше коде rowsToDelete - это диапазон с ячейками, которые должны быть удалены. Удаление выполняется только один раз:

If Not rowsToDelete Is Nothing Then
    rowsToDelete.Delete
End If
0 голосов
/ 01 июля 2019

Этот код удалит ваши строки в столбце A:

Sub remove_rows()

    With ActiveSheet

    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    For i = LastRow To 2 Step -1

        If Len(Trim(.Range("A" & i).Value)) < 6 Then

            .Rows(i).EntireRow.Delete

       End If
    Next i

    End With

End Sub

Измените A на любой другой столбец, если хотите.

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