Saltar al contenido

Aporte al foro: Lista desplegable inteligente - parte 3.


YoelMonsalve

Recommended Posts

publicado

 

Hola amigos del foro, estuve ausente un tiempo por asuntos de trabajao pero vuelvo para retomar un tema anterior del que prometí una tercera parte (y siempre debemos tratar de cumplir la palabra prometida jeje).

En aquélla ocasión explicaba cómo podemos, a partir de métodos "básicos", emular la función de la característica Validación de Datos de Excel, es decir, una lista desplegable que nos permite escoger dentro de un conjunto limitado de valores para una celda. El ejercicio es en realidad más que todo pedagógico porque si observamos bien el asunto, podríamos operar con macros para establecer el origen de la validación y así lograr un efecto similar, ... pero en fin ya estamos muy adelantados para retroceder.

En esta ocasión lo que queremos es rellenar fácilmente una tabla de competición cruzada de equipos. Los nombres de los equipos se dan en la Hoja1, agrupados en dos Divisiones o Ligas. En la segunda hoja queremos armar la tabla de juegos. Pero, y no sabría decir si en mi interés pedagógico (o en mi mala fe para complicar las cosas ... jeje), en cada partido sucede que ambos, tanto el equipo Casa como el Visitante podrían provenir de la División A o la B. Entonces, el rango de datos de la Lista Desplegable NO es fijo, sino que cambia entre las dos Ligas, según los OptionButtons situados en la parte de arriba de la hoja de Partidos.

Por lo que obligatoriamente debemos usar una macro para dinámicamente modificar el origen de datos del DropDown, según querramos elegir de la DivA o la DivB. Por lo cual modificamos ligeramente el método LOAD_Lst explicado en la parte 2 del tema (para poder pasar como segundo argumento el rango de datos a cargar) y creamos dos variantes, LOAD_DivA(), LOAD_DivB() para ser invocadas por los OptionButtons.

' Rellena el objeto Dropdown con los valores encontrados en la columna A
' de Hoja1.
Sub LOAD_Lst(Lst As DropDown, Header As Range)
	    Dim SheetName As String
    Dim S2 As Worksheet
    Dim i As Long, _
        N As Long
    
    ' Nombre de la hoja donde buscar los datos. Puede cambiarlo si es
    ' necesario.
    SheetName = "Equipos"
    Set S2 = Sheets(SheetName)
    
    ' calculando el número de elementos a cargar
    If Header.Offset(1, 0) = "" Then
        N = 0
    Else
        If Header.Offset(2, 0) = "" Then
            N = 1
        Else
            N = Header.End(xlDown).Row - 1
        End If
    End If
    If N = 0 Then Exit Sub      ' sale, si no hay elementos
    
    ' y rellena la lista
    Lst.RemoveAllItems
    For i = 1 To N
        Lst.AddItem Header.Offset(i, 0)
    Next
	End Sub
	' Cargar el DropDown con los equipos de la División A
Sub LOAD_DivA()
	    Dim mylst As DropDown
	    SET_Lst mylst
    If mylst Is Nothing Then Exit Sub
    LOAD_Lst mylst, Sheets("Equipos").[A1]
	End Sub
	' Cargar el DropDown con los equipos de la División B
Sub LOAD_DivB()
	    Dim mylst As DropDown
	    SET_Lst mylst
    If mylst Is Nothing Then Exit Sub
    LOAD_Lst mylst, Sheets("Equipos").[C1]
End Sub

Así que para llenar la tabla, por ejemplo en Partido 1, supongamos que juega el equipo Casa de la DivA vs. el equipo Visitante de la DivB. Entonces nos situamos en la celda C3 y marcamos el OptionButton "DivA", luego la lista muestra sólo los equipos de la División A y escogemos el equipo. Luego vamos a la celda D3 y marcamos el OptionButton "DivB", para elegir un equipo de la División B.

