Como sabes, las celdas de Excel pueden tener un color de fondo y generalmente elegimos un color para diferenciar las celdas ya sea porque han alcanzado algún valor máximo, porque la fecha está próxima, etc. Pero ¿es posible evaluar el color de fondo de una celda?
La función SI para evaluar el color
De manera intuitiva elegiría la función SI para pedirle que verifique el color de una celda, de manera que si tiene un color rojo de fondo, entonces me devuelva el valor “Crítico”. Sería una fórmula como la siguiente:
=SI(ColorFondoIgual(A1, "Rojo"), "Crítico")
En Excel no existe una función que nos devuelva el color de fondo de una celda, el nombre ColorFondoIgual lo he inventado en este momento, pero podemos recurrir a VBA para construir dicha función de manera que obtengamos el resultado deseado. En el resto de este artículo nos dedicaremos al desarrollo de una función que nos permita evaluar el color de fondo de una celda y te sorprenderás de lo sencillo que será.
Los colores en Excel
Antes de continuar con la creación del código de nuestra macro necesito clarificar un poco sobre los colores en Excel. Si alguna vez has estudiado sobre teoría de colores sabrás que cualquier color es una composición de los tres colores primarios: rojo, verde y azul.
En las pantallas de los ordenadores cada píxel tiene una mezcla de estos colores y por lo tanto puede ser descrito con un código RGB (Red, Green, Blue) en donde cada valor puede ser un número entre 0 y 255.
Hagamos una prueba para dejar más claro este tema. En la ficha Inicio haz clic en el botón Color de relleno y selecciona la opción Más colores.
Una vez que se muestre el cuadro de diálogo Colores selecciona Personalizado. Observarás que hay una paleta de colores y que el Modelo de color se encuentra seleccionado como RGB y justamente debajo encontrarás la combinación de color Rojo, Verde y Azul del color actualmente seleccionado.
Si seleccionas un color diferente de la paleta de colores observarás que los valores para Rojo, Verde y Azul cambian su valor.
Para este ejemplo, el color verde que he seleccionado puede ser descrito por el código RGB (69, 199, 103).
Es importante que sepas que si ya tienes una celda con un color de fondo definido y abres esta misma sección Personalizado podrás ver los valores RGB para el color de la celda seleccionada. Recuerda este consejo porque es la manera en cómo puedes conocer fácilmente el código RGB del color de fondo de una celda.
La función RGB en VBA
Ahora que tenemos más claro el tema de los colores y de su código RGB debes saber que existe una función en VBA llamada RGB. Esta función recibe como argumentos los valores de color rojo, verde y azul y nos devuelve un número entero asignado a dicho color en Excel.
RGB(69, 199, 103)
Como ya lo dije previamente, cada color tiene asignado un código RGB, pero también tiene asignado un número entero único, entre 0 y 16777215 que es la cantidad de colores soportados por Excel 2010. De esta manera, la función RGB anterior nos devolverá el valor 6801221.
En la siguiente sección te quedará claro porqué es de utilidad este número entero que nos devuelve la función RGB.
La propiedad Color de una celda
Cada celda en Excel tiene la propiedad Color donde tiene almacenado su color de fondo. De esta manera, si queremos saber el color de fondo de una celda puedo utilizar el siguiente código VBA:
Range("A1").Interior.Color
Como resultado obtendré el número entero único asignado al color de fondo de la celda A1.
Código VBA para evaluar el color de fondo
Si quiero saber si el color de fondo de una celda es igual a un color preciso, es suficiente con comparar la propiedad Color de la celda con el color en cuestión y eso es precisamente lo que hace la siguiente función VBA que he creado:
Esta función tiene 4 argumentos que describo a continuación:
- Celda: La celda que contiene el color de fondo que deseo evaluar.
- Rojo: El valor Rojo del código RGB del color con el que se comparará la celda.
- Verde: El valor Verde del código RGB del color con el que se comparará la celda.
- Azul: El valor Azul del código RGB del color con el que se comparará la celda.
La función devuelve VERDADERO si el color de fondo de la celda es el mismo que el color descrito por los argumentos Rojo, Verde y Azul.
Evaluando el color de fondo de una celda
Al inicio de este artículo propuse que al encontrar una celda con un color de fondo rojo se mostrara el mensaje “Crítico”. Sabiendo que el color rojo tiene un código RGB (255, 0, 0) he utilizado la función VBA recién creada de la siguiente manera:
Como puede observar, la función ColorFondoIgual es utilizada como el primer argumento de la función SI de manera que sea la que determine si el color de la celda corresponde al código RGB proporcionado. En caso de que sea verdadero se despliega el mensaje “Crítico” y en caso contrario se muestra el mensaje “Normal”.
Si quisiera evaluar otro color diferente solo debo cambiar los argumentos de la función ColorFondoIgual proporcionando los valores del código RGB del nuevo color. En el siguiente ejemplo evalúo el color verde en lugar del rojo:
Ejemplos adicionales
Este artículo se ha extendido más de lo planeado, así que te invito a descargar el libro de trabajo donde encontrarás dos ejemplos adicionales.
- ColorFondoIgual-anidado: En este ejemplo utilizo una función SI anidada para decidir el mensaje a desplegar dependiendo el color de fondo de una celda. Si la celda es de color rojo se muestra “Crítico”, si es de color amarillo se muestra “Inestable” y si no es ninguna de las dos anteriores se muestra “Normal”.
- ColorFuenteIgual: Para el segundo ejemplo he incluido una nueva función llamada ColorFuenteIgual que en lugar de evaluar el color de fondo de una celda evalúa el color de la fuente. El uso de esta función es similar, pero al revisar el código verás que en lugar de evaluar la propiedad Interior.Color de la celda se evalúa la propiedad Font.Color la cual indica precisamente el color de la fuente.
Los ejemplos los encontrarás en diferentes hojas del libro y el código de ambas funciones está dentro del Módulo que forma parte del proyecto VBA.