必须运行两次宏“如果单元格包含数字,则删除行”

时间:2014-07-06 14:43:30

标签: excel-vba vba excel

如果单元格包含数字

,我必须运行Sub 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" & ws.Rows.Count).End(xlUp).Row
    Set Rng = ws.Range("B2:B" & 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 个答案:

答案 0 :(得分: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" & .Rows.Count).End(xlUp).Row
        Set Rng = .Range("B2:B" & 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