Utilizar un ComboBox como lista de búsqueda en Excel
En ocasiones tenemos una lista con decenas o a veces hasta centenas de items que se nos hace difícil buscar una coincidencia exacta y no una aproximada. El siguiente desarrollo permite añadir a un ComboBox la lista que tenemos y encontrar el dato tal y como está en la lista.
Ver video Utilizar un ComboBox como lista de búsqueda en Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Instrucciones:
1.- Asignamos un nombre a la lista (recomendado).
2.- Entramos al editor de Visual Basic para Aplicaciones con Alt + F11. I
3.- Insertamos un UserForm y le añadimos un control de ComboBox, un Label y dos botones (Buscar y Cerrar)
4. – Damos doble click en una parte del formulario (no en algún objeto). Se podrá automáticamente el método Activate. Ponemos el siguiente código:
Private Sub UserForm_Activate()
‘Asignamos como fuente la lista previamente creada
Me.cmbAsesores.RowSource = “lstAsesores”
‘Le damos el foco al ComboBox
cmbAsesores.SetFocus
End Sub
5.- Ahora damos doble click al botón Buscar y agregamos el siguiente código:
Private Sub CommandButton1_Click()
‘Si existe algún error se brinca a la etiqueta Fin
On Error GoTo Fin
‘Para tener este código, se puede utilizar la grabadora de macros
Cells.Find(What:=cmbLista, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
cmbLista.SetFocus
‘Cierra el formulario
Unload Me
‘Sale del procedimiento sin necesidad de llegar a la etiqueta Fin
Exit Sub
Fin:
‘Si el dato escrito no está en la lista arroja el siguiente error
MsgBox “El dato ‘” & cmbLista & “‘ no se encuentra en esta hoja”, vbInformation, “Excel e Info”
cmbLista = “”
cmbLista.SetFocus
End Sub
6.- El código para el botón Cerrar será:
Private Sub CommandButton2_Click()
Unload Me
End Sub
La imagen de ejemplo
Dependiendo del diseñador la lista puede estar oculta y para lanzar el formulario se podrá hacer por cualquier método que desee.