Vamos a hacer un ejercicio para ocultar filas de una tabla. Quiero aclarar que esto se puede hacer también con los autofiltros de Excel, pero es un buen ejercicio para introducir conceptos de macros y terminología de VBA.
En el ejemplo tenemos una tabla de ventas, y queremos poder seleccionar una familia y que se oculten todas las filas que no sean de esa familia. Y también deberemos poder volver a visualizarlas todas
Recordemos que para poder hacer macros debemos tener la pestaña Desarrollador visible, si no lo está debemos
Ir a Archivo, Opciones, Personalizar cinta de opciones, y en la parte de la derecha activar Desarrollador.
También debemos guardar el archivo como habilitado para Macros. Al guardar como, elegir tipo de archivo:
Abrimos el ejercicio de muestra donde ya tenemos la tabla y un campo que nos pregunta la familia.
Debemos añadir un botón que ejecute una macro que oculte las filas que NO son de esa familia
Vamos a la pestaña Desarrollador, Insertar, elegimos la herramienta botón y dibujamos un rectángulo con el botón que nos interesa. Le damos nombre a la macro y pulsamos Nuevo
Se nos muestra el editor de VBA.
La idea es que nos situamos en la casilla B7 y si su familia es igual a la de la casilla B1 la dejamos visible, y si es distinta la borramos
Y luego seguimos con la celda B8, B9, así sucesivamente, hasta que la celda este en vacía, cosa que nos indica que se terminó la tabla. Así pues haremos un bucle que recorra todas las filas de la tabla.
Nos situamos pues en la celda B7
Range(«B7»).Select
Iniciamos un bucle mientras que la celda activa no este vacía. Siempre que iniciemos un bucle, cerrémoslo, y luego insertamos en medio lo que necesitamos
Do While ActiveCell.Value <> «»
Loop
Hacemos que, Si el valor de la celda activa es distinto del valor de la celda B1, entonces
If ActiveCell.Value <> Range(«B1»).Value Then
Ocultemos toda la fila
ActiveCell.EntireRow.Hidden = True
Y cerramos el SI
End if
Ahora debemos avanzar y movernos a la siguiente fila con
ActiveCell.Offset(1, 0).Select
Offset es una instrucción para desplazarnos desde una posición a otra
El procedimiento ha quedado como
Pongo el código entero aquí por si lo quieres copiar, aunque te aconsejo que los escribas para practicar.
Sub OcultarFilas()
Range(«B7»).Select
Do While ActiveCell.Value <> «»
If ActiveCell.Value <> Range(«B1»).Value Then
ActiveCell.EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Vamos a probarlo, volvemos al Excel y pulsamos el botón. Excel filtra y nos muestra solo las filas de la familia seleccionada
Bien para volver a empezar, nos falta un botón que muestre todas las filas. Vamos a Desarrollador, Insertar, dibujamos un botón, le ponemos nombre y pulsamos nuevo para escribir el código
Sub MostrarFilas()
Rows.EntireRow.Hidden = False
End Sub
Si lo probamos deberíamos ver todas las filas
Ahora si elegimos una familia y filtramos vemos solo esa. Si inmediatamente elegimos otra familia y filtramos no vemos nada.
Claro entre el primer y segundo paso se han ocultado filas.
Por lo tanto sugiero que antes de filtrar se muestren todas. Esto lo hacemos insertando la línea
Call MostrarFilas
Como primera instrucción de la macro de OcultarFilas.
Podríamos poner otra vez Rows.EntireRow.Hidden = False, pero una buena práctica es aprovechar el código ya escrito y llamarlo (Call) para que se ejecute.
Gracias, estoy haciendo un trabajo semejante y voy a probar con algo por el estilo.
Agradecido por su excelente explicación ya que detalla la traducción por cada una de las filas que integran la macro la cual esta en lenguaje de programación
Excelente ayuda, me diste el input para ajustarlo a mis necesidades 🙂
Excelente explicación, si hubiese puntuación te dejara x1000