Необходимо дважды запустить макрос «Удалить строку, если ячейка содержит числа»

#excel #vba

#excel #vba

Вопрос:

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

Я не могу понять, что не работает

Спасибо

 Sub DoesCellHaveNumer()
Dim ws As Worksheet
Dim Rng As Range
Dim acell As Range
Dim LR As Long

Set ws = ThisWorkbook.Sheets(1)
    LR = ws.Range("A" amp; ws.Rows.Count).End(xlUp).Row
    Set Rng = ws.Range("B2:B" amp; LR)

    For Each acell In Rng
        If HasNumber(acell) = True Then acell.EntireRow.Delete
    Next acell

End Sub
  

.

 Function HasNumber(strData As Variant) As Boolean
Dim iCnt As Integer

For iCnt = 1 To Len(strData)
    If IsNumeric(Mid(strData, iCnt, 1)) Then
        HasNumber = True
        Exit Function
    End If
Next iCnt

End Function
  

Ответ №1:

Когда вы удаляете строку в цикле, ваш цикл становится искаженным. Один из способов исправить это — обратный цикл, однако более быстрый:

 Sub DoesCellHaveNumer()
    Dim ws As Worksheet
    Dim Rng As Range
    Dim acell As Range
    Dim rngToDel As Range
    Dim LR As Long

    Set ws = ThisWorkbook.Sheets(1)
    With ws
        LR = .Range("A" amp; .Rows.Count).End(xlUp).Row
        Set Rng = .Range("B2:B" amp; LR)
    End With


    For Each acell In Rng
        If HasNumber(acell) Then
            If rngToDel Is Nothing Then
                Set rngToDel = acell
            Else
                Set rngToDel = Union(rngToDel, acell)
            End If
        End If
    Next acell

    If Not rngToDel Is Nothing Then rngToDel.EntireRow.Delete
End Sub
  

Комментарии:

1. Спасибо за код, а также за объяснение