El uso promedio de los filtros y autofiltros de Excel no creo que encierren ningún misterio. Es mas, son de uso sencillo y nos representa una herramienta muy eficaz al momento de realizar consultas sobre una tabla de datos.
Personalizando cada uno de los filtros que se activan sobre los campos, podremos armar consultas verdaderamente muy completas, con tan sólo un par de clicks del mouse.
Nuevamente haremos uso de nuestra muy prolífera imaginación, para creer que la siguiente tabla contiene miles y miles de registros:
sencillo: sucursal, fecha, agente e importe.
[+/-] Ver el resto / Ocultar
Nos posicionamos sobre la cleda B2 (donde comienza la tabla) y nos dirigimos a Datos / Filtro / Autofiltro:
aparecieron las típicas "flechas hacia abajo" en cada campo.
Si desplegamos cualquiera de los filtros nos encontramos con una lista de valores correspondientes a ese campo, y seleccionando cualquiera de ellos, nos traerá solamente los datos de ese campo en particular:
aqui selecciono la sucursal xx24
y, obviamente, consigo todos sus registros. Así se puede hacer con cada uno de los campos.
Pero en este ejemplo me interesa una opcion en particular: "Personalizar"... al hacer click sobre ella, nos aparecerá en pantalla un formulario que nos permitirá ingresar los parámetros de la consulta a realizar. En este caso, selecciono el campo "fecha":
le especifico al autofiltro: traeme todos los registros cuyas fechas sean mayores al 13/01 y menores al 16/01.
y como resultado, obtengo:
Cabe aclarar que hasta aquí solo configuré el campo "fecha", pero puedo ir haciendo la tarea uno por uno, con lo cual agrego mas criterios a la consulta.
Dejando todo como está, hacemos click sobre el campo "agente" y seleccionamos a "leiva":
bueno, ahora tenemos todas las ventas de leiva, entre el 14/01 y el 15/01
Vamos un poco mas allá. Pidamosle también que nos traiga las ventas menores a 100. Hacemos click sobre el campo "importe" e ingresamos lo siguiente:
y el resultado:
todas las ventas de leiva, entre el 14/01 y el 15/01, menores a 100.
Una opcion muy interesante a tener en cuenta es el uso del caracter comodín " * ", como lo muestro en la siguiente imagen, sobre el campo "agente" (opcion "personalizar" del formulario):
le pido: traeme todos los registros cuyos nombres de agente contengan "f*" (o sea, que comiencen con f)
y desde ya que lo obtenido es exactamente lo que pedimos:
"flores" y "ferraro" comienzan con "f". perfecto.
Si desplegamos las listas de la izquierda del formulario, veremos que existen una gran cantidad de opciones: menor a que, termina con, comienza con, mayor o igual a, etc, etc. Todas esas alternativas mas los caracteres comodín nos harán armar una consulta muy compleja y útil, totalmente personalizable a nuestras necesidades.
Y, obviamente, no olvidemos la posibilidad de grabar una macro mientras ejecutamos el autofiltro, a los fines de automatizar la tarea en un futuro.
Voy a realizar la siguiente consulta: traer todos los registros de la sucursal xx24 y xx23, entre el 12/01 y el 15/01, de ventas realizadas por silva, mayores a $25.... grabando una macro.
Y este es el código obtenido:
Sub AutofiltroConMacro() ' AutofiltroConMacro Macro ' Macro grabada el 31/03/2010 por damianexcel ' Acceso directo: CTRL+j 'selecciono el primer rango de la tabla: Range("B2").Select 'coloco el autofiltro Selection.AutoFilter 'que el campo 1 (sucursal) sea igual a xx23 ó xx24 Selection.AutoFilter Field:=1, Criteria1:="=*xx23*", Operator:=xlOr, _ Criteria2:="=*xx24*" 'el campo 2 (fecha) mayor o igual al 12/01 y menor o igual al 15/01 Selection.AutoFilter Field:=2, Criteria1:=">=12/01/2010", Operator:=xlAnd _ , Criteria2:="<=15/01/2010" 'el apellido del agente igual a silva Selection.AutoFilter Field:=3, Criteria1:="silva" 'y que el cuarto campo (importe) sea mayor a 25 Selection.AutoFilter Field:=4, Criteria1:=">25", Operator:=xlAnd Range("A1").Select End Sub
Al grabajar la macro le asigné la tecla de acceso directo " ctrol + j "... así que cada vez que presione esa combinación, se disparará la macro, realizando la consulta que, en origen, me llevó varios pasos.
Manejando mínimamente el código en VBA, podríamos ahora ingresar el apellido en una celda, para evitar tener que grabar una macro por cada agente. Modificamos el código de la siguiente forma:
Sub AutofiltroConMacro() ' AutofiltroConMacro Macro ' Macro grabada el 31/03/2010 por damianexcel ' Acceso directo: CTRL+j Dim Agente As String 'tomo el apellido a filtrar del rango C1 Agente = Trim([c1].Value) 'selecciono el primer rango de la tabla: Range("B4").Select 'coloco el autofiltro Selection.AutoFilter 'que el campo 1 (sucursal) sea igual a xx23 ó xx24 Selection.AutoFilter Field:=1, Criteria1:="=*xx23*", Operator:=xlOr, _ Criteria2:="=*xx24*" 'el campo 2 (fecha) mayor o igual al 12/01 y menor o igual al 15/01 Selection.AutoFilter Field:=2, Criteria1:=">=12/01/2010", Operator:=xlAnd _ , Criteria2:="<=15/01/2010" 'el apellido del agente igual al valor ingresado en C1 Selection.AutoFilter Field:=3, Criteria1:=Agente 'y que el cuarto campo (importe) sea mayor a 25 Selection.AutoFilter Field:=4, Criteria1:=">25", Operator:=xlAnd Range("A1").Select End Sub
imagen de lo obtenido con el código arriba mencionado:
Y en vistas de lo anterior... ¿por que también no agregar a mano las sucursales? Ahora si estaríamos automatizando en gran medida nuestra macro: usamos un "filtro base" (el que grabamos) y luego los parámetros se los modificamos mediante VBA:
Sub AutofiltroConMacro() ' AutofiltroConMacro Macro ' Macro grabada el 31/03/2010 por damianexcel ' Acceso directo: CTRL+j Dim Agente As String Dim Suc1 As String Dim Suc2 As String 'tomo el apellido a filtrar del rango C1 Agente = Trim([c1].Value) Suc1 = Trim([c2].Value) Suc2 = Trim([c3].Value) 'selecciono el primer rango de la tabla: Range("B5").Select 'coloco el autofiltro Selection.AutoFilter 'que el campo 1 (sucursal) sea igual a xx23 ó xx24 Selection.AutoFilter Field:=1, Criteria1:="=*" & Suc1 & "*", Operator:=xlOr, _ Criteria2:="=*" & Suc2 & "*" 'el campo 2 (fecha) mayor o igual al 12/01 y menor o igual al 15/01 'Selection.AutoFilter Field:=2, Criteria1:=">=12/01/2010", Operator:=xlAnd _ , Criteria2:="<=15/01/2010" 'el apellido del agente igual al valor ingresado en C1 Selection.AutoFilter Field:=3, Criteria1:=Agente 'y que el cuarto campo (importe) sea mayor a 25 Selection.AutoFilter Field:=4, Criteria1:=">25", Operator:=xlAnd Range("A1").Select End Sub
y la consulta nos queda:
y así podríamos personalizar cualquier campo existente en nuestra tabla, solo es cuestión de evaluar las necesidades del proyecto.
Eres un genio Gracias
ResponderEliminarllevaba 3 dias atrapado con esto :)
gracias x el comentario.
ResponderEliminarun abrazo