Y así repetimos todo el proceso, en el ejemplo dado para el segundo partido invertí la situación, poniendo el equipo Casa de la DivB vs. el equipo Visitante de la DivA, y así sucesivamente.

Te adjunto el archivo Excel para que lo pruebes y ¡no olvides! si te gustó este tema, recompénsame con un "me gusta".

================================================================================================

P.D.-  Viendo ahora el tema estoy pensando en crear una parte 4 - implementación de este mismo control usando Clases.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    5    1

  • Crear macros Excel

  • Mensajes

    • Buenas tardes, necesito filtrar las filas que contienen determinada palabra (H2), tanto las que las que la contienen en la columna 'Condición A' como las que la contienen en la columna 'Condición B' Si lo hago de forma independiente me funciona el filtrado, pero si quiero que revise en las dos columnas... no lo consigo. ¿Me pueden ayudar? Consulta.xlsx
    • Hola, El texto citado no lo termine de entender, la celda adyacente a Z27 se relaciona con la fila A28 de la hoja VTL1 y el resultado 35 de su ejemplo, se obtiene de la fila 8, así que para hacer algo sin complicaciones use la columna BM para devolver ese valor. Aprovechando los parámetros de discriminación que uso usted para pintar las celdas de la fila, podría usar esos mismos en una fila auxiliar y así obtener un valor que podría usar como criterio en alguna función, sin tener que meterse al terreno de los colores del condicional, porque no son los mismos que los de la paleta de colores en cuestiones de código. ¿Entonces una solución con macros no es de su interés? Si cambia de opinión podría colocar el tema en esa sección, querer formular con los colores del formato condicional tiene sus características específicas, sin mencionar que se actualice "sola". Aunque bueno, todavía es posible que algún maestro o usuario avanzado le pase una solución con alguna función personalizada al ver que usted tiene 365. Si le interesa una idea sencilla podría usar un rango en la fila 5: =SI.ERROR(COINCIDIR(K7,CALCULOS!$B$4:$B$35,0),SI(O(DIASEM(K7)=7,DIASEM(K7)=1),1,0)) Eso le daría la opción de usar: =SUMAR.SI($K$5:$AY$5,">=1",K8:AY8) Saludines
    • Estimados amigos espero estén bien   Tengo este archivo que me ayuda a llevar las horas trabajadas al que necesito añadir en la Hoja5 (HHE) una fórmula que me cuente las Horas trabajadas en Días de Descanso (fines de semana y feriados), actualmente mediante una Regla de Formato Condicional se resaltan en amarillo el Dia de Semana y la Fecha de los Días de Descanso sin embargo el inconveniente se me presenta con los días feriados que cambian de posición de acuerdo a la fecha y cuando el mes comienza en día domingo por lo cual necesito una fórmula que me permita sumar los Días de Descanso cuando la Fecha que le corresponda este resaltada en Amarillo la sintaxis sería más o menos esta para la primera semana del mes de Enero de 2025: =SI('VTL1'!$I$7=AMARILLO;'VTL1'!$I8;0) + SI('VTL1'!$J$7=AMARILLO;'VTL1'!$J8;0) + SI('VTL1'!$K$7=AMARILLO;'VTL1'!$K8;0) + SI('VTL1'!$L$7=AMARILLO;'VTL1'!$L8;0) + SI('VTL1'!$M$7=AMARILLO;'VTL1'!$M8;0) + SI('VTL1'!$N$7=AMARILLO;'VTL1'!$N8;0) + SI('VTL1'!$O$7=AMARILLO;'VTL1'!$O8;0) Y así sucesivamente para el resto de las semanas, con los datos actuales el resultado esperado para la primera semana (I8:O8) sería 9 horas mientras que para el mes (Fila8) el resultado esperado seria 35 horas estos resultados deben reflejarse en la Celda “$Z7” de la Hoja5 (HHE) de modo tal que una vez haya completado la totalidad de la fórmula para el resto de las semanas del mes la pueda correr de Z27 hasta Z42 VTL - HHE_101128.xlsx
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.