如果答案很明顯,我深表歉意,因為我只使用 VBA 一周。想要篩選單獨工作表中的儲存格,然後計算篩選清單中留下的空白。我已經從現有的答案中獲得了代碼基礎知識,所以我自己沒有編造,而且它幾乎可以工作,但我想我會在盯著這個問題 3 個小時並嘗試不同的東西後問。
程式碼產生的結果,每次都比正確值多 1,因此過濾後的列表中有兩個空白,但輸出是 3。將嘗試附上我正在過濾的清單的圖片。
我還有程式碼來動態查找範圍的末尾並應用過濾器。一旦我開始工作,我也會新增一個「unfilter」程式碼行。
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
.