Lista desplegable con selección múltiple

La lista desplegable clásica en una hoja de Excel es excelente, pero solo le permite seleccionar una opción del conjunto presentado. A veces, esto es exactamente lo que desea, pero hay situaciones en las que el usuario debe poder elegir algo elementos de la lista.

Veamos varias implementaciones típicas de una lista de selección múltiple de este tipo.

Opción 1. Horizontales

El usuario selecciona elementos de la lista desplegable uno por uno, y aparecen a la derecha de la celda que se está modificando, y se enumeran automáticamente en forma horizontal:

Las listas desplegables en las celdas C2:C5 en este ejemplo se crean de forma estándar, es decir

  1. seleccionar celdas C2:C5
  2. pestaña o menú Datos elige un equipo Validación de datos
  3. en la ventana que se abre, seleccione una opción Lista y especificar como un rango Fuente celdas con datos de origen para la lista A1: A8

Luego, debe agregar una macro al módulo de hoja, que hará todo el trabajo principal, es decir, agregar valores seleccionados a la derecha de las celdas verdes. Para hacer esto, haga clic derecho en la pestaña de la hoja con listas desplegables y seleccione el comando Código fuente. Pegue el siguiente código en la ventana del editor de Visual Basic que se abre:

Private Sub Worksheet_Change(ByVal Target As Range) En caso de error Reanudar siguiente Si no Intersect(Target, Range("C2:C5")) No es nada y Target.Cells.Count = 1 Entonces Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Entonces Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Si es necesario, reemplace el rango sensible de las listas desplegables C2:C5 en la segunda línea de este código con el suyo propio.

Opción 2. Verticales

Lo mismo que en la versión anterior, pero los nuevos valores seleccionados no se agregan a la derecha, sino al final:

Se hace exactamente de la misma manera, pero el código de la macro del controlador cambia ligeramente:

Private Sub Worksheet_Change(ByVal Target As Range) En caso de error Reanudar siguiente Si no Intersect(Target, Range("C2:F2")) No es nada y Target.Cells.Count = 1 Entonces Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Entonces Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Nuevamente, si es necesario, reemplace el rango sensible de las listas desplegables C2:F2 con el suyo propio en la segunda línea de este código.

Opción 3. Con acumulación en la misma celda

En esta opción, la acumulación ocurre en la misma celda donde se encuentra la lista desplegable. Los elementos seleccionados están separados por cualquier carácter dado (por ejemplo, una coma):

Las listas desplegables en celdas verdes se crean de forma completamente estándar, como en los métodos anteriores. Todo el trabajo lo realiza, nuevamente, una macro en el módulo de hoja:

Private Sub Worksheet_Change(ByVal Target As Range) En caso de error Reanudar siguiente Si no Intersect(Target, Range("C2:C5")) No es nada y Target.Cells.Count = 1 Entonces Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Finalizar sub  

Si lo desea, puede reemplazar el carácter separador (coma) en la novena línea de código con el suyo propio (por ejemplo, un espacio o un punto y coma).

  • Cómo crear una lista desplegable simple en una celda de hoja de Excel
  • Lista desplegable con contenido
  • Lista desplegable con opciones faltantes agregadas
  • Qué son las macros, cómo usarlas, dónde insertar código de macro en Visual Basic

Deje un comentario