Extender condición celdas en un rango variable

Tengo una hoja con unas condiciones en una de las celdas, y con una macro quiero que al ejecutarla, se copie las conficiones de la celda F2 al resto de celdas de la columna, pero no hasta el final si no hasta la ultima celda con datos.

Tengo este código y funciona, pero me aplica con la condición de la celda F2, es decir Si f2 es menor que E2 ponte rojo, y en la siguiente fila quería que si F3 es menor que E3 ponte rojo, o si es mayor ponte verde,

Adjunto el código

Sub Condicionar() Range("F2").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2=$E$2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2<$E$2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2>$E$2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=ESBLANCO($F$2)" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlNone .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.AutoFill Destination:=Range("F2: F" & Range("E" & Rows.Count) _ .End(xlUp) _ .Row)

1 Respuesta

Respuesta
2

Puedes poner otra vez la macro, pero utiliza el icono para insertar código:

¡Gracias! 

Sub Condicionar() Range("F2").Select Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2=$E$2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2<$E$2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2>$E$2" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .Color = 5296274 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=ESBLANCO($F$2)" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .Pattern = xlNone .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False Selection.AutoFill Destination:=Range("F2: F" & Range("E" & Rows.Count) _ .End(xlUp) _ .Row)

Ya está 

Algo pasó con el código, está en una sola línea y no se puede ver claramente.

Puedes pegar primero tu código en un word, después la copias del word y la pegas aquí, nuevamente utilizando el icono para insertar código.

Buenas

No se que habrá pasado, ya esta bien pegado, quizás que lo hice con el móvil no se.

Un saludo

Sub Condicionar()
    Range("F2").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2=$E$2"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5296274
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2<$E$2"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$F$2>$E$2"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5296274
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=ESBLANCO($F$2)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .Pattern = xlNone
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.AutoFill Destination:=Range("F2: F" & Range("E" & Rows.Count) _
    .End(xlUp) _
    .Row)
    End Sub

Eh estado dándole vueltas y quizás con un bucle for each hasta la ultima fila, que habría que definir una variable que almacene cual es la ultima celda con datos, que le indique a la macro que en cada celda cambiase la fórmula de

Formula1:="=$F$2=$E$2"

Formula1:="=$F$2+1=$E$2+1"

quizás funcionaria

Podría simplificarse de esa manera:

Sub Condicionar()
  Range("F2").Select
  With Range("F2:F" & ActiveSheet.Range("E:F").Find("*", , xlValues, , xlByRows, xlPrevious).Row)
    .FormatConditions.Delete
    '
    .FormatConditions.Add Type:=xlExpression, Formula1:="=F2="""""
    .FormatConditions(1).Interior.Color = xlNone
    .FormatConditions(1).StopIfTrue = True
    '
    .FormatConditions.Add Type:=xlExpression, Formula1:="=F2>=E2"
    .FormatConditions(2).Interior.Color = 5296274
    .FormatConditions(2).StopIfTrue = False
    '
    .FormatConditions.Add Type:=xlExpression, Formula1:="=F2<E2"
    .FormatConditions(3).Interior.Color = 255
    .FormatConditions(3).StopIfTrue = False
  End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas