使用 VBA 程式碼對過濾清單中的空白儲存格進行 VBA 偵錯

使用 VBA 程式碼對過濾清單中的空白儲存格進行 VBA 偵錯

如果答案很明顯,我深表歉意,因為我只使用 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.

相關內容