domingo, julio 15, 2012

Listas desplegables dependientes con combobox

Algunos de mis memoriosos lectores recordarán seguramente las notas sobre listas desplegables dependientes y listas desplegables dependientes múltiples que publiqué hace ya más de seis años la primera y casi cuatro años atrás la segunda.



Ambas fueron muy populares, con más de 120000 vistas y 250 comentarios. Hasta hoy en día sigo recibiendo comentarios y consultas relacionados con el tema de las notas. Una de las consultas más corrientes es como construir el modelo pero usando el control combobox en lugar de validación de datos, que es la técnica que muestro en esas notas.

Hay varias razones para usar el control combobox en lugar de listas desplegables de validación de datos. Una de ellas es la posibilidad de usar la propiedad de autocompletar del combobox. Otra es el hecho de que con validación de datos, la opción se hace evidente sólo cuando se elige la celda que la contiene. Sólo cuando seleccionamos la celda que contiene la lista veremos la flecha que nos permite desplegar la lista de opciones. En cambio el cuadro combinado (combobox) es un objeto visible permanentemente.

Empecemos por recordar que Excel cuenta con dos colecciones de objetos que pueden ser incluidos en una hoja: controles de formulario y controles ActiveX



Los controles de Formulario son más fáciles de implementar, pero no nos sirven para nuestro modelo ya que no aceptan nombres que se refieren a rangos y tampoco se pueden programar.

El primer paso es crear los nombres definidos que alimentan las listas desplegables. A los efectos de este ejemplo, los rangos serán estáticos. En un modelo más avanzado crearíamos nombres definidos con rango dinámicos.

La forma más práctica de crear nombres definidos con rangos estáticos es usar la funcionalidad “Crear desde la selección”



En la hoja “Ciudades” los rangos tienen tamaños distintos por lo que usaremos un pequeño truco para no tener que definir cada nombre por separado. En la hoja “Ciudades” tenemos de hecho una tabla donde los nombres de los países figuran en la primer fila. El proceso es el siguiente:


  1. Elegimos una de las celdas de la tabla (en nuestro ejemplo A1)
  2. Apretamos Ctrl + * para seleccionar todo el rango de la tabla
  3. Accionamos F5 (Ir A), apretamos el botón Especial y seleccionamos la opción Constantes-Texto. Esto hace que sólo las celdas que contienen los nombres de las ciudades sean seleccionadas.
  4. Finalmente usamos “Crear desde la selección-Fila superior”


Este video muestra el proceso



Ahora tenemos que insertar los controles en la hoja. Elegimos el control cuadro combinado (combobox) de la colección ActiveX y lo insertamos en la hoja



Al insertar el objeto en la hoja se activa al modo Diseño; en este estado, con el sontrol seleccionado, abrimos el menú Propiedades para definir dos propiedades el control: Linked Cell y ListFIllRange



LinkedCell es la celda donde aparecerá el resultado de la elección; en este control ponemos A2. ListFillRange es el rango que contiene los valores de la lista desplegable (en nuestro caso el nombre definido Continentes)



Una vez definidas las propiedades apretamos el icono Diseño para pasar a la situación normal de uso del control. Ahora podemos elegir un contienente y éste se registrara en la celda A2



Como explicamos en las notas anteriores, los nombres definidos no aceptan espacios entre las palabras. Por lo tanto usamos la función SUSTITUIR para transformar el resultado del control al nombre definido. En la celda A4 ponemos

=SUSTITUIR(A2," ","_")

Antes de agregar un nuevo control para la lista desplegable de los países definimos el nombre “continente elegido” que se refiere a esta fórmula:

=INDIRECTO(eleccion!$A$4)

En las propiedades del control definimos:

LinkedCell: A6
ListFillRange: continente_elegido

De esta manera la lista de las ciudades depende del continente elegido y el país elegido se registra en la celda A6



Nos resta insertar el control para elegir las ciudades. Empezamos por poner la fórmula

=SUSTITUIR(A6," ","_")

en la celda A8 para transformar la elección del cuadro combinado en el nombre definido que contiene las ciudades del país elegido.
Luego creamos el nombre definido “país_elegido” que se refiere a la fórmula:

