Ejemplo 1
Usando el mismo archivo Pedidos.xlsx de la sección anterior, haremos uso del filtro avanzado; es decir, vamos a extraer todos los pedidos de clientes (hoja Pedidos) que cumplan ciertas condiciones y las pondremos en otra hoja.
Ejemplo 2
Luego, en una nueva hoja, ingresaremos un código de cliente por teclado y extraeremos los datos del cliente desde la hoja Pedidos y desde la hoja Detalle, extraeremos todos los productos que componen el pedido de dicho cliente.
Ante todo, todos los datos, incluyendo la cabecera, tendrán un nombre de rango. Debe haber una nueva hoja llamada Filtro hacia donde copiaremos la cabecera de la hoja Pedidos. En la segunda fila y las que sean necesarias, colocaremos los criterios en las columnas para las cuales deseamos filtrar los datos. Todo este rango de criterios (inlcuyendo la cabecera) deberá tener nombre de rango. Todos los registros filtrados se desplegarán en el área de salida que se iniciará en la celda A10 de esta nueva hoja.
Nombres de rango: Toda la hoja Pedidos se llamará TablaPed, la hoja Detalle, se llamará TablaDet, el rango de criterios se llamará Rcrit.
Abra entonces el archivo Pedidos.xlsm haciendo clic aquí
Proceda a crear los nombres de los rangos indicados líneas arriba. Inserte una nueva hoja, que su nombre sea Filtro. Copie el rango A1:M1 y péguelo a partir de A1 en la nueva hoja, manteniendo el ancho de columna de origen.
Ejemplo 1
Como ejemplo vamos a extraer todos los pedidos atendidos por el empleado Buchanan, Steven, cuyo país de destino sea Alemania o Brasil y el monto total sea inferior a 50,000.
Adecúe su hoja de acuerdo a las primeras dos imágenes que se muestran al final de esta sesión.
El procedimiento que permite filtrar es el siguiente:
Sub FiltroAv()
Workbooks("Pedidos.xlsm").Activate
Sheets("Pedidos").Select
' Las siguientes dos instrucciones permiten el fitrado
'
Application.CutCopyMode = False
Range("TablaPed").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
("RCrit"), CopyToRange:=Range("A10"), Unique:=False
End Sub
Ejecutemos la macro usando F5 estando en el Editor.
Si desea realizar repetir el filtrado, puesto que la macro siempre va a filtrar a partir de A10 de la hoja, debemos borrar lo filtrado o copiar hacia otra hoja si se desea conservar.
El procedimiento para borrar lo filtrado puede constituir otra macro. En efecto, lo llamaremos BorrarFiltrado.
El procedimiento es el siguiente:
Sub BorrarFiltrado()
' Para poder usar la macro cuantas veces quiera,
' se debe borrar el área de salida, principalmente la fila 10
' La razón es porque la macro siempre pega lo filtrado a partir de A10
' Si esta área está ocupada, no filtrará
' Seleccionamos toda la fila 10, desde la etiqueta
Rows("10:10").Select
' Seleccionamos todas las filas ocupadas
Range(Selection, Selection.End(xlDown)).Select
' Se eliminan todo el rango seleccionado
Selection.Delete Shift:=xlUp
Range("A10").Select
End Sub
Luego, antes de volver a ejecutar la macro, debe ejecutar esta macro.
Nota 1:
Si desea variar los criterios del filtrado, es suficiente que coloque todos los criterios deseados en una o más filas y columnas. Recuerde que, si desea usar una condición u otra, en la misma columna, se debe colocar el criterio en cada fila y si se desea que que se cumpla dos o más criterios simultáneamente, se debe colocar los criterios en la misma fila y debajo de la columna correspondiente.
Ahora, antes de ejecutar la macro, debe borrar el rango de criterio Rcrit anterior y definir otro, con el mismo nombre, que tome en cuenta todos los criterios especificados.
Dejaremos para la siguiente ocasión el Ejemplo 2.
La siguiente imagen muestra este procedimiento.
Vaya a la siguiente sesión haciendo aquí