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.
Respuesta1
Para hacerle saber por qué esto regresa 3
, es que actualmente está buscando celdas visibles que tengan contenido en la B
columna. 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
.