¿Cómo podría hacer en excel, con una macro o visula basic, para simular el relleno de las fechas de un diagrama de gantt?

Tratando de simular un diagrama de gantt, en las columnas tengo, como encabezado, distintas fechas (1-1, 2-1,3-1,4-1...) y en las filas diferentes tareas (diseño inicial, revisión...) con diferentes fechas de inicio y fin (diseño inicial; inicio: 1-1; final: 3-1). Con estos datos me gustaría que se sombreasen automáticamente las celdas comprendidas entre ambas fechas, en la fila de la tarea específica.

A continuación muestro lo que sería el resultado final.

Respuesta
2

Podés utilizar Formato Condicional con fórmulas.

Para tu ejemplo, seleccioné el rango desde F4 hasta el último día. Desde menú Formato Condicional, Nueva regla y opté por 'Utilizar una fórmula'.

La fórmula es: =Y(F$3>=$C4;F$3<=$D4)

Es importante respetar los signos $ así podrás 'copiar formato' de esta fila en las siguientes.

Si todo quedó claro y resuelto no olvides valorar la respuesta para darla por cerrada... sino comenta y la seguimos tratando.

Mediante condicionales ya probé y, si bien es cierto que logro conseguir el resultado, al aplicar la fórmula a filas y columnas me veo obligado a cambiarlas manualmente. De ahí que busque la opción de hacerlo mediante código.

Escribiendo la única fórmula con los signos $ tal como te lo dejé no hay necesidad de cambiar nada, solo es necesario extenderla a medida que agregas filas.

Te desarrollaré la macro. Solo confirma si el modelo es tal como la muestra como para no estar luego modificándola.

Sdos!

Te dejo la macro con los rangos establecidos en variables para que puedas ajustar a tu criterio.

Sub gantt()
'x Elsamatilde
'rellena de color las celdas que coincidan en rango de fechas col C:D
'establece límites:
fini = 4: cini = 6   '1er fila y col
'ultima fila de tareas
ffin = Range("B" & Rows.Count).End(xlUp).Row
'ultima fila de fechas
cfin = Range("IV3").End(xlToLeft).Column
'se recorre las celdas del rango y se realizan las comparaciones
For i = fini To ffin
    For x = cini To cfin
        'si corresponde al rango de fechas se pinta sino se limpia
        If Cells(3, x) >= Range("C" & i) And Cells(3, x) <= Range("D" & i) Then
            Cells(i, x).Interior.Color = RGB(153, 204, 253)
        Else
            Cells(i, x).Interior.ColorIndex = xlNone
        End If
    Next x
Next i
MsgBox "Fin del proceso."
End Sub

Considero la fila de fechas como 3 según tu imagen. 

Si todo quedó claro y resuelto no olvides valorar la respuesta para darla por cerrada.

Muchísimas gracias. Era lo que estaba buscando. 

Te recuerdo que debes valorar la respuesta (Buena o Excelente) para que se de por finalizada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas