Toda esta introducción viene a cuento de que una de las rutinas que tuve que desarrollar para el nuevo modelo, que estaré publicando en breve, se basa en filtrar las filas de la base de datos y copiarlas a otra hoja (lo hoja que contiene la copia de la factura).
En esta nota mostraré dos métodos eficientes para hacerlo. Como ejemplo utilizaremos los datos de ventas de la base de datos Northwind
Dado que los métodos de Excel, como Autofiltro, suelen ser más eficientes que el código que podamos escribir, podemos grabar las acciones y luego mejorar el código reemplazando, por ejemplo, las referencias a rangos por variables.
Supongamos que queremos copiar a otra hoja todas las ventas a la Argentina. Después de aplicar Autofiltro, grabamos las acciones para el copiado obteniendo este código
Sub Macro1()
'
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Hoja2").Select
ActiveSheet.Paste
End Sub
Hacemos dos mejoras a este código
- usamos la propiedad CurrentRegion de Range en lugar de Selection.End(xlToRight) y Selection.End(xlDown),
- eliminamos los Select abreviando el código
Sub Macro2()
'
Selection.CurrentRegion.Copy
Sheets("Hoja2").Paste
End Sub
Pero existe una posibildad más sencillla usando AutoFilter.Range
Sub Macro3()
ActiveSheet.AutoFilter.Range.Copy
Sheets("Hoja2").Paste
End Sub
La ventaja de usar AutoFilter.Range es que funciona aún si la celda activa no pertenece a la tabla filtrada.