Uno de mis colegas me preguntó si es posible realizar selecciones múltiples en una lista desplegable en Excel.
Cuando crea una lista desplegable, solo puede hacer una selección. Si selecciona otro elemento, el primero se reemplaza con la nueva selección.
Quería hacer múltiples selecciones desde el mismo menú desplegable de tal manera que las selecciones se agreguen al valor ya presente en la celda.
Algo como se muestra a continuación en la foto:
No hay forma de que pueda hacer esto con las funciones integradas de Excel.
La única forma es usar un código VBA, que se ejecuta cada vez que realiza una selección y agrega el valor seleccionado al valor existente.
Ver video: Cómo seleccionar varios elementos de una lista desplegable de Excel
Cómo hacer varias selecciones en una lista desplegable
En este tutorial, le mostraré cómo realizar selecciones múltiples en una lista desplegable de Excel (con repetición y sin repetición).
Este ha sido uno de los tutoriales de Excel más populares en este sitio. Como recibo muchas preguntas similares, he decidido crear una sección de preguntas frecuentes al final de este tutorial. Entonces, si tiene alguna pregunta después de leer esto, primero consulte la sección de preguntas frecuentes.Hay dos partes para crear una lista desplegable que permite múltiples selecciones:
- Creando la lista desplegable.
- Añadiendo el código VBA al back-end.
Crear la lista desplegable en Excel
Estos son los pasos para crear una lista desplegable en Excel:
- Seleccione la celda o rango de celdas donde desea que aparezca la lista desplegable (C2 en este ejemplo).
- Vaya a Datos -> Herramientas de datos -> Validación de datos.
- En el cuadro de diálogo Validación de datos, dentro de la pestaña de configuración, seleccione "Lista" como Criterios de validación.
- En el campo Fuente, seleccione las celdas que tienen los elementos que desea en el menú desplegable.
- Haga clic en Aceptar.
Ahora, la celda C2 tiene una lista desplegable que muestra los nombres de los elementos en A2: A6.
A partir de ahora, tenemos una lista desplegable donde puede seleccionar un elemento a la vez (como se muestra a continuación).
Para habilitar este menú desplegable para permitirnos hacer múltiples selecciones, necesitamos agregar el código VBA en el back-end.
Las siguientes dos secciones de este tutorial le darán el código VBA para permitir múltiples selecciones en la lista desplegable (con y sin repetición).
Código VBA para permitir múltiples selecciones en una lista desplegable (con repetición)
A continuación se muestra el código Excel VBA que nos permitirá seleccionar más de un elemento de la lista desplegable (permitiendo repeticiones en la selección):
Private Sub Worksheet_Change (ByVal Target As Range) 'Code by Sumit Bansal from https://trumpexcel.com' Para realizar selecciones múltiples en una lista desplegable en Excel Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$ C $ 2" Entonces, si Target.SpecialCells (xlCellTypeAllValidation) no es nada, entonces vaya a Ex If Oldvalue = "" Entonces Target.Value = Newvalue Else Target.Value = Oldvalue & "," & Newvalue End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Ahora debe colocar este código en un módulo en VB Editor (como se muestra a continuación en la sección "Dónde colocar el código VBA").
Cuando haya colocado este código en el backend (que se explica más adelante en este tutorial), le permitirá realizar varias selecciones en el menú desplegable (como se muestra a continuación).
Tenga en cuenta que si selecciona un elemento más de una vez, se volverá a ingresar (se permite la repetición).
Pruébelo usted mismo … Descargue el archivo de ejemplo
Código VBA para permitir múltiples selecciones en una lista desplegable (sin repetición)
Mucha gente ha estado preguntando sobre el código para seleccionar varios elementos de una lista desplegable sin repetición.
Aquí está el código que asegurará que un elemento solo se pueda seleccionar una vez para que no haya repeticiones:
Private Sub Worksheet_Change (ByVal Target As Range) 'Código de Sumit Bansal de https://trumpexcel.com' Para permitir múltiples selecciones en una lista desplegable en Excel (sin repetición) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = Verdadero en caso de error Ir a Ex Valor Application.Undo Oldvalue = Target.Value If Oldvalue = "" Entonces Target.Value = Newvalue Else If InStr (1, Oldvalue, Newvalue) = 0 Entonces Target.Value = Oldvalue & "," & Newvalue Else: Target.Value = Valor anterior End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Ahora debe colocar este código en un módulo en VB Editor (como se muestra en la siguiente sección de este tutorial).
Este código le permitirá seleccionar varios elementos de la lista desplegable. Sin embargo, solo podrá seleccionar un elemento una sola vez. Si intenta seleccionarlo nuevamente, no sucederá nada (como se muestra a continuación).
Pruébelo usted mismo … Descargue el archivo de ejemplo
Dónde poner el código VBA
Antes de comenzar a usar este código en Excel, debe colocarlo en el back-end, de modo que se active siempre que haya algún cambio en la selección desplegable.
Siga los pasos a continuación para poner el código VBA en el backend de Excel:
- Vaya a la pestaña Desarrollador y haga clic en Visual Basic (también puede usar el atajo de teclado - Alt + F11). Esto abrirá el Editor de Visual Basic.
- Debe haber un panel del Explorador de proyectos a la izquierda (si no está allí, use Control + R para hacerlo visible).
- Haga doble clic en Nombre de la hoja de trabajo (en el panel izquierdo) donde reside la lista desplegable. Esto abre la ventana de código para esa hoja de trabajo.
- En la ventana de código, copie y pegue el código anterior.
- Cierre el editor de VB.
Ahora, cuando regrese al menú desplegable y realice selecciones, le permitirá realizar selecciones múltiples (como se muestra a continuación):
Pruébelo usted mismo … Descargue el archivo de ejemplo
Nota: Dado que estamos usando un código VBA para hacer esto, debe guardar el libro de trabajo con una extensión .xls o .xlsm.
Preguntas frecuentes (FAQ)
He creado esta sección para responder algunas de las preguntas más frecuentes sobre este tutorial y el código VBA. Si tiene alguna pregunta, le solicito que consulte primero esta lista de consultas.
P: En el código VBA, la funcionalidad es solo para la celda C2. ¿Cómo lo obtengo para otras células? Respuesta: Para obtener este menú desplegable de selección múltiple en otras celdas, debe modificar el código VBA en el backend. Suponga que desea obtener esto para C2, C3 y C4, debe reemplazar la siguiente línea en el código: If Target.Address = "$ C $ 2" Entonces con esta línea: If Target.Address = "$ C $ 2" O Target.Address = "$ C $ 3" O Target.Address = "$ C $ 4" Entonces
P: Necesito crear varios menús desplegables en toda la columna 'C'. ¿Cómo obtengo esto para todas las celdas de las columnas con funcionalidad de selección múltiple? Respuesta: Para habilitar selecciones múltiples en menús desplegables en una columna completa, reemplace la siguiente línea en el código: If Target.Address = "$ C $ 2" Luego con esta línea: If Target.Column = 3 Then En líneas similares, si desea esta funcionalidad en la columna C y D, use la línea siguiente: Si Target.Column = 3 o Target.Column = 4 Entonces
P: Necesito crear varios menús desplegables seguidos. ¿Cómo puedo hacer esto? Respuesta: Si necesita crear listas desplegables con múltiples selecciones en una fila (digamos la segunda fila), debe reemplazar la siguiente línea de código: If Target.Address = "$ C $ 2" Entonces con esta línea: Si Target.Row = 2 Entonces De manera similar, si desea que esto funcione para varias filas (digamos segunda y tercera fila), use la siguiente línea de código en su lugar: Si Target.Row = 2 o Target.Row = 3 Entonces
P: A partir de ahora, las selecciones múltiples están separadas por una coma. ¿Cómo puedo cambiar esto para separarlos con espacio (o cualquier otro separador)? Respuesta: Para separarlos con un separador que no sea una coma, debe reemplazar la siguiente línea de código VBA: Target.Value = Oldvalue & "," & Newvalue con esta línea de código VBA: Target.Value = Oldvalue & "" & Newvalue De manera similar, si desea cambiar la coma por otro carácter, como |, puede usar la siguiente línea de código: Target.Value = Oldvalue & "|" & Newvalue
P: ¿Puedo obtener cada selección en una línea separada en la misma celda? Respuesta: Sí, puedes. Para obtener esto, debe reemplazar la siguiente línea de código VBA: Target.Value = Oldvalue & "," & Newvalue con esta línea de código: Target.Value = Oldvalue & vbNewLine & Newvalue vbNewLine inserta una nueva línea en la misma celda . Por lo tanto, cada vez que realice una selección en el menú desplegable, se insertará en una nueva línea.
P: ¿Puedo hacer que la funcionalidad de selección múltiple funcione en una hoja protegida? Respuesta: Sí, puedes. Para hacer esto, debe hacer dos cosas: Agregar la siguiente línea en el código (justo después de la declaración DIM): Me.Protect UserInterfaceOnly: = Verdadero En segundo lugar, debe asegurarse de que las celdas, que tienen el menú desplegable con funcionalidad de selección múltiple, no estén bloqueadas cuando protege toda la hoja. Aquí hay un tutorial sobre cómo hacer esto: Bloquear celdas en Excel