VBA-Debug beim Zählen leerer Zellen in einer gefilterten Liste mit VBA-Code

VBA-Debug beim Zählen leerer Zellen in einer gefilterten Liste mit VBA-Code

Entschuldigen Sie, wenn die Antwort offensichtlich ist, ich verwende VBA erst seit einer Woche. Ich möchte die Zellen in einem separaten Blatt filtern und dann die verbleibenden Leerzeichen in der gefilterten Liste zählen. Ich habe die Codegrundlagen aus vorhandenen Antworten, habe sie mir also nicht selbst ausgedacht, und es funktioniert fast, aber ich dachte, ich frage mal, nachdem ich 3 Stunden darauf gestarrt und verschiedene Sachen ausprobiert habe.

Der Code erzeugt ein Ergebnis, es ist jedes Mal nur 1 mehr als korrekt, sodass in der gefilterten Liste zwei Leerzeichen vorhanden sind, die Ausgabe jedoch 3 ist. Habe alle möglichen Anpassungen an der Liste versucht, aber es ist immer 1 mehr als erwartet. Ich werde versuchen, Bilder der Liste anzuhängen, die ich filtere.

Ich habe auch Code, um das Ende des Bereichs dynamisch zu finden und den Filter anzuwenden. Ich werde auch eine Codezeile zum Aufheben des Filters hinzufügen, sobald ich diesen Teil zum Laufen gebracht habe.

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

Vielen Dank im Voraus für jede Hilfe.

Bild der ungefilterten Liste

Antwort1

Der Grund dafür 3ist, dass Sie derzeit nach sichtbaren Zellen suchen, die Inhalt in der BSpalte haben. Es umfasst also die Kopfzeile UND die beiden Zellen, die nach Anwendung des Filters Inhalt haben.


Wenn Ihr Ziel darin besteht, die Anzahl der leeren Zellen mit den Kriterien in Spalte A zurückzugeben, können Sie auch Folgendes verwenden:

Sub Test()

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

End Sub

Für Ihre Beispieldaten wird Folgendes zurückgegeben 2:

verwandte Informationen