使用CountA未显示为空行的空行

时间:2015-08-19 10:03:33

标签: vba excel-vba excel

为什么当第4,5和6行全部为空时,以下VBA脚本不显示任何消息框...

Sub Test()
LastRow = 40

For i = LastRow To 3 Step -1
    Set myRange = Range("B" & i & ":T" & i)
    If WorksheetFunction.CountA(myRange) = 0 Then
        MsgBox "Empty " & Cells(i, 1).Row
    Else
        x = x
    End If
Next
End Sub

3 个答案:

答案 0 :(得分:0)

只测试两个列范围:

Sub Test()
    LastRow = 40

    For i = LastRow To 3 Step -1
        count = WorksheetFunction.CountA(Range("B"&i & ":D"&i))
        count = count + WorksheetFunction.CountA(Range("F"&i & ":T"&i))    
        If count = 0 Then
            MsgBox "Empty " & i
        End If
    Next
End Sub  

编辑:或构建一个范围对象,其中包含两个列范围,与最后一行相交,并在循环中移动此范围对象。这样,您不会在每次迭代中重新构建范围对象:

Sub Test()
    Dim rng As Range, colrng As Range
    Dim LastRow As Long
    Dim i As Long

    LastRow = 40

    Set colrng = Application.Union(Range("B:D"), Range("F:T"))
    Set rng = Application.Intersect(colrng, Rows(LastRow))
    For i = LastRow To 3 Step -1
        If WorksheetFunction.CountA(rng) = 0 Then
            MsgBox "Empty row: " & i
        End If
        Set rng = rng.Offset(-1, 0)
    Next
End Sub

作为良好做法,请始终声明您的变量,并对行或列索引使用long整数。

答案 1 :(得分:0)

Sub Test()
LastRow = 40

For i = LastRow To 3 Step -1
    Set myRange = Range("B" & i & ":T" & i)
    If WorksheetFunction.CountIf(myRange,"<>") = 0 Then 'count where it's not a null or empty string
        MsgBox "Empty " & Cells(i, 1).Row
    Else
        x = x
    End If
Next
End Sub

答案 2 :(得分:0)

我能做到的唯一方法是缓慢的方式:

LastRow = Range("B:Z").Find(What:="*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastColumn = Cells.Find(What:="*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

For i = LastRow To 3 Step -1
    BlankRow = False
    For j = 2 To LastColumn
        If Cells(i, j).Value <> "" Then
            Blank = False
            Exit For
        End If
        BlankRow = True
    Next j
    If BlankRow = True Then
        x = x
    End If
Next i