Nunca está de mas darle a nuestros proyectos "un toque distintivo". Me consulta un lector del blog sobre la forma de realizar consultas sobre una tabla en Excel, y que el resultado sea igual (o parecido) al que arroja la consulta en Access. La mejor opción que se me ocurrió al respecto involucra el uso de macros y filtros avanzados, logrando una presentación final mas que aceptable.
Imaginemos que tenemos la siguiente tabla:
nuestro ejercicio consistirá en ingresar el nombre de un cliente en una celda y que la tabla nos devuelva todos los registros existentes.
[+/-] Ver el resto / Ocultar
Debajo del código arriba indicado, pegamos el siguiente, que es el Sub "Filtrado", mismo que se encarga de realizar la tarea principal:
2) No olvidemos que los criterios pueden contener caracteres especiales, para perfeccionar aún mas nuestros filtrados:
Cabe aclarar que con solo modificar un poco nuestro código nos será posible darle al usuario la posibilidad de filtrar por otros criterios o la combinacion de los mismos.
Suerte y apliquen este ejemplo, el cual agiliza mucho la tarea diaria.
Les dejo el link al archivo.
Antes de ir de lleno al ejemplo, les recomiendo la lectura de este post para aquellos que no se muevan comodamente manejando los Filtros Avanzados. Aclarado este punto, comencemos.
Como primer medida vamos a seleccionar toda la tabla, mas un par de filas (pueden ser unas 10 por ejemplo) por debajo de la misma, y nos vamos al cuadro de Nombres y le ponemos: TablaClientes.
abarcamos un poco de filas en blanco.
arriba a la izquierda le damos un nombre al rango seleccionado (no olviden presionar "enter" luego de ingresar el nombre)
Como habran visto en el post que les linkeé al principio de esta entrada, necesitaremos ahora copiar los encabezados de la tabla, para que funcionen como Criterios de los Filtros Avanzados; copiamos y pegamos a partir del rango A1. Nos deberá quedar así:
a partir de A1 tenemos una copia exacta del encabezado presente desde A6, el cual nos servirá para ingresar el/los criterio/s de busqueda.
Ya tenemos la primer parte del circo armado. Ahora bien, nuestros usuarios necesitará una celda en la cual introducir, por ejemplo, "walter" y que nuestro filtro avanzado se active. Vamos a darle a B4 para que haga esto:
Y nos queda solamente codificar todo este asunto y hacer que la macro funcione correctamente. La idea en general es la siguiente:
1) El usuario introduce un nombre en B4
2) El dato de B4 se copia a B2, para usarlo como criterio.
3) Se activa el filtro avanzado para filtrar los registros coincidentes con el criterio.
4) Si se presiona "suprimir" sobre B4, la macro volverá a mostrar todos los registros.
5) Para una mayor limpieza visual ocultaremos el rango A1:C2.
Teniendo esto en mente, con Alt + F11 nos introducimos en el editor de VBA y damos doble click sobre la hoja donde está la tabla, en el Explorador de Proyectos, para abrir su respectiva ventana de código. En mi caso, la hoja se llama "Consulta":
Seleccionamos Worksheet / Change, para introducir código allí:
Primero vamos a realizar el último paso: ocultar el rango que contiene los criterios, seleccionando las filas, presionando con el boton derecho del mouse y seleccionando "Ocultar":
listo, el usuario no tiene por que ver nuestros procesos internos, a la vez de que quitamos de pantalla datos que no utilizará, ya que el solamente interactuará con B4
La hoja debe quedarnos de la siguiente forma:
Ahora volvemos al evento Worksheet_Change en VBA e ingresamos el siguiente código. Se los dejo bien comentado para que lo comprendan mejor:
Private Sub Worksheet_Change(ByVal Target As Range) 'si el rango que cambia es B4 If Target.Address = "$B$4" Then 'y si el rango posee algun valor: If Target.Value <> "" Then 'copio lo ingresado en B2 [B2] = [B4] 'llamo al Sub que aplica el Filtro Filtrado 'selecciono B5 [B5].Select Else 'si B4 no posee ningún valor, quito 'cualquier filtro existente ActiveSheet.ShowAllData End If End If End Sub
Debajo del código arriba indicado, pegamos el siguiente, que es el Sub "Filtrado", mismo que se encarga de realizar la tarea principal:
Sub Filtrado() Range("TablaClientes").AdvancedFilter Action:= _ xlFilterInPlace, CriteriaRange:= _ Range("A1:C2"), Unique:=False End Sub
Nos dirigimos ahora a nuestra planilla. En B4 ingresamos "walter" (sin comillas), obteniendo este resultado:
al igual que una consulta en Access, la tabla solo nos muestra los registros coincidentes con el criterio ingresado en B4
Probemos con otro cliente:
todo correcto.
Hasta aquí el ejercicio propiamente dicho: práctico, útil y visualmente agradable y efectivo para nuestros usuarios.
Podemos agregar un par de cosas:
1) Seleccionamos toda la columna correspondiente al "importe" (sin incluir el encabezado) y le damos un nombre, por ejemplo: filaSuma
Y luego en D4 ingresamos la siguiente función:
=SUBTOTALES(9;filaSuma)
Para de esta forma agregar un subtotal a cada cliente filtrado:
en este caso, utilizo a " ? " de comodín
Cabe aclarar que con solo modificar un poco nuestro código nos será posible darle al usuario la posibilidad de filtrar por otros criterios o la combinacion de los mismos.
Suerte y apliquen este ejemplo, el cual agiliza mucho la tarea diaria.
Les dejo el link al archivo.
Buenas Tardes... gracias por el aporte... excelente... felicitaciones...
ResponderEliminarBuenas tardes, excelnte aporte... felicitaciones... gracias
ResponderEliminardesde ya agradezco mucho tu comentario, y cualquier duda me avisas.
ResponderEliminarun abrazo