Lista desplegáble de selección múltiple

Tengo una lista de elementos y quiero que a través de una lista desplegable poder ingresas varios de los elementos en una celda. Al seleccionar múltiples elementos de la lista que esto aparezcan de forma concatenada en la celda.

1 respuesta

Respuesta
2

Aclarame x favor qué tipo de listas desplegables estás utilizando: en un Userform, en una hoja y en ese caso con qué herramienta la dibujaste.

Sdos y quedo atenta a tus aclaraciones. De paso te recomiendo que mires la demo de mi Guía N° 2, quizás también haya algún ej que te sirva.

Como planteaba en mi consulta, quiero rellenar una celda (o varias) con una serie de elementos concatenados (texto). Para hacerlo de una manera más eficiente quisiera disponer de una lista desplegable (preferentemente) que mostrara todo el conjunto de los elementos y de la cual seleccionar el subconjunto de elementos que deseo incorporar en esa celda. Mis intentos iniciales han estado basados en la opción que brinda el menú de datos/validación de datos en excel 2007. Si bien la forma en que funciona este tipo de lista desplegable es que la que necesito (puedo ver otros elementos de las tablas que me indican qué elementos de la lista seleccionar) ..en ella no puedo seleccionar múltiples elementos.

Espero haber sido más claro!

Así es, ese tipo de lista no te permite selección múltiple.

Tendrás que utilizar un control ListBox dibujado en la hoja, con la barra ActiveX o Cuadro de controles (no olvides indicarme tu versión Excel para precisar los conceptos).

Luego de dibujarlo, clic derecho sobre el control, opción Propiedades y modificá las siguientes:

ListFillRange: ingresá el rango de datos a mostrar, por ej: E1:E6

Multiselect: 1 para que te permita la selección múltiple

Ahora, clic derecho sobre el control, opción 'Ver código', te llevará al Editor de macros y allí copiá lo siguiente:

Private Sub ListBox1_LostFocus()
'x Elsamatilde
Dim cadena As String
 'se recorren todos los elemntos del Listbox. Se resta 1 porque se empieza de 0
 For x = 0 To ListBox1.ListCount - 1
' si el elemento se encuentra seleccionado se lo agrega a una variable
 If ListBox1.Selected(x) = True Then
 cadena = cadena & ListBox1.List(x) & ", "
 End If
 Next x
 'coloco la cadena en la celda activa
 ActiveCell.Value = cadena
End Sub

Para ejecutarlo, luego de seleccionar los elementos de la lista, seleccioná la celda donde quieras el resultado y allí lo tendrás.

Sdos y no dejes la consulta sin finalizar.

mi versión de excel es el 2007 intentaré lo que me propones y luego le digo...no se preocupe que no dejaré la consulta abierta

un salu2

Bien, quedo a la espera entonces. Sdos!

La verdad es que el código del ejemplo me da error al seleccionar uno de los elementos de la lista (ListBox) se imprimía un cero (0) en la celda seleccionada en vez de dichos elementos. No sé cual habrá sido la causa del error, pero de todas formas el uso de las ListBox me parece engorroso para lo que deseo hacer...sobretodo teniendo en cuenta que (al parecer) debo insertar un listbox por cada una de las celdas donde debo incorporar elementos, o hacer modificaciones en el listbox original por cada celda que desee rellenar. Tenga en cuenta que son aproximadamente 400 y pico de celdas en las que debo hacer el mismo proceso. La lista desplegable que ofrece por defecto es muy cómoda en ese sentido y por tanto más efectiva para hacer el trabajo. Por el momento lo estoy haciendo "a mano". Si existe alguna sugerencia será bien recibida.

GRacias!

salu2

Si las 400 celdas y pico presentarán los mismos valores en la lista de validación, podes utilizar 1 solo control Listbox para todos.

La rutina que te dejé las pegará en la celda que selecciones, es decir en cualquiera de las 400.

Con respecto al error a mí no me ocurre, habría que revisar cómo lo estás utilizando. Puedo enviarte mi ejemplo para que compares.

Solo te agrego unas instrucciones al final para que el control pierda la selección y puedas volverlo a utilizar para otra celda.

Private Sub ListBox1_LostFocus()
'x Elsamatilde
 Dim cadena As String
 'se recorren todos los elemntos del Listbox. Se resta 1 porque se empieza de 0
 For x = 0 To ListBox1.ListCount - 1
' si el elemento se encuentra seleccionado se lo agrega a una variable
 If ListBox1.Selected(x) = True Then
 cadena = cadena & ListBox1.List(x) & ", "
 End If
 Next x
 'coloco la cadena en la celda activa
 ActiveCell.Value = cadena
 'limpio el control de elementos seleccionados
 For x = 0 To ListBox1.ListCount - 1
 If ListBox1.Selected(x) = True Then ListBox1.Selected(x) = False
 Next
End Sub

Cabe aclarar que esto no es posible (concatenar textos) con las listas validadas del menú Datos. Salvo un desarrollo algo más complejo donde por cada cambio en la celda se vaya acumulando en una cadena hasta que cambies de celda o le des a un botón de OK, para pegarlo..... pero intenta primero con el listbox. Enviame un correo (aparece en mi sitio al pie) o dejame un correo tuyo para enviártelo.

OK Elsa lo miraré...de todas maneras te digo que cada celda tendrá contenidos diferentes.. la idea es realizar un proceso de etiquetado de unas descripciones...Sé que existen herramientas específicas para el etiquetado pero ninguna me ofrecía la flexibilidad de que me ofrece excel para luego procesar los datos. te mando luego un mail..

gracias

No, entonces si cada celda tiene listas diferentes desde ya que no será posible con el ListBox...

any suggestions???

salu2

Lo mencionado anteriormente:

Salvo un desarrollo algo más complejo donde por cada cambio en la celda se vaya acumulando en una cadena hasta que le des a un botón de OK o a un atajo te teclado, para pegarlo en celda destino.

La celda destino tiene que estar 'relacionada a la celda del desplegable, por ej: si el desplegable está en fila1 también la celda destino. Y si hay más de 1 desplegable en fila1 se tiene que tener en claro la referencia: a A1 le corresponde B1 y así.

Si esta opción te es posible, por favor finaliza esta consulta que ya se ha extendido bastante, y deja la nueva en el tablón indicando 'que habrá diferentes listas para cada desplegable'. Desde allí te seguiré con el tema.

Sdos

Elsa

A pesar de que no ha habido una solución concreta y efectiva para el problema planteado, la atención brindada por la experta ha sido muy profesional. Se han aportado soluciones alternativas que no han sido suficientes pero que han servido para debatir y aprender más sobre la herramienta Excel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas