Descripción de cómo emplear como prueba lógica el color de fondo de una celda, apoyados en una función desarrollada por el MVP de Excel Chip Pearson.
Hola! ¿Cómo han estado?
Recientemente uno de nuestros usuarios nos hizo una interesante pregunta, en la cual manifestó lo siguiente: "¿Es posible poner un color de fondo como prueba lógica dentro de la función SI de Ms Excel®?"
La respuesta es sí, existen varios métodos con los que podemos construir la función a partir de esa premisa sin embargo esta vez vamos a emplear una función desarrollada por el MVP de MS Excel® Chip Pearson en su blog www.cpearson.com la cual nos va a permitir elaborar una función que identifica el color de fondo de una celda para elaborar con ella luego fórmula que emplee la función SI para aplicar una prueba lógica al color de fondo. Es necesario aplicar esta técnica dado que MS Excel® por defecto no trae una función que permita identificar el color de fondo de una celda, debemos construirla a través de Visual Basic.
Como todo lo demás que existe en el mundo de la computación los colores son realmente un números. Todos los colores que se muestran en la pantalla de la computadora se encuentran definidos a partir de combinaciones de tres componentes primarios: uno rojo, uno verde y uno azul. Esto es lo que se conoce como código RGB. Visual Basic para Aplicaciones dispone de una función RGB que podemos emplear para combinar valores de rojo, verde y azul para crear un valor de RGB en particular y en consecuencia un color en específico. Chip Pearson precisamente aprovechó este particular para desarrollar un set de funciones de gran utilidad que emplean como argumento el color de fondo de una celda o de un rango de estas.
Lo primero que debemos realizar para conocer cual es nuestra paleta de colores predeterminada es aplicar un simple código para que la misma se muestre en una hoja de cálculo. La paleta de colores consta de 56 colores RGB que MS Excel® soporta para su uso por ejemplo en los fondos de celdas y colores de fuentes. El valor de estos 56 colores puede ser cualuiera de entre los 16 millones de colores disponibles pero en la práctica en MS Excel® solo podemos emplear 56 colores al mismo tiempo.
El código a aplicar para conocer nuestra paleta de colores es el siguiente:
Cell: es la celda cuyo color se debe leer.
OfText: son los argumentos lógicos Verdadero o Falso que indican si se devuelve el índice de color de la fuente (OfText = Verdadero) o el fondo (OfText = Falso).
DefaultColorIndex: El parámetro DefaultColorIndex es un valor de índice de color (1 a 56) que va a ser devuelto si no hay color específico donde se ha asignado a la fuente o el fondo del relleno.
La función ColorIndexOfOneCell ofrece una utilidad limitada ya que solo hace referencia a una celda en particular para otros casos también Chip Pearson desarrollo funciones adicionales con diferentes características que gustosamente pueden ver en su publicación “Color Functions In Excel”.
Ahora vamos a probar que la función ColorIndexOfOneCell esté trabajando sin presentar ningún inconveniente, los resultados iníciales los vemos mediante la siguiente imagen:
En efecto tal como vemos está funcionando correctamente ya que el color amarillo está ubicado en la celda A6 por lo que el valor asociado a este es 6, ahora podemos trabajarla en conjunto con la función SI.
Tras haber realizado estos pasos ahora vamos a utilizar la función ColorIndexOfOneCell como prueba lógica de la función SI (como recomendación previamente se debe tener identificado cual es el valor asociado al color de la celda).
En el siguiente ejemplo tenemos una tabla con los resultados de las calificaciones de un grupo de estudiantes con la condición de que para aprobar la materia la nota debe ser superior a 10 puntos sino la celda se va a colorear de rojo, para esto con anterioridad se seleccionaron las celdas donde están las calificaciones y se aplico Formato Condicional con la Regla “Es menor que” colocando que si el valor es menor a 10 puntos el fondo pasa a ser rojo.
Pues solo nos queda aplicar la función SI colocando como prueba lógica la función ColorIndexOfOneCell que nos va a arrojar el valor 3 correspondiente al color rojo y si lo asociamos con el resto de los argumentos (valor_si_verdadero) las notas que son inferiores a 10 puntos el mensaje que se va reflejar es “Reprobó”, (valor_si_falso) si son mayores el mensaje es “Aprobó”.
El resultado de esta operación es como lo mostrado en la siguiente imagen anexa:
Para obtener este resultado previamente se deben hacer algunas modificaciones que usualmente no realizamos sin embargo de acuerdo a nuestras necesidades nos ofrece una excelente alternativa a una carencia de MS Excel®.
Les dejamos un archivo MS Excel® 2007 habilitado para macros con los pasos citados y el ejemplo propuesto en esta publicación.
¿Tienen algún otro uso que se le pueda dar a esta interesante función? Pues les recordamos que está disponible nuestro foro para responder a sus dudas y debatir sus propuestas.
Espero la publicación les sea de mucha utilidad.
Saludos y éxito!
El Equipo de EXCELLENTIAS.COM
Fuente: Color Functions In Excel de Chip Pearson, Pearson Software Consulting, LLC.
Sub Displaypalette()
Dim N As Long
For N = 1 To 56
Cells(N, 1).Interior.ColorIndex = N
Next N
End Sub
Este código cambia el color de fondo de las primeras 56 celdas de la hoja activa donde lo ejecutemos. El número de fila será igual a un número que llamaremos índice de colores, que no es más en que la posición se encuentra un color de los que serán desplegados de la fila 1 a la 56.
Para aquellos que dan sus primeros pasos en VBA recuerden que para poder ejecutar este código tan solo es necesario insertar un modulo nuevo en Microsoft Visual Basic en donde vamos a cargar todos los códigos con los que vamos a trabajar en esta publicación.
Una vez cargado este código lo ejecutamos desde el panel de Microsoft Visual Basic o bien desde la Cinta de Opciones en la ficha Programador/ Macros y con esto las primeras 56 celdas van a tener los primeros 56 colores de los 16 millones de colores disponibles.
Después de haberse ejecutado la macro el resultado es tal cual lo mostrado en la imagen anexa:
Esta paleta de colores nos va a servir mediante la función de color (ColorIndexOfOneCell) para determinar un valor asociado que a su vez nos va a permitir crear la prueba lógica con la función SI.
A continuación, para alcanzar nuestro objetivo inicial vamos a cargar el siguiente código de Visual Basic que nos permitirá crear una nueva función ColorIndexOfOneCell la cual partiendo de simples argumentos identifica cual es el color de fondo de una celda para arrojarnos como resultado cual es el valor de índice de color (1 al 56) del fondo de esta:
Esta función está compuesta por los siguientes argumentos: =ColorIndexOfOneCell(Cell; OfText; DefaultColorIndex)Function ColorIndexOfOneCell(Cell As Range, OfText As Boolean, _ DefaultColorIndex As Long) As Long ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ColorIndexOfOneCell ' This returns the ColorIndex of the cell referenced by Cell. ' If Cell refers to more than one cell, only Cell(1,1) is ' tested. If OfText True, the ColorIndex of the Font property is ' returned. If OfText is False, the ColorIndex of the Interior ' property is returned. If DefaultColorIndex is >= 0, this ' value is returned if the ColorIndex is either xlColorIndexNone ' or xlColorIndexAutomatic. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim CI As Long Application.Volatile True If OfText = True Then CI = Cell(1, 1).Font.ColorIndex Else CI = Cell(1, 1).Interior.ColorIndex End If If CI < 0 Then If IsValidColorIndex(ColorIndex:=DefaultColorIndex) = True Then CI = DefaultColorIndex Else CI = -1 End If End If ColorIndexOfOneCell = CI End FunctionPrivate Function IsValidColorIndex(ColorIndex As Long) As Boolean Select Case ColorIndex Case 1 To 56 IsValidColorIndex = True Case xlColorIndexAutomatic, xlColorIndexNone IsValidColorIndex = True Case Else IsValidColorIndex = False End Select End Function
Cell: es la celda cuyo color se debe leer.
OfText: son los argumentos lógicos Verdadero o Falso que indican si se devuelve el índice de color de la fuente (OfText = Verdadero) o el fondo (OfText = Falso).
DefaultColorIndex: El parámetro DefaultColorIndex es un valor de índice de color (1 a 56) que va a ser devuelto si no hay color específico donde se ha asignado a la fuente o el fondo del relleno.
La función ColorIndexOfOneCell ofrece una utilidad limitada ya que solo hace referencia a una celda en particular para otros casos también Chip Pearson desarrollo funciones adicionales con diferentes características que gustosamente pueden ver en su publicación “Color Functions In Excel”.
Ahora vamos a probar que la función ColorIndexOfOneCell esté trabajando sin presentar ningún inconveniente, los resultados iníciales los vemos mediante la siguiente imagen:
En efecto tal como vemos está funcionando correctamente ya que el color amarillo está ubicado en la celda A6 por lo que el valor asociado a este es 6, ahora podemos trabajarla en conjunto con la función SI.
Tras haber realizado estos pasos ahora vamos a utilizar la función ColorIndexOfOneCell como prueba lógica de la función SI (como recomendación previamente se debe tener identificado cual es el valor asociado al color de la celda).
En el siguiente ejemplo tenemos una tabla con los resultados de las calificaciones de un grupo de estudiantes con la condición de que para aprobar la materia la nota debe ser superior a 10 puntos sino la celda se va a colorear de rojo, para esto con anterioridad se seleccionaron las celdas donde están las calificaciones y se aplico Formato Condicional con la Regla “Es menor que” colocando que si el valor es menor a 10 puntos el fondo pasa a ser rojo.
Pues solo nos queda aplicar la función SI colocando como prueba lógica la función ColorIndexOfOneCell que nos va a arrojar el valor 3 correspondiente al color rojo y si lo asociamos con el resto de los argumentos (valor_si_verdadero) las notas que son inferiores a 10 puntos el mensaje que se va reflejar es “Reprobó”, (valor_si_falso) si son mayores el mensaje es “Aprobó”.
El resultado de esta operación es como lo mostrado en la siguiente imagen anexa:
Para obtener este resultado previamente se deben hacer algunas modificaciones que usualmente no realizamos sin embargo de acuerdo a nuestras necesidades nos ofrece una excelente alternativa a una carencia de MS Excel®.
Les dejamos un archivo MS Excel® 2007 habilitado para macros con los pasos citados y el ejemplo propuesto en esta publicación.
¿Tienen algún otro uso que se le pueda dar a esta interesante función? Pues les recordamos que está disponible nuestro foro para responder a sus dudas y debatir sus propuestas.
Espero la publicación les sea de mucha utilidad.
Saludos y éxito!
El Equipo de EXCELLENTIAS.COM
Fuente: Color Functions In Excel de Chip Pearson, Pearson Software Consulting, LLC.


















