En esta lección, vas a aprender a insertar un autofiltro y a filtrar de manera automática usando macros, además de ordenar los datos en base a una o varias columnas. ¡Empecemos!
Existe un estudio que asegura que en el 95% de las hojas de cálculo existe una tabla. Esto es normal porque tendemos a funcionar como funcionan las bases de datos, a base de registros.
Si tuviéramos que elegir las funcionalidades indispensables de una tabla, sin duda serían el filtrado de datos y su ordenación. No es funcional una tabla en la que no podamos buscar de forma rápida los datos que contiene y ordenarlos de manera adecuada.
1. Insertar un autofiltro en una tabla de manera automática.
Para insertar un autofiltro en nuestra tabla de manera automática mediante macros, usaremos la propiedad AutoFilter, que tiene la siguiente sintaxis:
Usando este comando, introducimos el filtro en la cabecera de la tabla especificada. Si volviéramos a repetirlo, este filtro desaparecería.
Con el filtro introducido, ya tenemos opción de ordenar la tabla de manera manual, pero nosotros queremos que la ordenación sea automática. ¿Cómo? Vamos a verlo.
2. Ordenar elementos de una tabla de forma automática.
Podemos ordenar los elementos de una lista en función de uno o varios campos.
Si solo usamos un campo como criterio, escribiremos:
Vamos a destripar el comando anterior para entenderlo mejor. El primer rango (C4-G28) hace referencia al rango completo de la tabla a ordenar. En este caso hemos incluido el encabezado de la misma, por eso al final del comando le decimos que está incluido Header:=xlYes. Si en el rango hubiéramos excluido el encabezado, hubiéramos terminado el comando con Header:=xlNo.
A continuación, en el mismo comando encontramos la propiedad Key, que hace referencia al campo referencia para ordenar la tabla. Tal y como está en el ejemplo, la tabla se ordenará según la columna E.
También se indica el orden alfabético o numérico, es decir, si es ascendente o descendente con: xlAscending o xlDescending.
Si usamos, por ejemplo, dos campos como criterio, escribiremos:
Este caso es igual que el anterior, solo que añadimos una nueva Key con sus parámetros correspondientes. De esta manera, la tabla se ordenará según las columnas C y E, prevaleciendo la columna C, que es la primera Key.
Veamos un ejemplo.
Crea un libro nuevo, abre el editor VBA, inserta 3 módulos y copia las siguientes macros.
Aquí te dejo los enlaces donde explico cómo configurar Microsoft Excel para el uso de macros, y el de cómo asignar macros a botones.
Macro 1. Insertar/eliminar un autofiltro del encabezado.
'Macro que inserta automáticamente un filtro en el encabezado de la tabla o lo elimina si volvemos a 'ejecutarla
Range("C4:G4").AutoFilter
End Sub
Macro 2. Ordenar una tabla en función de un campo.
'Macro que ordena alfabéticamente la tabla según el campo asignatura
Range("C4:G28").Sort Key1:=Range("E:E"), Order1:=xlAscending, Header:=xlYes
End Sub
Macro 3. Ordenar una tabla en función de varios campos.
'Macro que ordena alfabéticamente la tabla según los campos nombre, asignatura y nota, prevaleciendo en este orden
Range("C4:G28").Sort Key1:=Range("C:C"), Order1:=xlAscending, Key2:=Range("E:E"), Order2:=xlAscending, Key3:=Range("F:F"), Order3:=xlAscending, Header:=xlYes
End Sub
Ahora inserta tres botones y asociales las macros. Rellena la hoja Excel tal y como se muestra en la siguiente figura.
Si ejecutas la primera de las macros, verás como aparece un autofiltro en el encabezado de la tabla y, manualmente, podrías ordenar las columnas a tu antojo.
Si vuelves a ejecutar la macro, desaparece el autofiltro.
Ejecuta ahora la segunda macro para que la tabla se ordene de manera automática y de forma ascendente según la columna “Asignatura”.
Con la tercera macro, el orden de la tabla atiende a tres criterios: nombre, asignatura y nota, por este orden.
Ya sabemos ordenar una tabla después de realizar con ella cualquier tipo de operación como las que ya hemos visto: inserción de filas, borrado de filas, modificación del contenido….
Con esto llegamos al final de la décima lección, en la que has aprendido a insertar un autofiltro usando macros y a ordenar automáticamente los datos de una tabla.
Espero que te esté gustando el curso. Si quieres, puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Nos vemos en el próximo capítulo.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
4 Comentarios
Enviar un comentario
« L9. Combinar celdas con macros.
L11. Buscar el inicio y fin de una tabla con macros. »
Hola a esta tabla existe una forma, de colocar digamos una "base de datos" y que me ordene dicha información en una categoría que yo asigne? Ejemplo si yo tengo que "pedro" pertenece a la zona "sur" al yo ingresar ese Pedro que esta en la base de datos, me lo asigne automáticamente a la categoría "sur"?
Hola Romer,
Claro que es posible. Échale un vistazo al post cómo buscar un valor en una columna excel usando find
También a este: Evento change de worksheet y el metodo intersect en vba
Al actualizar la celda nombre (usando evento change), desencadena una búsqueda (usando Find) en la BBDD y recupera el valor de la zona a la que pertenece.
Si tienes cualquier duda, sube al foro un ejemplo y le echamos un vistazo.
Saludos.
Hola!
Me gusta su manera de explicar.
Necesito ir mas alla, ordenar, filtrar y copiar el redultado del filtro a otra hoja.
Esto hace que los rango resultante de los filtros tengan tamaños variables.
Podria ejemplificar esto.
Gracias por adelantado
Hola Guillermo!
En ese caso, tendrás que buscar la última fila con datos después de realizar el filtrado de datos.
Échale un vistazo a este post donde explico cómo hacerlo:
https://www.vbatotal.com/leccion-11-buscar-la-primera-y-ultima-fila-o-columna-usando-una-macro/
Si tienes cualquier problema, no dudes en preguntar de nuevo.
Saludos.