Excel 2003, ¿Cómo aplicar formato condicional con más de 3 condiciones?

Necesito aplicar a unas celdas, que elijo mediante un InputBox, unos determinados formatos. Esto lo hago por medio de código, pero algo me falla que no consigo que se aplique las 4 condiciones que he puesto. Algo falla en este código, creo que pueden ser las fórmulas.

El código que quiero utilizar es el siguiente:

Sub formato()Dim celda As ObjectDim rng As Range'con INPUTBOX seleccionamos un rango de celdasSet rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)'recorremos cada celda del rango seleccionadoFor Each celda In rngvalor = celda.Value    'asignamos colores según el valor de la celda    If valor = "=RESIDUO(FILA(); 2) = 1" Then    celda.Interior.Color = 16774629    ElseIf valor = "=RESIDUO(FILA(); 2) = 0" Then    celda.Interior.Color = 16777215    ElseIf valor < 0 Then    celda.Interior.Color = 255    ElseIf valor > 0 Then    celda.Interior.Color = 32768    End IfNext celdaEnd Sub

1 respuesta

Respuesta
1

Me puedes explicar por qué pones esta fórmula en la comparación:

"=RESIDUO(FILA(); 2) = 1"

Lo que pasa que al poner esto:

If valor = "=RESIDUO(FILA(); 2) = 1"

Estás comparando valor, literalmente con esto:  "=RESIDUO(FILA(); 2) = 1"

Si en valor tienes esto:

valor = 2

Y comparas 

2 = "=RESIDUO(FILA(); 2) = 1"

Nunca van a ser iguales.

Si quieres aplicar la fórmula RESIDUO, primero tienes que aplicar la fórmula en la macro y el resultado de esa fórmula la comparas contra el valor.

Tal vez necesites esto:

Sub formato2()
'Por.Dante Amor
    Set rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)
    'recorremos cada celda del rango seleccionado
    For Each celda In rng
        valor = celda.Value
        'asignamos colores según el valor de la celda
        fila = celda.Row
        residuo = fila Mod 2
        If residuo = 1 Then
            celda.Interior.Color = 16774629
        ElseIf residuo = 0 Then
            celda.Interior.Color = 16777215
        ElseIf valor < 0 Then
            celda.Interior.Color = 255
        ElseIf valor > 0 Then
            celda.Interior.Color = 32768
        End If
    Next celda
End Sub

Pero si estás dividiendo el número de fila entre 2, si la fila es par, residuo es 0 y es impar el residuo es 1, siempre es 1 ó 0, no va a ser el caso menor a 0

O explícame con ejemplos cómo son tus condiciones.

Me parece que lo que buscas es lo siguiente:

Sub formato2()
'Por.Dante Amor
    Set rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)
    'recorremos cada celda del rango seleccionado
    For Each celda In rng
        valor = celda.Value
        'asignamos colores según el valor de la celda
        fila = celda.Row
        residuo = fila Mod 2
        If valor = 1 And residuo = 1 Then
            celda.Interior.Color = 16774629
        ElseIf valor = 0 And residuo = 0 Then
            celda.Interior.Color = 16777215
        ElseIf valor < 0 Then
            celda.Interior.Color = 255
        ElseIf valor > 0 Then
            celda.Interior.Color = 32768
        End If
    Next celda
End Sub

Saludos.Dante Amor

Si es lo que necesitas.

Lo que pretendo con la fórmula RESIDUO y FILA es que, independientemente del valor de la celda, las filas se coloreen alternamente (azul claro, blanco...). Posteriormente, las celdas que tengan un valor negativo, se coloreen en verde y las que tengan valores positivos, en rojo.

Muchas gracias,

Saludos

Probaste esta macro

Sub formato2()
'Por.Dante Amor
    Set rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)
    'recorremos cada celda del rango seleccionado
    For Each celda In rng
        valor = celda.Value
        'asignamos colores según el valor de la celda
        fila = celda.Row
        residuo = fila Mod 2
        If valor = 1 And residuo = 1 Then
            celda.Interior.Color = 16774629
        ElseIf valor = 0 And residuo = 0 Then
            celda.Interior.Color = 16777215
        ElseIf valor < 0 Then
            celda.Interior.Color = 255
        ElseIf valor > 0 Then
            celda.Interior.Color = 32768
        End If
    Next celda
End Sub

Ya la probé y mi me pone los 4 colores, verde, azul, blanco y rojo

La macro que amablemente me envías, no realiza lo que necesito; efectivamente, si seleccionas celdas  cuyo valor sea negativo, las colorea en rojo; si tienen valores positivos, en verde; si carecen de valor, en blanco; y, por último, si su valor es 1, en azul. Lo que requiero es lo que explique en mi post anterior, es decir:

1.- Sin tener en cuenta el valor de las celdas, el formato debe alternar fila si fila no, en fondo azul y blanco.

2.-Una vez conseguido esto, teniendo en cuenta el valor de las celdas seleccionadas, si son positivos, darles formato con fondo verde; y si son valores negativos, darles formato con fondo rojo.

Por esto te decía que aplicaba la fórmula RESIDUO Y FILA. Si tu realizas un seleccion de filas, directamente en una hoja, y  en formato condicional, como primera condición le aplicas la fórmula RESIDUO(FILA();2)=1 (Ejemp. formato fondo azul); y, como segunda condición, la fórmula RESIDUO(FILA();2)=0 (formato fondo blanco), verás que te colorea fila azul, fila blanca, fila azul, fila blanca; y así sucesivamente. cosa que no hace la macro facilitada. Espero haberme explicado mejor.

Muchas gracias.

Saludos

El primer punto lo entiendo perfectamente, quieres poner una fila azul y otra en blanco.

Eso lo consigues con esta macro:

Sub formato2()
'Por.Dante Amor
    Set Rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)
    'recorremos cada celda del rango seleccionado
    For Each celda In Rng
        valor = celda.Value
        'asignamos colores según el valor de la celda
        fila = celda.Row
        residuo = fila Mod 2
        If residuo = 1 Then
            celda.Interior.Color = 16774629
        Else
            celda.Interior.Color = 16777215
        End If
        'ElseIf valor < 0 Then
        '    celda.Interior.Color = 255
        'ElseIf valor > 0 Then
        '    celda.Interior.Color = 32768
        'End If
    Next celda
End Sub

Lo que ya no entiendo, es el segundo punto, ya que si la celda tiene valores (positivos o negativos) el primer formato de celda se quitará, quedando solamente el formato verde o rojo. Si eso es lo que quieres, entonces la macro es esta:

Sub formato2()
'Por.Dante Amor
    Set Rng = Application.InputBox("en que rango quieres aplicar el formato??", Type:=8)
    'recorremos cada celda del rango seleccionado
    For Each celda In Rng
        valor = celda.Value
        'asignamos colores según el valor de la celda
        fila = celda.Row
        residuo = fila Mod 2
        If residuo = 1 Then
            celda.Interior.Color = 16774629
        Else
            celda.Interior.Color = 16777215
        End If
        '
        If valor < 0 Then
            celda.Interior.Color = 255
        ElseIf valor > 0 Then
            celda.Interior.Color = 32768
        End If
    Next celda
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas