Analisis:
Veremos en nuestra imagen inferior, dos bloques: el bloque A el cual contiene datos desde la celda A2:A12 cada celda con un determinado color (con colores repetidos), y por otro lado el bloque B con una lista de 3 colores únicos los cuales son iguales al del Bloque B.
La idea es contar la cantidad de veces que se repiten los colores del bloque B en el Bloque A, es como si fuera un contar.si pero con colores de fondo de una celda.
Antes de comenzar con nuestro código vamos a explicar que la manera de saber el color de fondo de una celda usando vba es a través del código interior.color que hace referencia a una celda.
Por ejemplo :
Al ejecutar el siguiente código nos muestra un mensaje con el numero de color de la celda .
De esta manera cada color podemos identificarlo con un numero. que en este caso para el amarillo sera 16777215
Sub ColorFondo()
MsgBox Range("A2").Interior.Color
End Sub
Bueno una vez analizado lo que se requiere, crearemos la funcion udf en vba.
Para lo cual ingresamos al editor de vba e insertamos un modulo en el cual escribiremos este codigo que a continuación pasaremos a explicar
Creamos nuestra función llamada ContarColorRelleno y le colocamos dos parámetros de tipo Range: MatrizColores y ColorCriterio:
MatrizColores: Es la lista de colores que se va a contar, en este caso esta en nuestro bloque A
ColorCriterio: Es el color con el cual deseamos comparar la lista de colores. Este criterio seria nuestro bloque B.
codigo:
Function ContarColorRelleno(MatrizColores As Range, ColorCriterio As Range)La explicacion de cada linea del codigo se encuentra comentada de color verde.
Dim cont
Application.Volatile 'Permite actualizar la funcion al editar cualquier celda de la hoja
For Each celda In MatrizColores
If celda.Interior.Color = ColorCriterio.Interior.Color Then ' Valida si el color es igual
cont = cont + 1 'si es verdadero entonces incrementa la variable cont
End If
Next
ContarColorRelleno = cont 'Asignamos la cantidad de veces que se repite un color a la funcion
Una vez que hayamos finalizado con nuestro la sintaxis queda de la siguiente manera:
=ContarColorRelleno(MatrizColores,ColorCriterio)
Lo usaremos en la celda E2: =ContarColorRelleno($A$2:$A$12,D2)
De esta manera nos cuenta en E2 cuantas celdas de color amarillo existe en nuestro rango A2:A12
Y asi podemos realizarlo con la cantidad de celdas que nos haga falta.
Espero les haya sido de mucha utilidad este pequeño codigo. Pueden descargar el ejemplo en este enlance
No hay comentarios:
Publicar un comentario