Búsqueda Inteligente con Combobox Smart (Search Engine form in Excel)

En este artículo vamos a seguir viendo el tema de “búsqueda inteligente en Excel” (a pedido de la gente) usando un formulario que nos muestra las sugerencias o los elementos que coinciden con la palabra introducida. Ya hemos visto varios artículos al respecto pero siempre es un tema apasionante ya que nos resulta extremadamente útil a la hora de trabajar con mucha información y sobre todo para facilitarnos nuestro trabajo.

En el blog damos herramientas, elementos e ideas útiles para sumar a nuestro conocimiento, capacidad y habilidades en cuanto a Excel. La comprensión de estas herramientas depende de nuestro nivel de conocimiento, habilidades y entendimiento. Es por eso que estudiamos varias opciones de las más simples a las más complejas. Siempre recomendamos empezar con lo más simple e ir sumando complejidad hasta llegar a lo más avanzado e incluso lograr crear nuestras propias herramientas.


El video relacionado esta cargado en nuestro canal de YouTube “ExcelminiApps”. Sino directamente a través de este link o click en la imagen.
Como hacemos siempre vamos a utilizar una mini aplicación, una plantilla, de ejemplo para mostrar la idea.

Utilizamos elementos que ya habíamos utilizados en otros artículos:
  • Base de datos de empleados de una empresa ficticia. Esta hoja tiene un botón que denominamos buscar y que lanza el formulario de búsqueda.
  • Formulario de búsqueda Construido en la plataforma VBA. El formulario es un ejemplo, podemos utilizar con formato, propiedades y cantidad de información que necesitemos de acuerdo a nuestra mini aplicación.


Por otro lado vamos a utilizar algunos de los conceptos vistos en los siguientes artículos relacionados (de la lista de artículos del blog):



Trataremos de hacer la explicación lo más simple posible.
Funcionamiento:

En primer lugar vamos a ver cómo funciona, básicamente tenemos una hoja con los datos “Base de Datos de Empleados”. Arriba a la derecha tenemos el botón para lanzar el formulario de búsqueda.



Una vez lanzado vemos el formulario con algunos campos y un botón llamado “cerrar” su única función es cerrar el formulario.



Los campos son:
  • ID: es el código único que identifica al empleado, es una lista desplegable.
  • Nombre: del empleado.
  •  Teléfono
  • Puesto
  • Ubicación:


La búsqueda se puede realizar de dos maneras:
  • Búsqueda por ID: Conociendo el ID del empleado, seleccionamos de la lista o directamente lo introducimos mediante teclado. De esta manera nos mostrara todos los datos de ese ID. Para esto deberíamos acordarnos “qué ID corresponde a qué persona”. Un tanto arduo.
  • Búsqueda por palabra clave o nombre: resulta más interesante buscar una persona conociendo una parte del nombre. Es mucho más fácil, porque en general es lo que podemos recordar mejor o algún colaborador puede tener esa pista. Lo revolucionario o sofisticado en este método es que es automático, a medida que escribimos parte del nombre nos aparece las sugerencias listadas y podemos elegir el que estamos buscando.


.Procedimiento:
En este caso, ya habiamos hablado de utilizar el formulario y la base de datos. Estos elementos los habiamos usado en otros artculos así que no vamos a hablar de cómo construirlos. El elemento que vamos a sumar es  una tabla dinamica.

La tabla dinamica va a cumplir la misma utilidad que habiamos visto en “Búsqueda Inteligente en Excel sin formulario ActiveX (versión simplificada)”. El procedimiento es el mismo pero en vez de utilizar la hoja de Excel utilizamos un formulario. Es lo que habíamos estado diciendo, con todo lo visto tranquilamente podemos llegar a esta última funcionalidad.



Lo que hacemos básicamente es que cada vez que cambia un dato sobre el campo “nombre” se traslada el dato al filtro de la tabla dinámica y luego que está actualizada se vuelcan los datos del filtro al combobox de campo nombre. Es tan simple como eso.
Veamos un ejemplo, introducimos la palabra “jua” como aproximación a buscar un Juan o los Juan’s que estén en nuestra base de datos.



Como  podemos ver tenemos, a la izquierda, la tabla dinámica filtrada con “jua” y a la derecha otra tabla con la lista completa de nombres y códigos concatenados como uno solo (son los datos para crear la tabla dinámica). También podemos ver un número que indica la cantidad de coincidencias encontradas. En este caso 2 (dos).



Ya tenemos todos los elementos, logramos de alguna manera obtener las coincidencias para nuestras búsquedas, ahora lo único que hay que hacer es utilizar un código para poder llevar la lista de coincidencias a nuestra lista de combobox. Esto ya lo habíamos visto pero vamos a recordar.

1 – Utilizar Worksheet >> Change para llevar los datos introducidos en el campo nombre al filtro de la tabla dinámica.
2 – Listar las coincidencias como una lista del combobox.

