Las listas desplegables estándar de validación de datos de Excel son simples pero carecen de una función de búsqueda. Esto dificulta y hace lento encontrar elementos en listas largas. Puede agregar un filtrado de búsqueda dinámico utilizando un control ActiveX ComboBox. Este artículo explica cómo configurar una lista desplegable con búsqueda en su hoja de cálculo.
Puntos clave: Agregar una lista desplegable con búsqueda
- Desarrollador > Insertar > Cuadro combinado (Control ActiveX): Coloca un control con búsqueda en su hoja que se puede vincular a una lista de origen.
- Propiedades del Cuadro combinado > ListFillRange: Define el rango de celdas que contiene la lista maestra de elementos para el control.
- Código VBA para el evento Change: Filtra los elementos del Cuadro combinado en tiempo real a medida que el usuario escribe en el cuadro de búsqueda.
Descripción general del ActiveX ComboBox para búsqueda
Un ActiveX ComboBox es un control de formulario que combina un cuadro de texto con una lista desplegable. A diferencia de una lista de validación de datos estándar, permite a los usuarios escribir caracteres. Luego puede usar código VBA para filtrar los elementos de la lista mostrados según esa entrada escrita. Esto crea una experiencia de búsqueda instantánea mientras se escribe. La configuración requiere una lista de origen de elementos, el propio ComboBox y una breve macro para manejar la lógica de filtrado. Debe habilitar la pestaña Desarrollador en Excel para acceder a los controles necesarios para esta tarea.
Pasos para crear una lista desplegable ComboBox con búsqueda
Siga estos pasos para crear un filtro de búsqueda funcional para su lista. Asegúrese de que su lista maestra de elementos esté en una sola columna en una hoja de cálculo.
- Habilitar la pestaña Desarrollador
Vaya a Archivo > Opciones > Personalizar cinta de opciones. En el panel derecho, marque la casilla Desarrollador y haga clic en Aceptar. La pestaña Desarrollador aparecerá en su cinta de opciones. - Insertar el control ComboBox
Haga clic en la pestaña Desarrollador. En el grupo Controles, haga clic en Insertar. En Controles ActiveX, haga clic en el icono Cuadro combinado. Haga clic y arrastre en su hoja de cálculo para dibujar el control. - Establecer el rango de datos de origen
Haga clic derecho en el nuevo ComboBox y seleccione Propiedades. En la ventana Propiedades, busque la propiedad ListFillRange. Ingrese el rango de celdas de su lista maestra, como Sheet1!$A$1:$A$100. Cierre la ventana Propiedades. - Entrar en Modo Diseño y agregar código
En la pestaña Desarrollador, asegúrese de que Modo Diseño esté resaltado. Haga clic derecho en el ComboBox y seleccione Ver código. Esto abre el editor de Visual Basic para Aplicaciones. - Pegar el código de filtrado
En la ventana de código, pegue el siguiente script de VBA. Reemplace “Sheet1!$A$1:$A$100” con su dirección ListFillRange real.Private Sub ComboBox1_Change()
Dim srcRange As Range, cell As Range
Dim matchStr As String
Me.ComboBox1.Clear
matchStr = Me.ComboBox1.Text
Set srcRange = ThisWorkbook.Worksheets("Sheet1").Range("A1:A100")
If matchStr = "" Then
For Each cell In srcRange
If cell.Value <> "" Then Me.ComboBox1.AddItem cell.Value
Next cell
Else
For Each cell In srcRange
If InStr(1, cell.Value, matchStr, vbTextCompare) > 0 Then
Me.ComboBox1.AddItem cell.Value
End If
Next cell
End If
Me.ComboBox1.DropDown
End Sub - Salir del Modo Diseño y probar
Cierre el editor de VBA. De vuelta en Excel, en la pestaña Desarrollador, haga clic en Modo Diseño para desactivarlo. Haga clic en su ComboBox y comience a escribir. La lista debe filtrarse para mostrar solo los elementos que contengan el texto escrito.
Errores comunes y limitaciones a evitar
El ComboBox no aparece o está atenuado
Los controles ActiveX pueden estar deshabilitados por la configuración del Centro de confianza. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de ActiveX. Seleccione la opción para habilitar todos los controles sin restricciones. Guarde y vuelva a abrir su libro para que el cambio surta efecto.
Al escribir no se muestran resultados filtrados
Esto generalmente significa que el código VBA no se está ejecutando. Asegúrese de que el Modo Diseño esté desactivado en la pestaña Desarrollador. Además, confirme que el código esté en el módulo de hoja correcto. Verifique que la dirección de rango en el código VBA coincida exactamente con la propiedad ListFillRange, incluido el nombre de la hoja de cálculo.
La seguridad de macros impide que funcione la búsqueda
Los libros que contienen macros deben guardarse como Libro de Excel habilitado para macros (.xlsm). Si guarda como un archivo .xlsx estándar, el código VBA se perderá. Al abrir el archivo, debe hacer clic en Habilitar contenido en la barra de advertencia de seguridad para que se ejecuten las macros.
ComboBox vs. Lista desplegable de validación de datos
| Elemento | ActiveX ComboBox con búsqueda | Lista de validación de datos estándar |
|---|---|---|
| Función de búsqueda | Sí, escriba para filtrar la lista dinámicamente | No, solo desplazarse o escribir coincidencia exacta |
| Complejidad de configuración | Requiere código VBA y pestaña Desarrollador | Configuración simple mediante Datos > Validación de datos |
| Interacción del usuario | Haga clic en el control, escriba, seleccione de la lista filtrada | Haga clic en la flecha, desplácese, haga clic en la selección |
| Formato de archivo | Debe guardarse como archivo habilitado para macros .xlsm | Funciona en todos los formatos de archivo de Excel |
| Ideal para | Listas largas donde los usuarios conocen nombres parciales | Listas cortas y fijas para entrada de datos consistente |
Ahora puede implementar una lista desplegable con búsqueda en sus hojas de cálculo de Excel. Use el ActiveX ComboBox de la pestaña Desarrollador y vincúlelo a su origen de datos. Para listas más dinámicas, explore el uso del ComboBox con un rango de Tabla que se expanda automáticamente. Pruebe usar la propiedad MatchEntry establecida en fmMatchEntryComplete para tener más control sobre el comportamiento de búsqueda.