Tienes una enorme tabla de registros contables y necesitas buscar los información que coincida con cierto croterio, un Buscador en Excel es la solución, en este caso mediante el uso de filtro avanzado con VBA, la idea es que al teclear, de manera automática se muestren solo los registros que coinciden con lo tecleado.
Como hacer un buscador en Excel para contactos
En este ejemplo veremos como hacer un buscador en excel mediante vba, esto con el fin de poder hacer búsquedas rápidas en una tabla de contactos.
Tutorial sobre como hacer un buscador en Excel
Actualización 14-11-2023
Ahora cualquier cosa que teclees se buscara en todas las columnas de la tabla.
Definir rango de criterios
Para el filtro avanzado, necesitamos definir un rango de criterios, en este caso el rango sera B2:B3
Para esto hacemos lo siguiente:
- Click en la pestaña “formulas”, en la cinta de opciones de excel
- Click en administrador de nombres
- Click en nuevo
- tecleamos el nombre deseado, en este caso “Criterios”
- Damos click el el botón “se refiere a:” y seleccionamos el rango de celdas
B2:B3
- Aceptar.
Definir rango de datos a filtrar
El rango de datos a filtrar es la tabla que contiene la informacion de los contactos, en este caso también le daremos un nombre como en el paso anterior, pero como esta tabla ira creciendo con los nuevos registros, es importante que el nombre que definamos tome de manera automática esos datos nuevos.
- Click en la pestaña “formulas”, en la cinta de opciones de excel
- Click en administrador de nombres
- Click en nuevo
- tecleamos el nombre deseado, en este caso “Datos”
- En el campo “se refiere a:” ponemos esta formula
=DESREF(Contactos!$A$6,,,CONTARA(Contactos!$A$6:$A$1048576),5)
- Aceptar.
Para mas informacion sobre este ultimo caso, puedes ver el post sobre listas y rangos dinámicos que publique hace tiempo.
Código VBA para el filtro avanzado
El siguiente código es el que filtrara los datos cuando se teclee algo en la celda B3
Option Explicit
Sub FiltraDatos()
Range("Datos").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("Criterios"), Unique:=False
End Sub
Si vemos el código, en este se hace uso de los nombres de rango que se definieron anteriormente.
Programar evento que se ejecutara al momento de cambiar la celda B3
Para que el código anterior se ejecute al hacer un cambio en B3, es necesario programar el evento Change en la hoja de datos.
Para esto damos click derecho en la pestaña con el nombre de la hoja de datos/ ver código, en la ventana que sale ponemos este código.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
On Error GoTo casoerror
If Target.Address = "$B$3" And Target.Value <> "" Then
Call FiltraDatos
End If
If Target.Address = "$B$3" And Target.Value = "" Then
ActiveSheet.ShowAllData
End If
Application.ScreenUpdating = False
Exit Sub
casoerror:
Application.ScreenUpdating = False
End Sub
Lo que hace el código anterior es básicamente comprobar si la celda que se esta modificando es B3, en ese caso se ejecuta la función de filtrado, si al modificar la celda B3 se esta borrando el texto, se debe mostrar de nuevo toda la informacion de la tabla, es decir, se elimina el filtro aplicado.
Ejecutar filtro al teclear
Hasta el código que tenemos ahora, el filtro se ejecuta luego de dar enter al estar tecleando en B3, pero también es posible que el filtro se genere automáticamente con cada tecleo en B3, es decir, de ese modo los datos que coinciden se van mostrando conforme se va tecleando.
Para lograr esto, ponemos un cuadro de texto justo encima de B3.
- Click en la ficha “Desarrollador”
- Insertar
- En la seccion de Controles Activex, damos click en Cuadro de texto
- Dibujar cuadro de texto encima de B3
Luego de dibujar el cuadro de texto, dar click derecho sobre el/ ver código y escribimos lo siguiente:
Private Sub TextBox1_Change()
Range("B3") = TextBox1
End Sub
Finalmente vamos a la hoja excel y desactivamos el modo diseño en la ficha “Desarrollador”
Con ese código, cada vez que tecleamos en el cuadro de texto, eso mismo se repetirá en la celda B3, lo cual luego hace que se ejecute el filtro.
Uso de comodín para buscador en excel
Es probable que tengas una gran tabla de datos y no estés seguro de como aparece el dato buscado, pero si recuerdas parte del mimos, para estos casos puedes usar el * justo al inicio del texto buscado, de ese modo se filtraran los registros que contenga ese texto, esto sin importar en que parte de la cadena se encuentra.
Como puedes ver, con muy poco código es posible crear un potente buscador en excel con el uso de filtro avanzado y VBA.