Formulario de búsqueda inteligente y BUSCARV en Excel
En este artículo y video desarrollaremos un ejemplo en base a una consulta que me han hecho en diferentes ocasiones. Como sabes, la función BUSCARV es una de las funciones que más uso, de hecho, en el canal de YouTube tengo una Lista de reproducción dedicada a esta función tal útil. La lista tiene como nombre El poder de BUSCARV en Excel.
La pregunta que me han hecho se refiere a cómo uso la función BUSCARV, pero mostrando todos los elementos coincidentes e incluso repetidos. Es por eso que me di a la tarea de desarrollar un formulario de Excel vba donde tendremos un Textbox para escribir un nombre o apellidos y nos mostrarán todos los elementos que coincidan con esa búsqueda.
Cómo funciona
Tenemos un formulario en una hoja llamada Buscar. Dicho formulario tiene una sección donde podremos escribir un ID y mediante la función BUSCARV devolvemos los valores relativos a ese ID.
Figura 1. BUSCARV en Excel en base a un ID.
Ver video Formulario de búsqueda inteligente y BUSCARV en Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Buscar por nombre y mostrar valores coincidentes
Pero qué sucede cuando la búsqueda no la queremos hacer por ID, sino por nombre o apellidos, además deseamos que si escribimos un nombre se muestren todos los nombres que se parezcan.
En la hoja Buscar del archivo de ejemplo tendremos una Tabla con nombres y detalles de cada nombre.
Figura 2. Tabla de nombres en Excel.
En la Figura 1 vemos un botón que dice Buscar por nombre. Si presionamos ese botón se mostrará un formulario de Excel vba donde tendremos un Cuadro de texto para escribir nombres o apellidos. Una vez en el formulario veremos un botón que dice Filtrar. Al presionar el botón Filtrar se mostrarán todos los elementos.
Figura 3. Filtrar los elementos coincidentes en Formulario de Excel vba.
Usar BUSCARV para mostrar los valores de cada ID
Una vez que al escribir un nombre en el formulario y Filtrar los valores coincidentes, cada que elijamos uno de los elementos del ListBox verás como en el formulario de hoja Buscar se muestran los valores por cada ID.
Figura 4. Al elegir un elemento se devuelven valores usando BUSCARV en Excel.
Código del formulario
Usaremos el siguiente código vba (macro) para hacer funcionar el formulario.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo ' Private Sub btnFiltrar_Click() On Error GoTo Errores ' If Me.txtFiltro1.Value = "" Or Me.txtFiltro1.Value = " " Then ' Me.ListBox1.Clear ' Else Me.ListBox1.Clear j = 1 Set HojaBase = ThisWorkbook.Sheets("Base") ' Filas = HojaBase.Range("a1").CurrentRegion.Rows.Count For i = 2 To Filas If LCase(HojaBase.Cells(i, j).Offset(0, 1).Value) Like "*" & LCase(Me.txtFiltro1.Value) & "*" Then Me.ListBox1.AddItem HojaBase.Cells(i, j) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = HojaBase.Cells(i, j).Offset(0, 1) Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = HojaBase.Cells(i, j).Offset(0, 6) Else End If Next i End If ' Exit Sub Errores: MsgBox "No se encuentra.", vbExclamation, "EXCELeINFO" End Sub ' 'Pasar el ID del registro elegido a la celda D6 Private Sub ListBox1_Click() ' Cuenta = Me.ListBox1.ListCount Set Rango = Range("A1").CurrentRegion For i = 0 To Cuenta - 1 If Me.ListBox1.Selected(i) Then Valor = Me.ListBox1.List(i) Sheets("Buscar").Range("D6").Value = Valor End If Next i ' End Sub ' 'Dar formato al ListBox y traer datos de la tabla Private Sub UserForm_Initialize() ' With ListBox1 .ColumnCount = 3 .ColumnWidths = "40 pt;170 pt;60 pt" End With ' End Sub ' 'Cerrar formulario Private Sub CommandButton2_Click() Unload Me End Sub
Artículos relacionados
Búsqueda inteligente en un formulario de Excel vba
Formularios para búsqueda, alta, baja y actualización de registros en Excel
Formulario de consulta en Excel con BUSCARV