Depuración de VBA al contar celdas en blanco en una lista filtrada con código VBA

Depuración de VBA al contar celdas en blanco en una lista filtrada con código VBA

Disculpas si la respuesta es obvia, solo he usado VBA durante una semana. Quiere filtrar las celdas en una hoja separada y luego contar los espacios en blanco que quedan en la lista filtrada. Obtuve los conceptos básicos del código de las respuestas existentes, así que no lo inventé yo mismo y casi funciona, pero pensé en preguntar después de mirar esto durante 3 horas y probar cosas diferentes.

El código produce un resultado, es solo 1 más de lo correcto cada vez, por lo que hay dos espacios en blanco en la lista filtrada pero el resultado es 3. He intentado todo tipo de ajustes a la lista, pero siempre es 1 más de lo esperado. Intentaré adjuntar imágenes de la lista que estoy filtrando.

También tengo código para encontrar dinámicamente el final del rango y aplicar el filtro. También agregaré una línea de código para "desfiltrar" una vez que esto funcione.

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

Gracias de antemano por cualquier ayuda.

imagen de lista sin filtrar

Respuesta1

Para hacerle saber por qué esto regresa 3, es que actualmente está buscando celdas visibles que tengan contenido en la Bcolumna. Por lo tanto, incluye el encabezado Y las dos celdas que tienen contenido después de aplicar el filtro.


Si su objetivo es devolver el número de celdas vacías con los criterios de la columna A, también puede utilizar:

Sub Test()

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

End Sub

En sus datos de muestra, esto devuelve 2.

información relacionada