如果答案很明显,请见谅,我只使用 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
。