Tabla de contenido
Dependiendo de las circunstancias, es posible que necesite seleccionar varios valores dentro de una lista desplegable. En este tutorial, vamos a mostrarle cómo realizar una selección múltiple en una lista desplegable. Para esta sesión, estamos utilizando Excel 2019, siéntase libre de utilizar su versión preferida.
Antes de sumergirnos en la sesión, conozcamos el conjunto de datos en el que se basan nuestros ejemplos.
Aquí tenemos varios elementos de papelería, utilizando estos vamos a crear una lista desplegable y seleccionar varios elementos allí.
Tenga en cuenta que se trata de un conjunto de datos sencillo, pero en la práctica puede encontrarse con un conjunto de datos mucho más grande y complejo.
Cuaderno de prácticas
Puede descargar el cuaderno de prácticas en el enlace que figura a continuación.
Hacer selección múltiple de una lista desplegable.xlsm
Selección múltiple en una lista desplegable
En primer lugar, necesitamos crear una lista desplegable a partir de nuestras papelerías. Vamos a crearla rápidamente. No dudes en visitar el artículo relativo a la creación de una lista desplegable.
En el Validación de datos seleccione la opción LISTA e inserte el rango de celdas de los elementos.
B4:B11 es el rango que contiene los elementos de papelería. Ahora encontrará la lista desplegable.
Más información: Lista desplegable de Excel en función de la selección
1. Seleccionar varios elementos (permite duplicar la selección)
Una lista desplegable convencional siempre selecciona un único elemento. Aquí puede ver que hemos seleccionado Pluma de la lista (imagen inferior).
Ahora, si seleccionamos otro elemento, digamos Lápiz
sustituirá al valor anterior. Sólo Lápiz permanecerá seleccionada.
Para seleccionar varios elementos, debemos utilizar la función VBA Abrir el Microsoft Visual Basic para Aplicaciones (pulse ALT + F11 para abrirlo).
Ahora haga doble clic en el nombre o número de la hoja de cálculo en la que desea seleccionar varios elementos dentro de la lista desplegable. Encontrará la ventana de código para esa hoja en particular.
Aquí está la ventana de código para Hoja2 en nuestro libro de trabajo (tenemos la lista desplegable en esta hoja).
Una vez abierta la ventana de código, inserta allí el siguiente código
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.Value Application.UndoOldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else Target.Value = Oldvalue & ", " & Newvalue End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Guarde el código y ahora intente seleccionar valores en la lista desplegable.
Tras seleccionar Lápiz vamos a seleccionar otro elemento Cuaderno Como puede ver, hemos encontrado ambos artículos (imagen inferior).
Este código nos permitirá repetir la selección. Digamos que si seleccionamos Lápiz otra vez,
volveremos a encontrar el elemento en el cuadro de selección.
Código Explicación
Hemos declarado dos cadenas Valor antiguo y Nuevo valor .
Puedes ver que hicimos la lista desplegable en el D4 celda, por eso nuestra dirección de destino es D4 Y además, hemos vuelto a comprobar si la celda está utilizando la validación de datos o no utilizando Target.SpecialCells .
Una vez seleccionado un valor, desactivamos los eventos ( Application.EnableEvents = False
) para que los cambios no vuelvan a activar el evento. A continuación, almacena el elemento seleccionado en el campo Nuevo valor .
Después de deshacer el cambio, hemos introducido el valor en el campo Valor antiguo A continuación, compruebe si Valor antiguo está vacío o no. Si está vacío (significa que sólo se ha seleccionado un valor), devuelve el valor Nuevo valor En caso contrario, concatene los Valor antiguo y Nuevo valor .
Antes de finalizar se reiniciará el evento, para que podamos modificarlo si es necesario.
Más información: Múltiples Dependientes Lista desplegable Excel VBA
2. Seleccione varios elementos de la lista desplegable (sólo selección única)
En la sección anterior, hemos visto las selecciones múltiples donde se permitía la repetición. Si no quieres eso, entonces sigue esta sección.
Por comodidad, utilizamos una hoja aparte para esta demostración. Esta vez estamos en la Hoja3. Escribe el siguiente código en la ventana de código de esta hoja.
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & ", " & Newvalue Else: Target.Value = Oldvalue End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
¿Hay alguna diferencia en comparación con el código anterior? Eche un vistazo más de cerca, podrá notar la ligera diferencia.
Aquí hemos utilizado un VBA función llamada INSTR . INSTR devuelve la posición de la primera aparición de una subcadena en una cadena. Visita este artículo de INSTR para más información.
Utilizando esta operación lógica con InStr(1, Oldvalue, Newvalue) = 0, hemos comprobado si los valores se encuentran o no. Si la operación lógica devuelve TRUE (no encontrado anteriormente) entonces permite seleccionar el elemento y concatenar con el valor anterior.
Guarde el código y ahora intente seleccionar un elemento que ya ha sido seleccionado.
Aquí ya hemos seleccionado Lápiz si queremos volver a seleccionarlo, no podemos. No permite valores duplicados.
Más información: Cómo crear una lista desplegable desde otra hoja en Excel
3. Seleccionar elementos en Nueva línea
Hasta ahora, hemos visto que los elementos están separados por una coma. En esta sección, ordenaremos los elementos seleccionados en nuevas líneas.
Para simplificar, estamos fusionando algunas celdas con el D4 Para ello, seleccione las celdas que desea combinar y haga clic en Fusionar & Centrar del Alineación de la Inicio ficha.
La célula ganará más altura.
Ahora, veamos el código para separar elementos mediante nueva línea. Utilice el siguiente código
Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & vbNewLine & Newvalue Else: Target.Value = Oldvalue End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
La única diferencia con el código anterior es que esta vez utilizamos vbNewLine en medio OldValue y NuevoValor .
vbNewLine proporciona una nueva línea entre los elementos.
Ahora selecciona los elementos.
Seleccionamos un artículo Pluma Ahora selecciona otro elemento.
Verá que los dos artículos están en líneas diferentes.
Aquí tenemos dos valores, que están en dos líneas diferentes. Seleccionando otro valor lo añadiremos a otra línea. Cada valor estará en una nueva línea.
Tenga en cuenta que si desea otro delimitador para separar los elementos, utilícelo entre comillas dobles en lugar de vbNewline .
Conclusión
Esto es todo por hoy. Hemos enumerado varios métodos para realizar selecciones múltiples en una lista desplegable. Esperamos que le resulte útil. No dude en comentar si algo le parece difícil de entender. Háganos saber cualquier otro método que hayamos omitido aquí.