Desculpas se a resposta for óbvia, estou usando VBA há apenas uma semana. Deseja filtrar as células em uma planilha separada e conte os espaços em branco deixados na lista filtrada. Eu obtive o básico do código a partir de respostas existentes, então não inventei sozinho e quase funciona, mas pensei em perguntar depois de olhar para isso por 3 horas e tentar coisas diferentes.
O código produz um resultado, é apenas 1 a mais do que o correto a cada vez, então há dois espaços em branco na lista filtrada, mas a saída é 3. Tentei todos os tipos de ajustes na lista, mas é sempre 1 a mais que o esperado. Tentarei anexar fotos da lista que estou filtrando.
Também tenho código para encontrar dinamicamente o final do intervalo e aplicar o filtro. Também adicionarei uma linha de código 'unfilter' assim que essa parte funcionar.
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
Agradecemos antecipadamente por qualquer ajuda.
Responder1
Para que você saiba por que isso retorna 3
, é que atualmente você está procurando células visíveis que tenham conteúdo na B
coluna. Portanto, inclui o cabeçalho E as duas células que possuem conteúdo após a aplicação do filtro.
Se o seu objetivo é retornar o número de células vazias com os critérios da coluna A, você também pode usar:
Sub Test()
With ThisWorkbook.Worksheets("Sheet1")
Debug.Print Application.WorksheetFunction.CountIfs(.Range("A:A"), "test", .Range("B:B"), "")
End With
End Sub
Nos seus dados de amostra, isso retorna 2
.