Código
Ahora vamos a ver el código de aquello no conocido, en este caso de lo que hace cuando introducimos un dato en el campo “nombre” que es un combobox. Y cuando seleccionamos un dato de este combo. Lo demás lo habíamos visto.
INICIO CODIGOS----------------------------------------
Sub Name1_Change()

 If id.Value = "" Then 'evito recurrencia
    id.Locked = True  'bloqueo id
    name1.RowSource = "" 'borro los datos del combo
     'hago el filtrado de la tabla dinámica
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("Nombre Completo").ClearAllFilters
ActiveSheet.PivotTables("Tabla dinámica1").PivotFields("Nombre Completo").PivotFilters.Add Type:=xlCaptionContains, Value1:=name1.Value
 name1.RowSource = "h7:h" & 7 + Range("h5").Value 'cargo los ítems del combo
name1.DropDown 'despliego la lista de coincidencias
End If
End Sub
------------------------------------------------------
Ahora vamos a ver el código de cuando hacemos click sobre algún elemento de la lista del combo:
-------------------------------
Sub name1_Click()
Private Sub name1_Click()
ID1 = Val(Left(name1.Value, 4)) 'recupero el id
         id.Text = ID1
        name1.Text = Application.WorksheetFunction.VLookup(ID1, Range("b7:F26"), 2, False)
        tel1.Text = Application.WorksheetFunction.VLookup(ID1, Range("b7:F26"), 3, False) 'muestro el tel correspondiente
        ubi1.Text = Application.WorksheetFunction.VLookup(ID1, Range("b7:F26"), 4, False) 'muestro ubicación correspondiente
        pues1.Text = Application.WorksheetFunction.VLookup(ID1, Range("b7:F26"), 5, False)
End Sub

Por supuesto que la tabla dinámica, y la lista concatenada son datos que nos sirven para el propósito buscado. Estos datos no se deben ver en la ejecución de la mini app, aquí los mostramos con fines didácticos. Se pueden ocultar en la misma hoja o se puede utilizar una hoja auxiliar como usamos siempre  y luego ocultar y proteger esta hoja.
Como ven no es muy complicado y además es sencillo.
¡Esperamos que les haya gustado la idea y vean lo fácil que es!

-------------------------------------- FIN CÓDIGOS
Recuerden que los artículos algunas veces requieren un mayor o menor nivel de conocimiento en ciertos temas de Excel, por ejemplo formulas avanzadas, macros o VBA, etc. Sin embargo en los artículos se nombran todos los elementos y con esta información podemos hacer nuestras pequeñas investigaciones usando internet, así desarrollamos nuestro conocimiento. Por ejemplo si  utilizamos la función “Y”, que la suponemos conocida, y no sabemos ¿qué es? podemos buscar en internet para ver como se utiliza y cuáles son los componentes. Las mini aplicaciones no son más que la recopilación de muchos elementos para dar forma a una nueva idea.
Pueden descargar algunos ejemplos (plantillas/templates) de la zona de Descargas y también la Tienda Si tienen alguna duda o consulta pueden hacerlo a través del formulario de contacto.
Les recomendamos que sigan el blog por alguno de los medios, mail o por redes sociales, para recibir las actualizaciones y novedades.
¡Éxitos!

Keys:
·         Búsqueda inteligente en Excel con combobox
·         Search engine en Excel.
·         Búsqueda en Excel con autorrelleno.

·         Búsqueda en Excel con sugerencias.

5 comentarios:

iVan0L dijo...

Donde esta "Listar las coincidencias como una lista del combobox" se supone es una previa al tema actual, estoy dando vuentas en todo tu blog y no lo encuentro, deberias dejar el link de referencia cuando dices esta parte ya lo hicimos.

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por escribirnos!
En el artículo dejamos todos los links, sin embargo la característica del blog es que los elementos/herramientas que utilizamos en un artículo los podemos usar en otros. Cada artículo tiene su particularidad.
En cuanto a listar las coincidencias del combo, hay dos formas, una es listar con el código "combobox.additem" i que añade un elemento a la vez y la otra más fácil es utilizar la propiedad del combo llamada "RowSource" que se puede ver en el código. Por ejemplo " name1.RowSource = "h7:h" & 7 + Range("h5").Value 'cargo los ítems del combo.
Esperamos tus comentarios o nos puedes escribir directamente mediante el formulario de contacto.
Saludos

knox dijo...

HOLA DONDE PODRIA DESCARAGR LA HOJA DE CALCULO?

knox dijo...

hola como haría si la base de catos de consulta se encuentra en otro libro

Juan Pablo Torres dijo...

Hola amigo, cómo estas! Gracias por tus comentarios!
En la zona de descargas y en la tienda están las plantillas disponibles. En cuanto al ejemplo se dejo la tabla dinámica en la misma hoja para que se pueda ver el proceso pero no hay problema de utilizarlo desde otra hoja, hay que cambiar los rangos de referencia nada más.
A tu disposición, Saludos.