Usualmente, cuando trabajamos con información a la cual le aplicamos un filtro para quedarnos solamente con algunas filas, deseamos que esas filas filtradas se copien a un nuevo libro de Excel.
Si bien, este proceso se puede realizar de manera manual, seleccionando el rango, copiándolo, abriendo un nuevo libro de excel, pegar la información y ajustar el tamaño de las columnas, mediante la siguiente macro presenta una alternativa que permite acelerar el proceso descrito. El código que nos permitirá realizarlo es el siguiente:
Sub Copiar_filtro()
'Paso 1
If ActiveSheet.AutoFilterMode = False Then
Exit Sub
End If
'Paso2
ActiveSheet.AutoFilter.Range.Copy
Workbooks.Add.Worksheets(1).Paste
'Paso 3
Cells.EntireColumn.AutoFit
'Paso 4
Application.DisplayAlerts = False
Sheets("Hoja2").Delete
Sheets("Hoja3").Delete
End Sub
A manera de ejemplo, veamos el siguiente archivo Copiar filas filtradas.
Éste contiene una hoja llamada "08061000000" en la cual se encuentra la información correspondiente a las exportaciones peruanas de Uva durante el año 2013, obtenido de la página web de SUNAT (https://www.sunat.gob.pe/).
En el paso 1, lo que hace la MACRO es verificar si es que se ha activado un filtro dentro de la hoja activa, de no ser así, la MACRO termina en este paso y no ocurre nada con la data de la hoja;
(Para mayor visualización de la imagen, hacer click en la misma)
si se detecta un filtro, se procede al paso 2.
(Para mayor visualización de la imagen, hacer click en la misma)
En el paso 2, lo que se hace es seleccionar el rango que se encuentre filtrado (en este caso se ha filtrado las exportaciones hacia Bélgica, "Belgium" en el archivo). Entonces, las filas filtradas se copian y se abre un nuevo libro de excel.
(Para mayor visualización de la imagen, hacer click en la misma)
En el paso 3, en el nuevo libro se ajusta el tamaño de las columnas que se han pegado
En el paso 4, lo que se hace simplemente es eliminar las hojas 2 y 3 que aparecen por default cuando se abre un nuevo libro, de tal manera que el libro generado para pegar la información filtrada solo cuente con una hoja (aquella con la información que habíamos filtrado)
NOTA: Al ser esta una tarea de uso frecuente, se recomienda que esta MACRO se guarde dentro del libro personal de macros.
-----------------------------------------------------------
Elaborado por: Diego Solís Pezzia
10/09/2014 a las 10:37 pm
gracias Diego por el macro
Copiar filas filtradas hacia un nuevo libro
si quiero hacer un indice de paises, para que la macro copie cierta celdas del listado original, y las pegue en otra hoja pero cada pais enlistado en el indice y la columna (EJEMPLO peso bruto) se pegue enseguida
como puedo hacer esta macro
saludos
26/02/2016 a las 7:49 pm
Buenas noches
Pregunta si tengo varias columnas y en cada una estoy filtrando por algún criterio ej: pais, pero en una de las columnas no esta, como hago para que no tenga encuenta esa columna y pase a hacer el filto a la siguiente columna ej:
A b c d
ciuda pais region pais
Pais region departamento ciudad
departamento ciudad ciudad departamento
region ciudad ciudad
como podemos ver la columna c no tiene pais como seria para que filtre cada columna y y esocga pais y lo pege en una nueva hoja
19/10/2016 a las 4:31 pm
Buenas muy amable por el ejemplo pero la macro tiene un error. El If esta incorrecto. De igual manera gracias, me ha servido para pedirles a mis estudiantes que hallaran el error
07/01/2017 a las 4:36 pm
Hola Kelvins
Si bien el Exit sub es inusual, si funciona el código indicado, el código se podría mejorar empleando "on error", o sino dentro del IF usar una variable que permita continuar la ejecución.
Otro de los aspectos que se podría mejorar es controlar:
Sheets(“Hoja2”).Delete
Sheets(“Hoja3”).Delete
El código no funcionaría en esta parte si las dos hojas indicadas no existiesen.
22/01/2017 a las 10:20 am
Excelente aporte, una consulta, como hago si por ejemplo quiero copiar lo filtrado solo desde la columna C1:O hasta la ultima fila con datos? te agradeceria si me ayudas con ese tip, muchas gracias.
17/07/2018 a las 12:25 pm
Con respecto a la macro su funcionamiento es excelente, pero como podría hacer que en ves que abra un archivo nuevo cada vez que doy ejecutar, definir un solo archivo repositorio y sobre ese mismo valla guardando información a partir de la fila vacia
18/09/2020 a las 7:21 am
Excelente! Muchas gracias.