Академический Документы
Профессиональный Документы
Культура Документы
El color de relleno de una celda es ampliamente utilizado por los usuarios de Excel ya que,
al resaltarla con un color diferente, podremos identificarla fácilmente en pantalla.
En ocasiones el color significará que el dato pertenece a alguna categoría específica, o tal
vez algún estatus o acción que debemos tomar basados en dicho color. El asunto es que,
cuando tenemos varias celdas con un color de relleno, es casi inevitable que llegue el
momento en que necesitemos contarlas por color.
La mayoría de los usuarios buscan de inmediato alguna función de Excel que les ayude a
contar por color, pero pronto se encuentran con que no existe una función que haga dicha
tarea.
Cuando me refiero a que no existen funciones de este tipo, me refiero a las funciones
provistas de manera predeterminada por Excel. Sin embargo, es posible construir nuestra
propia función que nos ayude a contar las celdas por color.
Construir una nueva función no es cosa de novatos, pero tampoco es una tarea de altísima
complejidad, así que en esta ocasión te mostraré los pasos necesarios para que puedas
crear esa función que cuente las celdas por color.
Lo primero que debes saber es que será necesario utilizar programación VBA para crear la
nueva función. Pero no te preocupes si no sabes programar, ya que te mostraré cada una
de las acciones a tomar.
Después de copiar el código deberás abrir el Editor de Visual Basic, y para eso tienes dos
opciones:
Una vez que se abre la ventana del Editor de Visual Basic, deberás hacer clic en en el menú
Insertar > Módulo.
La siguiente imagen muestra las celdas del rango A1:A10 con diferentes colores de relleno y
la celda D1 que tiene el color azul el cual nos interesa contar.
Para contar las celdas de color azul en el rango A1:A10, debo utilizar la función
CONTARCOLOR de la siguiente manera:
=CONTARCOLOR(D1, A1:A10)
El primer argumento es la celda que contiene el color que estamos buscando y el segundo
argumento es el rango de celdas. Ingresaré la fórmula anterior en la celda D2 y al pulsar
Entrar obtendremos el siguiente resultado:
No es indispensable tener una celda diferente para especificar el color que deseamos
contar. He utilizado la celda D1 solo para ejemplificar el uso de los dos argumentos, pero
nada impide que utilicemos una celda dentro del rango como el primer argumento.
Considera la siguiente fórmula:
=CONTARCOLOR(A2, A1:A10)
En este caso, la celda A2 tiene el color azul que queremos contar, así que podemos indicar
dicha celda como el primer argumento de la función y el resultado será el mismo.
El uso de esta función es muy simple y solo deberás asegurarte de indicar en su primer
argumento una celda que tenga el color que te interesa contar. Recuerda que Excel tiene
una gama de millones de colores y por lo tanto debes tener mucho cuidado ya que podrías
ver en pantalla colores muy parecidos cuando en realidad son distintos.
Ambos argumentos son del tipo Range ya que el primer argumentos tendrá una referencia a
la celda que tiene el color que vamos a contar y el segundo argumento será la referencia al
rango que será evaluado.
La siguiente línea de código es una instrucción que se utiliza para marcar una función como
volátil, lo cual quiere decir que la función será recalculada cada vez que se efectúa un
cálculo en la hoja.
Application.Volatile
Esta instrucción es muy conveniente ya que ocasiona que el resultado de la función sea
actualizado automáticamente al momento de realizar un cambio de color en las celdas. En
la siguiente línea tenemos la declaración de la variable celda que nos ayudará al momento
de recorrer el rango evaluado.
Utilizamos el bucle For Each para recorrer cada una de las celdas del rango y puedes notar
que la instrucción hace referencia a la variable rango que es el segundo argumento de la
función.
Si los valores de las propiedades son iguales, quiere decir que los colores son iguales y por
lo tanto aumentamos el valor de CONTARCOLOR en uno.
CONTARCOLOR = CONTARCOLOR + 1
De esa manera recorremos todas las celdas del rango y tendremos el resultado final en
CONTARCOLOR cuyo valor es devuelto automáticamente por la función por tener el mismo
nombre.
La propiedad Interior.color
Antes de terminar la explicación del código VBA debo decir que la
propiedad Interior.color está disponible a partir de Excel 2007, así que esta macro no
funcionará para versiones anteriores.
A partir de Excel 2007 tenemos millones de colores disponibles para elegir el color de
relleno de una celda, pero eso no era posible anteriormente. En Excel 2003 y versiones
previas solo era posible elegir entre una paleta de 56 colores y dicho color era almacenado
en la propiedad Interior.ColorIndex.
A partir de Excel 2007 se creó la propiedad Interior.color ya que era imposible almacenar
millones de colores en la propiedad Interior.ColorIndex que se utilizaba anteriormente. Por
esa razón el código de nuestra función no trabajará en Excel 2003 y versiones anteriores a
menos que cambies la propiedad utilizada.
Espero que esta función sea de mucha utilidad para esos casos en los que necesites contar
las celdas por color en Excel.
Sumar y contar celdas por color
de formato condicional
Hace algunos meses publique el artículo Operaciones con colores en Excel y de inmediato
recibí preguntas sobre la posibilidad de utilizar dichas funciones para evaluar los colores
aplicados a una celda a través del formato condicional.
Las funciones creadas en ese artículo evalúan la propiedad Interior.Color que tiene cada
una de las celdas en Excel, sin embargo, el formato condicional no utiliza dicha propiedad
sino que tiene su propia “versión” para almacenar el color de fondo de una celda. Por esa
razón no es posible utilizar dichas funciones para evaluar colores establecidos a través de
una regla de formato condicional.
Así que hoy crearemos una nueva función VBA (UDF) para sumar y contar celdas por
color de formato condicional. Pero antes de iniciar con el código hablaremos un poco
sobre los objetos y propiedades que debemos evaluar para obtener el color de fondo
proveniente de un regla de formato condicional.
La colección FormatConditions
Primero debemos recordar que un mismo rango de celdas en Excel puede estar sujeto a
varias reglas de formato condicional al mismo tiempo, así que para guardar esa lista de
formatos condicionales se creó la colección FormatConditions en VBA la cual enumera
todas las reglas de formato condicional aplicadas en un rango.
2 MsgBox Range("A1:A10").FormatConditions.Count
3 End Sub
El mensaje nos indica que el rango A1:A10 tiene una sola regla de formato condicional.
Ahora crearé una segunda regla para el mismo rango que resaltará de color verde todas las
celdas con un valor menor a 250. Una vez creada la regla de formato condicional, volveré a
pulsar el botón de comando y el número mostrado en el mensaje habrá aumentado debido a
la nueva regla creada:
Es así como la colección FormatConditions nos permite obtener información sobre las reglas
de formato condicional aplicadas a un rango de celdas. Ahora centraremos nuestra atención
a una propiedad específica de dicha colección.
La propiedad FormatCondition.Interior.Color
Cada regla de formato condicional almacena el estilo que aplicará a las celdas que cumplan
con las condiciones establecidas y específicamente el color de relleno se almacena en la
propiedad Interior.Color. Para demostrar el valor de esta propiedad agregaré un nuevo
botón de comando con el siguiente código:
1 Private Sub CommandButton2_Click()
2 For i = 1 To Range("A1:A10").FormatConditions.Count
5 Next i
6 End Sub
El código anterior recorre todos los elementos de la colección FormatConditions y para cada
elemento mostrará un mensaje con el número de regla y su color de relleno que está
almacenado en la propiedad Interior.Color. Al pulsar el botón obtengo el siguiente resultado:
El color devuelto será un valor entre 0 y 16777215 que corresponde a una de las
combinaciones de colores primarios (rojo, verde y azul) que se pueden formar en Excel. Si
quieres saber un poco más sobre los colores en Excel consulta el artículo Evaluar el color
de fondo de una celda.
Los colores mostrados con el código anterior son los colores pertenecientes a cada una de
las reglas de formato condicional y no el color de una celda específica. Para conocer el color
de formato condicional aplicado a una celda será necesario encontrar la regla que se
cumple sobre dicha celda para entonces obtener el color correspondiente.
7 For i = 1 To Celda.FormatConditions.Count
10 With Celda.FormatConditions(i)
11
14
28
31
32 Application.ScreenUpdating = False
33 Celda.Select
34 ReglaActiva = Evaluate(.Formula1)
35 Range(ActiveCell.Address).Select
36 Application.ScreenUpdating = True
37
38 End If
39
45
46 End With
47 Next i
48
49 End Function
Las primeras líneas de código se encargan de recorrer todas las reglas de formato
condicional para la celda proporcionada. La primera validación importante es sobre la
propiedad Type que nos permite saber el tipo de regla que estamos analizando, ya sea del
tipo xlCellValue o del tipo xlExpression. Es importante mencionar que existen más tipos de
reglas de formato condicional, de hecho la enumeración XlFormatConditionType contiene 14
tipos diferentes, pero solamente los dos tipos mencionados anteriormente tienen una
manera de ser evaluados desde VBA. Por esta razón la función COLORFC considera en
primer lugar las reglas de formato condicional que evalúan directamente el valor de una
celda.
El cuadro de diálogo anterior muestra precisamente la lista de reglas de formato condicional
que son del tipo xlCellValue y que por lo tanto serán reconocidas por nuestra función. Ahora
hagamos una prueba con los datos de ejemplo para ver cómo la función
COLORFC devuelve el color aplicado a cada celda de acuerdo a la regla de formato
condicional activa. Recuerda que las reglas creadas resaltan de rojo las celdas con un valor
superior a 750 y de color verde los valores menores a 250.
Nuestra función VBA funciona correctamente al devolver el código de color adecuado para
cada celda. El otro tipo de reglas consideradas en la función COLORFC son aquellas
basadas en una expresión, que generalmente son las reglas basadas en una fórmula que
contiene funciones de Excel. Pero debo darte una mala noticia, esta opción solo funcionará
si tenemos Excel en inglés. Y a continuación explico por qué.
Al momento de crear una regla de formato condicional que utilice una función de Excel,
colocaremos su nombre en castellano. Dicha fórmula se almacenará en una propiedad de la
regla de formato condicional y al momento de evaluarla desde VBA la cadena de texto
contendrá el nombre de la función en español lo cual ocasionará un error ya que VBA
solamente entiende las funciones de Excel por su nombre en inglés. Aún así he dejado esta
funcionalidad porque existe un porcentaje de usuarios que utilizan Excel en inglés y ellos
podrán obtener el color de las celdas que utilicen reglas de formato condicional basadas en
fórmulas.
Después de todas estas aclaraciones (que eran necesarias), tenemos una función que nos
devolverá el color aplicado a una celda desde una regla de formato condicional, así que
ahora solo debemos utilizarla para sumar o contar celdas por color.
7 Color = COLORFC(CeldaColor)
8
12 End If
13 Next Celda
14
15 SUMARPORCOLORFC = Total
16
17 End Function
El primer argumento de la función es una celda que contiene el color por el cual deseamos
sumar, así que una de las primeras acciones es obtener dicho color con la función
COLORFC. Posteriormente se hará un recorrido por todo el rango de celdas para sumar el
valor de aquellas que tengan el mismo color. Observa cómo trabaja nuestra función con los
datos de ejemplo:
La función devuelve correctamente la suma de las celdas A1 y A9 que son las que tienen el
mismo color que la celda A1 que ha sido indicada como el primer argumento de la función.
7 Color = COLORFC(CeldaColor)
11 Total = Total + 1
12 End If
13 Next Celda
14
15 CONTARPORCOLORFC = Total
16
17 End Function
Al utilizar esta función con los mismos datos de ejemplo podrás observar que la función
CONTARPORCOLORFC nos devuelve el valor 2 que corresponde a las celdas con el
mismo color que la celda A3:
Descarga el libro de trabajo para comenzar a sumar y contar celdas por color de formato
condicional en tus propios libros de trabajo. Solo recuerda que las funciones creadas en
este artículo validarán solo las reglas de formato condicional basadas en el valor de la
celda. También recuerda que podrás evaluar reglas basadas en fórmulas solamente si
tienes una versión en inglés de Excel.