=INDIRECTO(eleccion!$A$8)

Ahora definimos las propiedades del control:

LinkedCell: A10 (o cualquier otra celda donde queramos que aparezca la ciudad)
ListFillRange: pais_elegido



Un último toque es programar un evento que limpie el contenido de las combobox cuando se cambia la elección del continente. En el módulo de la hoja del editor Vbe ponemos este código

Private Sub ComboBox1_Change()
    ComboBox2.Value = ""
    ComboBox3.Value = ""
End Sub


Este evento hace que cuando se cambia el valor en la Combobox1 (continents), se borran los valores de las dos restantes combobox.

El archivo del ejemplo se puede descargar aquí.


Todo sobre listas desplegables en Excel, técnicas avanzadas y descarga gratuita de ejemplos  en la Caja de Herramientas Excel - Listas Desplegables de JLD. Ver la nota o ir a la página de descarga de la guía.

98 comentarios:

  1. Fenómeno, gran explicación. Me queda la duda de como sacarle utilidad. Estoy dándole vueltas, y esto con que lo podemos combinar? Es decir, el combobox me muestra los paises y continenes que elija, y luego? Podría vincular esas celdas a algo y que me variara el contenido de alguna celda?

    A ver si me ayudáis. Gracias!

    ResponderBorrar
  2. En dashboards o en cualquier tipo de informe dinámico donde el usuario elige los valores y el informe refleja los parámetros elegidos. Puedes fijarte por ejemplo en esta nota.

    ResponderBorrar
  3. Jorge, muy bueno el tutorial, excelente explicación. Te hago una consulta, necesito que cuando utilizo el combobox y digito alguna palabra que no existe en la tabla de datos original, dandole al intro u otro método me permita incorporarla en la tabla de datos original. Como se podría hacer eso?, gracias por tu atención.
    Saludos Crisco

    ResponderBorrar
  4. Crisco,
    habría que programar un evento que lo haga. Tal vez publique una extensión a esta nota basada en tu consulta.

    ResponderBorrar
  5. OK Jorge, mientras intento hacerlo como dices, espero con ansias la extensión de la nota, gracias.
    Crisco

    ResponderBorrar
  6. Hola Jorge, muy bueno el tema. Te comento que al seleccionar América Central, México y escoger ciudad sólo se despliega Akumal y Cancun y no todas las ciudades como la imagen que tú muestras. Esto pasa en todas las ciudades, sólo se despliegan dos, ¿por qué será?. Saludos,Pamela

    ResponderBorrar
  7. Hmmm, no se por qué. Acabo de subor un nuevo archivo. Espero que esta vez funcione bien.

    ResponderBorrar
  8. Hola Jorge. Necesito usar el resultado de un combobox como texto, para ser utilizado en una formula de concatenar textos, pero me arroja un número, que supongo es el indice automático que le asigna excel. ¿cómo puedo dejarlo como texto?. Gracias. Jorge Urzúa

    ResponderBorrar
  9. En lugar de usar la combobox de la calección controles de formularia, tendrías que usar la combobox de la colección ActiveX.
    Si po algún motivo tenés que usar la combobox fr Formularios, que da el número de índice, tendrías que usar la función INDICE para obtener el valor de la lista.

    ResponderBorrar
  10. Oye man una pregunta....como puedo crear una lista a partir de 1 solo ComboBox....por ejemplo enlistar las ventas de un periodo mediantes un solo Combobox. Se que seria posible haciendo varios Combobox, pero veo que se puede linkear el resultado a una celda, me gustaria linkearlo a toda una lista de celdas. Gracias!!!

    ResponderBorrar
  11. No tengo claro qué es lo que tiene que aparecer en la combobox, los períodos o las ventas del perído?

    ResponderBorrar
  12. Hola, estoy intentando hacer esta practica, pero no me aparecen todos los valores como a ti, los rangos que estoy utilizando variables entre cada una, pero a lo mucho solo me aparecen 7 servicios de 18 por ejemplo, a que se podria deber este detalle?

    ResponderBorrar
  13. No podría decirlo sin ver el archivo.

    ResponderBorrar
  14. hola jorge en el ejemplo tuyo despues del primer sustituir en que celda va
    =INDIRECTO(eleccion!$A$4)
    ya que no puedo seguir

    gracias por tu ayuda

    ResponderBorrar
  15. ¿Podrías dar una explicación más detallada del problema?

    ResponderBorrar
  16. COmo puedo vincular un combobox con un cuadro de lista, es decir, que al seleccionar un nombre en el combobox, aparesca en el cuadro de lista la direccion telefono, etc de una persona?
    Gracias!

    ResponderBorrar
  17. Creando el código correspondiente, obviamente. El marco de un comentario no da para desarrollar el tema así que te sugiero consultes en alguno de los muchos foros de Excel/Vba.

    ResponderBorrar
  18. Hola Jorge... Solo para agradecerte tu publicación, ya que por tu post pude crear muchas graficas dinamicas sin necesidad de utilizar pivot table, por cierto, solo como comentario, tambien se pueden usar Concatenaciones y anidaciones en los indirectos, ésto para ahorrar procedimientos, como por ejemplo:
    Ejemplo 1 Anidación
    =INDIRECTO(SUSTITUIR(Dashboard!$B$1," ","_"))
    Ejemplo 2 Concatenación y anidación
    =INDIRECTO(SUSTITUIR(Dashboard!$B$1," ","_")&1))
    Gracias... y en realidad infinitamente agradecido...!!

    ResponderBorrar
  19. Donde Pongo la fórmula INDIRECTO?

    Gracias por la ayuda

    ResponderBorrar
  20. Al definir el nombre, en "se refiere a". Te sugiero que descargues el archivo del ejemplo y lo analices.

    ResponderBorrar
  21. Hola!!! Me gusta como explicas los procesos que hasta parecen sencillos y así son!!

    Yo tengo un problemita al momento de ponerlo en práctica, ya que al tener los tres ComboBox, el segundo no me muestra el 100% de los que están en lo que lo que puse, en el adminustrador de nombres y en el tercero, muestra espacios vacíos cuando despliegas la lista y al mismo tiempo no muestra el 100% de lo enlistado.

    ¿qué puede ocurrir?

    Gracias

    ResponderBorrar
  22. Te sugiero que me envíes el archivo (fijate en las instrucciones en el botón Ayuda, en la parte superior de la plantilla).

    ResponderBorrar
  23. Buenas Jorge,

    En primer lugar, enhorabuena por el blog.
    Lo que yo estoy intentando hacer y no consigo saber como, es una lista desplegable, por ejemplo en la columna A, pero que al seleccionar una de las opciones de dicha columna, me cargue los valores asociados a esa selección en las columnas B,C,D... que estarían almacenados en otras columnas. Es decir, que si hay una lista de clientes, al seleccionar el nombre de la lista desplegable, me cargue el DNI, dirección, fecha de nacimiento en las columnas B, C y D respectivamente. No sé si me he explicado bien.

    Un saludo y gracias por adelantado

    ResponderBorrar
  24. Fran,
    si con cargar te refieres a que aparezcan en determinadas celdas de la hoja, tienes que usar la función BUSCARV.

    ResponderBorrar
  25. Buenas Jorge,

    Eso es justo lo que estaba buscando. Muchas gracias!

    ResponderBorrar
  26. Hola, primero que todo muy grandiosos tus post, pero en este me he quedado con una duda, al bajarlo y revisarlo un poco mire que hay un nombre creado que dice "nro_de_fila", y mi pregunta es que para que y donde se utliza??? es necesario para que funcione bien esto??

    ResponderBorrar
  27. No tiene ningún uso. Lo definí experimentando con distintas posibilidades al escribir la nota y me olvidé de eliminarlo en la versión final. Podés eliminarlo del modelo sin ingún problema.
    Gracias por llamar la atención.
    ¿Has visto esta nota?

    ResponderBorrar
  28. SI, me he leido muchos de tus post que tienen q ver con las listas, estan muy interesantes y han sido de mucha ayuda, gracias por la ayuda amigo

    ResponderBorrar
  29. Estimado, junto con saludarlo y agradecer esta gran ayudar, quiero si es posible que me ayude con la dependencia pero en el caso que la segunda dependencia utilice parte de un rango en común, por ejemplo: materiales: madera, yeso, espesor: 10 mm, 12 mm, siendo madera de 10 mm., es decir, espesor es compartido por dos o mas materiales, en el ejemplo propuesto serían las ciudades pero solo por un país, como puedo generar dicha dependencia modificando el rango de las celdas, esa es más o menos el problema, sin tener que crear listados únicos.Gracias

    ResponderBorrar
  30. Estimado, me puede ayudar con el uso del INDIRECTO, no logro aplicarlo para la dependencia. Una consulta más si es posible, como se puede bloquear la tercera dependencia, dado que al seleccionar el continente, este es seleccionado, pero si yo quiero seleccionar la ciudad te muestra por defecto la primera de la lista, es posible dejar en blanco dicha selección, y solo que demuestre una vez realizado las selecciones anteriores?. Gracias una vez mas

    ResponderBorrar
  31. Estimado,
    si el espesor no depende del material no hay necesidad de crear lista dependiente. Sencillamente tendrías una lista independiente de materiales (yeso, madera) y una de espesores. La dependencia es necesaria si todos o algunos de los espesores dependen del material).

    ResponderBorrar
  32. En relación a la consulta sobre el uso de INDIRECTO, no termino de entenderla. Las celdas están en blanco hasta que se elige un valor en la lista deslegable.

    ResponderBorrar
  33. Hola Jorge
    Una consulta, mira yo necesito configurar una hoja de excel donde, por ejemplo, la columna "B" sea de tipo combobox y este combobox se llene de valores provenientes de una base de datos SQL Server, asi cada vez que cambie de fila se aparezca este combo y me permita seleccionar el dato. Esto para que pueda llenar una hoja seleccionando valores existentes en un DB y no de una hoja de excel, tienes alguna idea de como hacer esto, de antemano te agradezco la ayuda.

    ResponderBorrar
  34. Princessa,
    para crear una combobox que aparezca cuando se activa una celda de un rango determinado te sugier ver la técnica que muestro en esta nota.
    En cuanto a la fuente de valores de la combobox veo dos posibilidades:
    1 - usar Datos-Obtener datos externos para crear una tabla. Se puede establecer que la tabla se actualice automáticamente cada vez que se abra el libro o usar el botón Actualizar.
    2 - Usar Vba para definir los valores de la combobox (ListFillRange).

    ResponderBorrar
  35. Estimado,

    Ya realice toda la formulacion, pero me esta trayecto en el 2 combo box solo el primer dato de mi lista, la lista es de mas de un dato.

    Q pudiera ser este error?

    Saludos Cordiales.

    Gracias.

    ResponderBorrar
  36. Te sugiero que descargues el ejemplo y lo analices para ver donde esta tu error.

    ResponderBorrar
  37. Jorge,

    Me quedan 2 dudas:

    Si quiero poner fechas en el ComboBox, como lo cambio a formato fecha?

    No me aparece la lista completa de los nombres en el ComboBox, me aparece la cantidad de datos que contiene la primera columna de la hoja de la hoja que seleccioné!

    Muchas Gracias!
    Esteban

    ResponderBorrar
  38. Hola Esteban,

    para cambiar el formato del valor de la comcobox a fecha hay que programar el evento Change del objeto con este código

    Private Sub ComboBox1_Change()
    ComboBox1.Value = CDate(ComboBox1.Text)
    End Sub

    En breve publicaré una nota con una explicación más detallada.

    En cuanto a la segunda consulta tengo que ver cómo estas definiendo la propiedad ListFillRange de la combobox.

    ResponderBorrar
  39. Muchas gracias!! estuve buscando mucho y no encontraba algo tan claro como este!
    Gracias
    Saludos desde chile!

    ResponderBorrar
  40. Hola Jorge
    Estuve mirando esta nota.
    Me gustaría utilizar un combobox que al cargar una lista alfabeticamente desordenada, en primer lugar la ordene y en segundo lugar que cuando escriba en el combobox se autofiltre según las letras que voy escribiendo.

    Ej si necesito buscar "trucha de río" y tipeo truch aparezcan las "truch" que pueda tener en la lista. Si en la lista tengo trucha de río, trucha de mar y trucha salmonada me tendría que aparecer esas tres.

    Espero que lo hayas entendido

    Saludos

    Amadeo

    ResponderBorrar
  41. Hola Amadeo

    el tema de la lista desplegable ordenada lo he tratado en esta nota y ampliado en esta otra.
    En cuanto al tema del "autofiltrado" de la lista, he mostrado una técnica que permite hacer algo muy aproximado a lo que pides en esta nota.
    Tal vez publique algo sobre el "autofiltrado" de listas desplegables.
    También puedes adquirir mi guía sobre el tema de listas desplegables.

    ResponderBorrar
  42. Saludos,

    Muy interesante el blog, mi inconveniente es que cuando pretendo introducir el nombre para el ListFillRange del segundo Combobox, no lo graba; descargue el archivo de ejemplo y repetí la totalidad del ejercicio, pero el problema se repite, Muchas Gracias

    ResponderBorrar
  43. Muchas Gracias, encontré mi error, pense que "eleccion" era una función y estaba copiando igual la formula..... y eleccion es el nombre del libro....

    ResponderBorrar
  44. Muchas gracias por las publicaciones. Tengo una duda..

    Quiero tener una combobox con 4 opciones y que segun la que seleccione me realice una operacion matemática y me la muestre en unas celdas determinada.¿Es posible?

    Me explico. Yo tengo 4 opciones que son clases de motores. si selecciono la opcion A quiero que en la celda H7 se me muestre un dato calculado anteriormente en un commandbutton mulltiplicado por 0.6 y en la H8 ese mismo dato multiplicado por 0.4.

    Me salvarías la vida si pudiseses orientarme, es para un programa importante. Miles de gracias.

    ResponderBorrar
  45. Si, por supuesto. Pero aclaremos que en CommandButton no se realizan operaciones, se activan macros. La combobox tiene que estar vinculada a una celda y ésta recibe el número de orden de la opción elegida (si usas el control de la colección de Formularios). De acuerdo a este valor puedes usar la función SI o la función ELEGIR para que en la celda requerida se efectúe el cálculo apropiado.

    ResponderBorrar
  46. Me podrías ayudar a introducir una lista en un formulario? Quiero que al ingresar datos en una BdD mediante un formulario, para algún campo se desplegué una lista y solo puedas introducir los valores de esa lista.
    Muchas gracias.

    Pilar

    ResponderBorrar
  47. Hola Jorge, mi problema es muy básico. Quiero introducir datos en una BdD a través de un cuestionario, uno de los campos tiene que incluir una lista desplegable de la que el introductor seleccionará un valor. No consigo que en el formulario aparezca la lista, que si está en la base de datos y en validación de datos. Podrías ayudarme? Gracias

    Pilar

    ResponderBorrar
  48. Pilar, en la nota se muestra la técnica paso por paso para incluir los valores en la lista desplegable. Si el método con combobox te resulta complicado puedes usar validación de datos con la opción lista para crear la lista desplegable y validar los datos.
    Puedes ver las notas sobre el tema en el blo haciendo un clic a las etiquetas "Validación de datos" o "Listas Desplegables", en la nube de etiquetas.

    ResponderBorrar
  49. Gracias Sr. Dunkelmam, pero no consigo hacerlo. El problema puede ser que trabajo en Office 2011 para Mac? No encuentro los comandos que usted me indica.
    Muchas gracias

    Pilar

    ResponderBorrar
  50. Si, todos los ejemplos están basados en Office para Windows

    ResponderBorrar
  51. como definen cotinente_elegido??
    muchas gracias

    ResponderBorrar
  52. Fijate en la nota, en la parte que dice:Antes de agregar un nuevo control para la lista desplegable de los países definimos el nombre “continente elegido” que se refiere a esta fórmula:....
    También puedes descargar el ejemplo.

    ResponderBorrar
  53. Estimado jorge
    TE escribo en este apéndice para preguntarte como puedo hader un combobox que al tenner una lista en él. Tipeando las letras se autofiltre. Que si escribo un par de letras aparezcan solo una lista que incluya estas letras.
    Siempre muy atento te saludo esperando una posible respuesta

    Amadeo

    ResponderBorrar
  54. Le batalle para que me funcionara pero al final salio, GRACIAS por tan magnifico apoyo....

    ResponderBorrar
  55. Estimado Jorge: excelente post!! Solo tengo un problema: cuando quiero definir el ListFillRange del 2do. Combobox, al poner el nombre definido, se me borra (y la fórmula definida para el nombre está correcta!!) Qué puede ser? Ya descargué el ejemplo suyo y no logro entender por qué me da ese error a mí!! Muchas gracias! Saludos

    ResponderBorrar
  56. No puedo decirte sin ver tu modelo. Puedes enviarlo siguiendo las instrucciones que aparecen en Ayuda (en la parte superior de la plantilla).

    ResponderBorrar
  57. Hola Jorge,

    Gracias por su blog. Es muy ilustrativo. Tengo una consulta: Hay manera de seleccionar valores múltiples de una lista y que los resultados me aparezcan en una misma celda. Por ejemplo, tengo en una lista peras, manzanas y naranjas, pero no quiero seleccionar uno sólo si no la combinación de varios.

    Gracias.

    ResponderBorrar
  58. Hola Angélica, se puede hacer pero usando otro tipo de control, el ListBox. Lo que no me queda claro que es lo que quieres hacer con los valores seleccionados. Una celda puede contener sólo un valor. Por ejemplo, si seleccionamos "peras", "manzanas" y "uvas", ¿qué es lo que tendría que aparecer en la celda?

    ResponderBorrar
  59. Buenas tardes Jorge, antes me salía sólo 2 valores de la lista y ahora sólo 1, cuando éstas poseen más. He leído que alguien más le ha pasado, pero no encuentro la posible solución.
    Un saludo y muchas gracias por tu blog.

    ResponderBorrar
  60. Hola Jorge, me salía 2 y ahora sólo 1 fila de la lista del combo, cuando tienen más. He comprobado bien las listas, creadas con Indirecto.
    Un saludo y gracias por tu blog.

    ResponderBorrar
  61. Miguel Ángel, tendrás que enviarme el archivo (fijate en el enlace Ayuda, en la parte superior de la plantilla).

    ResponderBorrar
  62. Hola! Gracias por el post!
    Tengo un problema: Ejecuté el combo dependiente, funciona bien. Cierro y abro la planilla y ya no aparece nada en el dependiente! Arreglo, vuelvo a configurar, todo bien, cierro, abro, y ya no aparece nada de nuevo! Qué podrá suceder? GRacias. MArio

    ResponderBorrar
  63. Hola Mario,
    ¿qué tipo de comtrol usas (formulario o ActiveX)? ¿Dónde guardas los datos de origen del combobox? ¿Podés describir el arreglo que hacés?

    ResponderBorrar
  64. Hola Jorge. Los datos están en otras hojas del mismo libro. Una hoja tiene área de labores y otra hoja los cargos para cada área, análogamente a los planteas en el post, con casi nula variación, excepto que muestro las selecciones en otra hoja. Y funciona bien. Sólo oculto las hojas con los datos. Funciona bien. Cierro excel, vuelvo a abrir y ya desaparecen los datos del combo dependiente, manteniendo la configuración. Resuelvo eliminando el combo, genero otro, le doy los parámetros, todo bien. Cierro, abro, y ya no están. ¿? Gracias!

    ResponderBorrar
  65. Ah! Ocupo Activex! Gracias, Mario

    ResponderBorrar
  66. Mario, enviame una copia del archivo para que pueda hacerme una idea más cabal del problema. Fijate en el enlace Ayuda (en la parte superior del blog).

    ResponderBorrar
  67. Hola Amigo por favor me podrias ayudar .
    Necesito que al encontrar el dato en el combobox de enter y se pase a la casilla de excel adjunta como lo ago

    ResponderBorrar
  68. Como aparece en el post, definiendo la celda donde debe aparecer el dato en la propiedad Linked Cell.

    ResponderBorrar
  69. Hola: Estoy probando tu ejemplo y con Excel365 da problemas cuando cambias los elementos de un combo, me explico.
    He añadido Paises a los continentes, y cuando cambias de continente, la lista de los países solo muestra 2 elementos, en vez de los 3 o 4 que haya puesto.
    No se si con otras versiones de Excel funciona bien, pero con Office365 es lo que pasa :-(

    ResponderBorrar
  70. Excel 365 se comporta como Excel 2013, así que no creo que se trate de un problema de versiones. Te sugiero que me envíes el archivo (fijate en el enlace Ayuda, en la parte superior del blog).

    ResponderBorrar
  71. Hola amigo, Excelente la Explicacion! pero no logro entender la parte de "crear el nombre definido" y el uso de la formula =INDIRECTO(eleccion!$A$4), cuando yo copio =indirecto en mi excel, no me aparece como funcion eleccion, sino "elegir" descargue el archivo de ejemplo, pero no consigo donde utilizaste esa formula!

    ResponderBorrar
  72. Hola! muy buena la explicacion, lo que me sucede es que creo el nombre definido con la formula =INDIRECTO(eleccion!$A$4) pero cuando lo coloco en las propiedades del combobox no me lo toma!

    ResponderBorrar
  73. Hola Jorge, he cogido tu archivo y le he añadido países a cada continente. Cada continente contiene un numero 'diferente' de paises, esto es importante, en tu ejemplo siempre son 2 países.
    Posteriormente he cambiado los nombres de los continentes para que reconozcan los nuevos países, y cuando cambias el continente en el combo, la lista de los países solo muestra 2 países, aunque el continente tenga 3.
    Es decir, cuando se cambia un valor en un combo, falta un 'refresco' del control para que se dé cuenta de que el nº de elementos de la lista ha cambiado. No hay problema si el nº de valores es siempre el mismo (o mayor que 8), pero con listas pequeñas (2,3,4 elementos), no siempre muestra todos los valores (o muestra valores vacíos)
    Yo lo he solucionado así:
    Public Sub ComboBox1_Change()
    ComboBox2.ListFillRange = ComboBox2.ListFillRange
    ' Provoca un refresco del control.
    End Sub
    Saludos

    ResponderBorrar
  74. Para una expliación sobre los "nombres definidos" te sugiero leer esta nota del blog (tiene más de 8 años pero los conceptos siguen vigentes en las versiones actuales de Excel).
    En cuanto a la función INDIRECTO, puedes ver que aparece en el asistente de fórmulas (también aparece entre las funciones sugeridas cuando empiezas a escribir =IND en la barra de las fórmulas).
    ¿Qué versión de Excel y en qué idioma usas?

    ResponderBorrar
  75. Estimado, la fórmula no va en las propiedades del combobox sino en la definición del nombre definido, tal como se explica en la nota.

    ResponderBorrar
  76. Como puedes ver en el video (o descargando el archivo), la lista desplegable se adapta a la elección Continente-País. Así que supomgo que el problema está en otro lado (¿has descargado el ejemplo).
    De todas maneras te sugiero ver esta nota y tembién esta otra.

    ResponderBorrar
  77. Hola Jorge... Primero agradecerte por excelente post!! He seguido las pautas y el ejemplo minuciosamente pero al definir el ListFillRange del 2do. Combobox (contacto_elegido) se me borra. Que estaré haciendo mal??..
    Te agradezco por la respuesta.
    Saludos
    Miguel

    ResponderBorrar
  78. Hola Miguel, te sugiero que descargues el ejemplo (hay un enlace al final del post) y veas si te ayuda. También puedes enviarme el archivo siguiendo las instrucciones que aparecen en el enlace Ayuda (en la parte superior de la plantilla del blog).

    ResponderBorrar
  79. Está bueno, pero sería genial algo similar en VBA en un form para gestionar un montón de cosas que son requeridas, pero que a veces se torna un plato de tallarines o fideos poder desarrollar en Excel.

    ResponderBorrar
  80. Hola muchas gracias por el ejemplo, tambien descargue el ejemplo, pero al momento de desplegar mi segundo combobox solo me da 5 opciones de marcas por departamento, cuando cada departamento varia las opciones de marcas :(, que es lo que esta haciendo mal?
    Gracias

    ResponderBorrar
  81. Tendrías que enviarme el archivo para ver donde puede estar el problema.

    ResponderBorrar
  82. Ok, a que correo le envío el archivo?

    ResponderBorrar
  83. FIjate en el enlace Ayuda (en la parte superior del blog).

    ResponderBorrar
  84. Adrian Guarniz23 julio, 2016 01:24

    Buenas tardes maestro! No consigo entender la parte "Luego creamos el nombre definido “país_elegido” que se refiere a la fórmula:

    =INDIRECTO(eleccion!$A$8)
    "

    ResponderBorrar
  85. Nombres definidos sonuna forma de definir rangos. Fijate en esta nota (bastante antigua, del año 2006)

    ResponderBorrar
  86. Muchachos, puedo hacer esto mismo con una macro?

    ResponderBorrar
  87. Por supuesto:
    http://jldexcelsp.blogspot.co.il/2013/03/listas-desplegables-dependientes-otra.html

    o

    http://jldexcelsp.blogspot.co.il/2013/03/listas-desplegables-dependientes.html

    ResponderBorrar
  88. Hola, en tu ejemplo cada continente tiene dos países, pero en las ciudades que son varias, al abrir el dato, se despliegan solo la cantidad de casos que tenía la original, de hecho en los casos de pocos paises, quedan espacios en blanco y luego se repiten los primeros. Me pasa esto también con mi archivo, podrías ayudarme? debo cambiar alguna configuración en propiedades?

    Gracias!

    ResponderBorrar
  89. Fijate lo que pongo en el enlace Ayuda (en la parte superior del blog) y ponte en contacto conmigo por mal privado.

    ResponderBorrar
  90. Hola Jorge, muy buen post!!

    Necesito que las distintas selecciones que realizo vayan creando una lista. Esto es posible?

    Es decir que la lista quedaria por ejemplo:

    A1:America del Sur B1:Guatemala
    A2:America del Norte B2:EE.UU
    A3:Europa B3:España
    A4:... B4:...

    Espero se comprenda lo que preciso.
    Muchas gracias.
    Saludos.

    ResponderBorrar
  91. Hmmm..no me queda claro. Lo que buscas es que en lugar de ordenar las listas desplegables de arriba hacia abajo, ¿estén ordenadas de izquierda a derecha?

    ResponderBorrar
  92. Hola Jorge:
    Llegué a tu tutorial en busca de una solución. Pero me voy encontrando con otros problemas.
    en principio, por medio del método que explicas, al querer seleccionar (usando tu ejemplo) un país dentro de un determinado continente, solo me aparece la primer opción del rango definido.
    Ese es uno de los inconveniente, estimo que tendré otros ya que lo que quiero hacer se compone de varias funciones.
    Espero no importunerte y que puedas ayudarme.
    Dejo mi mail por si necesitas que te envíe el archivo.
    Saludos cordiales,
    Federico Sosa

    ResponderBorrar
  93. Hola Federico, como sepuede ver en el ejemplo (también podés descargar el archivo) aparecen todas las opciones según la elección anterior.
    Te sugiero que me envíes tu archivo (fijate en el enlace Ayuda, en la parte superior del blog) para que pueda ver cómo estás construyendo tus listas.

    ResponderBorrar
  94. QUISIERA DESCARGAR EL EJEMPLO DEL POST.
    ME SALE ERROR CUANDO QUIERO DESCARGARLO

    ResponderBorrar
    Respuestas
    1. Acabo de cambiar el link. Trata de descargar el archivo ahora.

      Borrar
  95. Buenas noches, hago todos los pasos y me funciona bien, el único problema es que no se porque solamente me muestras 2 y solo 2 registros en las listas desplegables, no entiendo y me está enloqueciendo, de hecho descargo el archivo de ejemplo y funciona igual, es alguna configuración de mi excel o que podría ser?

    ResponderBorrar
    Respuestas
    1. Asegurate que los rangos en los nombres esten definidos correctamente.

      Borrar

Nota: sólo los miembros de este blog pueden publicar comentarios.