Que bueno y que útil ésta explicación. Sin embargo, necesito que en vez de color de fondo, pueda usar la función SI para el color de la fuente, para identificar los festivos en de un calendario. (En la ficha DATOS -> DESDE WEB, vinculé los calendarios desde 2.010 hasta 2.020 y necesito, que a partir del color rojo de los Domingos y festivos, pueda realizar: =SI(A1=COLOR_ROJO;"FESTIVO";NORMAL) y luego usaría la función =CONCATENAR(A1;"-";CELDA)
Agradezco de antemanos su valiosa ayuda.
Hola Felipe, bienvenido al equipo.
Puedes emplear la función "ColorIndexOfOneCell", detallada en este artículo, para detectar el color de la fuente empleada en una celda. Si bien no detallamos más este particular en el artículo es perfectamente factible con tan solo cambiar uno de los argumentos. En nuestro ejemplo original el segundo argumento que empleamos lo establecimos en FALSO; para lo que deseas tan solo es necesario cambiar este argumento a VERDADERO. Te dejo anexo un ejemplo de su aplicación para que lo descargues y puedas verificar en detalle como emplearla:
http://excellentias.com/wp-content/uploads/2010/1…
Espero que te sea de máxima utilidad,
Saludos y éxito,
Pues lo he probado y funciona de maravilla. Me ahorraré un tiempo valioso. Quedo muy agradecido por el interés y la rapidez en la respuesta. Un cálido saludo desde Colombia !
Gracias a ti por tu consulta, como siempre estamos a tu servicio.
Hola dcedeno;
Tengo una consulta al hacer tu ejercicio los valores todos me quedan en aprobado y no me cambia el color de el texto, quisiera saber como hago para cambiar el color de fondo si el valor es aprobado o reprobado…Gracias
Hola Patricia ¿Cómo estás?
Empleando la función ColorIndexOfOneCell como prueba lógica de la función SI obtenemos un valor que esta asociado al valor que coincide con el argumento Cell en este caso es 3 que corresponde al color rojo, el resto son los argumentos de acuerdo al resultado de la prueba logica, si es verdadero “Reprobò” y si es falso “Aprobó”. Aplicando adicionalmente formato condicional sobre los resultados de la formula configuramos para que cuando de como resultado “Aprobó” se refleje el resultado en letras verdes y para cuando el resultado sea “Reprobó” el fondo se refleje en rojo.
Anexamos archivo con la solución propuesta a tu consulta:
http://excellentias.com/wp-content/uploads/2010/12/Funct_Col_Index_Text_Color.zip
Esperamos te sea de mucha utilidad, cualquier detalle adicional no dudes en contactarnos.
Saludos,
Es una aportación interesante y es aprendizaje, creo que quiza el caso de Felipe me parece más práctico, para el anterior, creo que se puede utilizar algo más simple, unicamente con “si” por ejemplo, en la 1er celda: =SI(E3>=10,”Aprobó”,”Reprobó”)
el resultado es el mismo…
En lo personal estoy de acuerdo con lo que se dice casi al final:
“¿Tienen algún otro uso que se le pueda dar a esta interesante función? Pues les recordamos que está disponible nuestro foro para responder a sus dudas y debatir sus propuestas.”
Gracias
Estoy de acuerdo, hay soluciones mucho mas sencillas partiendo de emplear pruebas lógicas simples. Este en realidad es un ejemplo de todo lo que podemos hacer con Excel cuando empleamos VBA. ¡Las posibilidades son infinitas o al menos el límite lo pone la imaginación!
Hola! gracias por tus valiosas aportaciones!
Tengo una duda, se puede hacer que por ejemplo si el valor de tal celda es 45, otra celda se ponga gris? y si el valor es por ejemplo 60, ahora otra celda sea la que se ponga gris? Ojala me de a explicar y me puedan ayudar.
Hola Ilse, en efecto es posible hacerlo, y es muy sencillo aplicarlo. Supongamos que quiero hacer que la celda B2 de mi hoja de cálculo cambie de color a gris si el valor de la celda A2 es 45. Para ello solo debemos aplicar un formato condicional a la celda B2. En Excel 2007 nos posamos sobre la celda B2 y en la ficha Inicio ubicamos el apartado Estilos donde encontrarás el botón Formato condicional. Le damos clic y seleccionamos entre las opciones disponibles Resaltar reglas de celdas > Es igual a…
En el cuadro de diálogo es Igual a aplicamos la fórmula: =SI(A245;VERDADERO;FALSO) .
Ahora antes de salir de este cuadro de diálogo en la lista desplegable que nos aparece en este mismo cuadro procedemos a definir el formato seleccionando la opción Formato personalizado. Se desplegará un nuevo cuadro de diálogo llamado Formato de celdas en donde en la ficha relleno podrás definir fácilmente el color de fondo que quieres se aplique a la celda B2 cuando el valor de A2 sea 45, en nuestro ejemplo gris.
Para finalizar haces clic en Aceptar y nuevamente en Aceptar y listo…
Espero que te haya resultado de utilidad. No dudes en avisarme si necesitas cualquier apoyo adicional al respecto. Un abrazo y mucho éxito en todos tus proyectos.