使用 VBA 代码对过滤列表中的空白单元格进行计数进行 VBA 调试

使用 VBA 代码对过滤列表中的空白单元格进行计数进行 VBA 调试

如果答案很明显,请见谅,我只使用 VBA 一周。想要在单独的工作表中过滤单元格,然后计算过滤列表中剩余的空白。我已经从现有答案中获得了代码基础知识,因此没有自己编造,而且它几乎可以正常工作,但在盯着这个 3 个小时并尝试了不同的东西后,我想问一下。

代码产生了结果,每次都比正确的结果多 1,因此过滤后的列表中有两个空白,但输出是 3。尝试了对列表进行各种调整,但总是比预期多 1。将尝试附上我正在过滤的列表的图片。

我还有代码来动态查找范围的结束并应用过滤器。一旦我让这部分工作起来,我也会添加“取消过滤”代码行。

Sub BlankCheck()
    ' Find last free row
    Dim lRow As Long
        lRow = Worksheets(2).Cells.Find(What:="*", _
            After:=Range("A1"), _
            LookAt:=xlPart, _
            LookIn:=xlFormulas, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, _
            MatchCase:=False).Row
    
    ' Filter
    Worksheets(2).UsedRange.AutoFilter Field:=1, Criteria1:="test"
    
    ' Count visible blanks
    Worksheets(1).Cells(1, 1) = Range(Worksheets(2).Cells(1, 2), Worksheets(2).Cells(lRow, 2)). _
    SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).Count
    
End Sub

在此先感谢您的帮助。

未过滤列表的图片

答案1

让您了解返回的原因3,是因为您当前正在寻找列中包含内容的可见单元格B。因此,它包括标题和应用过滤器后包含内容的两个单元格。


如果您的目标是返回 A 列中符合条件的空单元格的数量,那么您也可以使用:

Sub Test()

With ThisWorkbook.Worksheets("Sheet1")
    Debug.Print Application.WorksheetFunction.CountIfs(.Range("A:A"), "test", .Range("B:B"), "")
End With

End Sub

在您的样本数据中,这将返回2

相关内容