En esta lección vas a aprender a eliminar rápidamente los duplicados de una columna en Excel, utilizando una de sus funciones. Este tema va a ser más cortito de lo habitual, pero merece la pena tratar el tema individualmente debido a su importancia.
Antes de que te pongas a programar como un loco bucles FOR para resolver este problema, vamos a aprender un método sencillo para filtrar de un listado aquellos elementos únicos, descartando las repeticiones de los mismos.
Si, por ejemplo, tenemos el siguiente listado:
vegetariano, carnívoro, omnívoro, vegetariano, omnívoro, vegetariano
y queremos obtener:
vegetariano, carnívoro, omnívoro (los componentes únicos del listado)
Usaríamos AdvancedFilter Unique.
¿Cómo? Pues de la siguiente manera.
Rango.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Destino, Unique:=True
- Rango: Es el rango del listado a filtrar.
- Destino: Celda inicial del rango donde queremos pegar el resultado del filtro.
Vamos a ver como lo utilizaríamos con un ejemplo práctico.
Crea un libro nuevo, abre el editor VBA e inserta tres módulos. Copia en ellos las siguientes macros.
Macro 1. Extraer los elementos no repetidos y ordenarlos alfabéticamente.
'Macro que extrae del listado ANIMALES los elementos únicos y los ordena por orden alfabético
'Borramos la columna E por si contiene algun dato
Range("E:E").ClearContents
Range("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("E1"), Unique:=True
Range("E1:E12").Sort Key1:=Range("E:E"), Order1:=xlAscending, Header:=xlYes
End Sub
Macro 2. Extraer las fechas no repetidas y ordenarlas alfabéticamente.
'Macro que extrae del listado FECHAS los elementos únicos y los ordena por orden alfabético
'Borramos la columna F por si contiene algun dato
Range("F:F").ClearContents
Range("C:C").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("F1"), Unique:=True
Range("F1:F12").Sort Key1:=Range("F:F"), Order1:=xlAscending, Header:=xlYes
End Sub
Macro 3. Restablecer la hoja de cálculo.
'Macro que restablece la hoja de cálculo
'Borramos los datos de la columna E
Range("E:E").ClearContents
'Borramos los datos de la columna F
Range("F:F").ClearContents
End Sub
A continuación, rellenamos la hoja igual que en la figura adjunta. Para ello también crearemos 3 botones y les asociaremos las macros anteriores.
Cuando ejecutamos la primera de las macros, filtramos lo elementos únicos del listado animales y luego ordenamos la lista resultante por orden alfabético.
Con este comando, lo que hemos dicho es: filtra todos los elementos de la columna B y copia sólo los elementos únicos a partir de la celda E1.
Como aprendimos en la lección 10, vamos a ordenar automáticamente los resultados mediante macros. Nótese que en el comando hemos incluido en el rango la celda E1 que es un título o encabezado. Para que el comando lo sepa y no lo incluya dentro de los elementos a ordenar, señalamos al final del comando Header:=xlYes.
Como vemos en la siguiente figura, en la columna E nos aparecen los animales únicos, es decir, no repetidos.
La segunda de las macros es igual que la primera, pero trabaja con fechas. De igual manera, va a filtrar los elementos de la columna C, y nos va a copiar a partir de la celda F1 los valores de fecha únicos.
Posteriormente los ordena por fecha:
El resultado será:
La tercera macro sirve para restablecer la hoja de cálculo y volver a ejecutar las macros si así se desea.
Con esto llegamos al final de la decimoséptima lección, en la que has aprendido a eliminar duplicados de una columna en Excel.
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
2 Comentarios
Enviar un comentario
« L16. Función FOR en VBA.
L18. Función GoTo en VBA. »
Gracias, muchas gracias por su tiempo
realmente si funciona
Gracias Pedro. Un placer 😉