Me hicieron una consulta muy buena, la cual una vez necesité aplicar en un proyecto... que al final nunca hice, por que de vago y para no renegar lo dejé como estaba. Pero como en este caso se trata de un lector del blog, analicé un poco la situación y encontré la forma de solucionar el tema.
La cuestión viene así: tengo una tabla cualquiera y le aplico un AutoFiltro ¿notaron que luego de filtrar aparece en la StatusBar de Excel la cantidad de resultados obtenidos? (la StatusBar es esa "leyenda" que aparece en el margen inferior izquierdo de la planilla).
Esta es la tabla, a la cual filtré para que me muestre los valores mayores a 1000:
Obtuve 3 resultados, cosa que luego puedo visualizar en la StatusBar:
[+/-] Ver el resto / Ocultar
Pero si yo quisiera tener ese resultado (3) en una celda o almacenarlo en una variable ¿como hago?
Deben existir, como siempre, varias formas... pero se me ocurrió una sola: con la función SUBTOTALES().
Repasemos un poco esta función, la cual consta de 2 argumentos:
=SUBTOTALES(número_función, rango)
Ese primer argumento puede contener hasta 11 valores, de acuerdo a la ayuda que nos proporciona Excel:
1 PROMEDIO
2 CONTAR
3 CONTARA
4 MAX
5 MIN
6 PRODUCTO
7 DESVEST
8 DESVESTP
9 SUMA
10 VAR
11 VARP
y el segundo, el rango a evaluar.
Vamos a un ejemplo que directamente resuelve lo planteado por mi lector:
Analicemos la imagen superior: usé el nro 3 como primer argumento, es decir que los subtotales serán mostrados en base a CONTARA(), que cuenta las celdas con cualquier valor (numeros, textos, lógicos, etc, etc). Noten que el segundo argumento (el rango) comienza en A2, para evitar que CONTARA() incluya en su resultado el encabezado de la tabla. Es muy sencillo y efectivo.
Si cambio algún parámetro de filtrado y obtengo una cantidad de registros distinta, en C1 tendré el resultado de dicha consulta:
un solo resultado, el cual se refleja fielmente en C1
Podríamos mejorar un poco las cosas, concatenando funciones y texto, para mostrar como lo hace Excel:
en la barra de fórmulas pueden ver como armé la cadena de texto con los resultados.
Lo bueno de SUBTOTALES() es que solo tendrá en cuenta a las celdas visibles, de allí que me permita mostrar los resultados de un AutoFiltro sin problemas.
Si por una determinada cuestión necesitamos hacerlo con macros.... es lo mismo, echando mano de las WorksheetFunctions de VBA, como muestro en el siguiente código:
Sub CountFilterResult()
Dim Res
'llamo a la worksheetfunction correspondiente a SUBTOTALES,
'almacenando el resultado en Res:
Res = Application.WorksheetFunction.Subtotal(3, Range("a2:a20"))
'y lo muestro en un MsgBox
MsgBox Res
End Sub
La prueba de que todo anda bien:
Espero que les sea de utilidad y sepan disculpar la gran escasez de entradas de los últimos tiempos, pero estimo que para fin de año queda resuelto.
Un abrazo.
Comentarios
Publicar un comentario