¿Cómo obtengo el recuento de filas visibles después del filter en Excel VBA?

En mi hoja de Excel, estoy aplicando un filter y luego estoy contando las filas visibles. Usé el siguiente código, pero me estoy equivocando. Cuando tengo xlCellTypeVisible , muestra "12" loggings en lugar de "14" loggings y visibleTotal variable total muestra "0".

 Dim ws As Worksheet Dim rng As Range Dim visibleTotal As Long 'xlwkbOutput.Sheets("Sheet1") Set rng = xlwkbOutput.Sheets("Sheet1").Range("A1:T" & lastRow&) xlwkbOutput.Sheets("Sheet1").AutoFilterMode = False rng.AutoFilter field:=1, Criteria1:="#N/A" visibleTotal = Application.WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeVisible)) ' print to the immediate window Debug.Print visibleTotal 

su narrativa trata de "contar las filas visibles" mientras que su código muestra una function SUM()

de todos modos, así es cómo puedes get ambos numbers, teniendo en count que Autofilter() siempre filtrará la fila de encabezado , es decir, la primera fila del range al que se está llamando.

 Option Explicit Sub main() Dim visibleTotal As Long, visibleRows As Long With xlwkbOutput.Sheets("Sheet1") '<-- reference your worksheet .AutoFilterMode = False With .Range("A1:T5") '<-- reference its relevant range .AutoFilter field:=1, Criteria1:="#N/A" '<-- apply filter: first row (headers) will always be selected visibleRows = Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) - 1 '<-- count visible rows, excluding headers (always filtenetworking) If visibleRows > 0 Then visibleTotal = Application.WorksheetFunction.Sum(.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)) '<-- sum all visible cells, excluding headers (always filtenetworking) ' print to the immediate window Debug.Print visibleTotal End With .AutoFilterMode = False End With End Sub 

Quizás puedas hacer uso de la function SUBTOTAL . Esta function se usa muy a menudo cuando tiene valores filtrados. Puedes adaptar tu código a:

 ' To SUM filtenetworking rows use 9 as argument of SUBTOTAL or to COUNTA use 3 ' "- 1" is to exclude the first row, probably the header of your range; otherwise remove it visibleTotal = Application.WorksheetFunction.Subtotal(9, rng) - 1 

SUBTOTAL Lista de arguments:

 1 AVERAGE 2 COUNT 3 COUNTA 4 MAX 5 MIN 6 PRODUCT 7 STDEV 8 STDEVP 9 SUM 10 VAR 11 VARP 

Para get más información acerca de esta function, puede consultar el enlace.

HTH;)

No lo sé, ¿no quieres utilizar la function Contar en su lugar? Es difícil de decir, pero el comportamiento me parece correcto. Es difícil de decir, cuando no tenemos datos. Intenta aplicar la function sum en la hoja de trabajo en las celdas visibles, y comtesting qué devuelve, si es igual que en la macro.