Formato condicional

Hola:
Necesito darle color al fondo de las celdas dependiendo de un resultado dado por una función, se que se hace con formato condicional, el problema es que solo se pueden utilizar 3 condiciones y yo tengo que hacer 5 cambios de fondos, o sea, necesito 5 condiciones. ¿Existe alguna forma de agregar más condiciones?
¿Se puede hacer esto de otra forma, sin utilizar el formato condicional?
Espero tu respuesta, saludos y gracias.

1 respuesta

Respuesta
1
Es cierto.
Si tienes más de tres condiciones o colores por asignar, Formato Condicional deja de ser útil.
La solución pasa por un código de Visual Basic que evalúe las celdas y según la condición "pinte" su interior de acuerdo a un determinado color.
Claro que dependerá mucho de qué condiciones deberá evaluar para ver si conviene usar una sucesión de condicionales o un "select case".
Finalmente para evitar que tengas que acordarte de ejecutarlo, puedes asociar tal macro al evento "Change" en tal hoja.
Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y busca la hoja donde quieres que esto ocurra (donde harás la carga de datos). Da doble click sobre ella.
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Set Relcell = Union(Range("B4"), Range("C6:C40"), Range("G8"))
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
Application.EnableEvents= False
Select Case Target.Value
Case 1 To 10
Target.Interior.ColorIndex = 6
Case 11 To 20
Target.Interior.ColorIndex = 4
Case 21 To 30
Target.Interior.ColorIndex = 16
Case 31 To 40
Target.Interior.ColorIndex = 8
Case 41 To 50
Target.Interior.ColorIndex = 22
Case Else
Target.Interior.ColorIndex = xlNone
End Select
Application.EnableEvents= True
End If
End Sub
---
La variable RelCell guarda los rangos o celdas, sobre los cuales deberá aplicarse el formato condicional definido con esta macro.
Es decir, esta macro se dispara automáticamente cada vez que algo cambia en la hoja donde está colocada, si el cambio se produjo en alguna de las celdas mencionadas en la variable "Relcell", cambiará el color de la celda según el tramo donde se encuentre el valor de la celda que cambió.
aclarando qué entendí mal o qué faltó.
Hola Fernando:
Ya intente hacer lo que me sugeriste, pero me marca error en la siguiente línea:
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing
Eso puede ser porque los resultados a los que les tengo que dar color son cadenas de letras por ejemplo: "azul", lo que yo quiero es que si la celda dice "azul" se pinte de azul, lo mismo con los otros colores, como verde, blanco, rojo, amarillo y naranja. El rango de las celdas va de (u16:u1035). ¿Cómo lo hago?
Muchas gracias por tu ayuda. Espero tu respuesta, gracias.
Como no mencionaste cuales eran las condiciones, rangos y comportamiento, la macro provista era a modo de ejemplo y debías reemplazar los datos por los tuyos propios.
De allí que tuviera un error en la ejecución.
El código modificado para tu caso es el siguiente:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Set Relcell = Range("u16:u1035")
If Not Application.Intersect(Relcell, Range(Target.Address(False, False))) Is Nothing Then
Application.EnableEvents = False
Select Case UCase(Trim(Target.Value))
Case "AZUL"
Target.Interior.ColorIndex = 5
Case "VERDE"
Target.Interior.ColorIndex = 4
Case "BLANCO"
Target.Interior.ColorIndex = 2
Case "ROJO"
Target.Interior.ColorIndex = 3
Case "AMARILLO"
Target.Interior.ColorIndex = 6
Case "NARANJA"
Target.Interior.ColorIndex = 45
Case Else
Target.Interior.ColorIndex = xlNone
End Select
Application.EnableEvents = True
End If
End Sub
Según lo que se escriba en las celdas cambiará el color interior, siempre que esté en el dentro del rango definido y que el nombre del color esté incluido entre los casos contemplados por la macro.
---
En caso de que quisieras cambiar o agregar otro color, la siguiente macro auxiliar te indica el número de color que tenga la celda activa.
Sub MensColor()
MsgBox ActiveCell.Interior.ColorIndex
End Sub
Así, si quisieras agregar "NEGRO", pinta una celda cualquiera de ese color y -sobre ella- ejecuta MensColor y te mostrará un mensaje con el número correspondiente (1). Luego podrás usar este código en la macro para que si alguien escribe "negro" la celda se pinte de ese color.
Me parece que esto es lo que buscabas...
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas