martes, 30 de junio de 2015

Contar la cantidad de celdas de un determinado color de fondo

En excel no existe una función predeterminada que nos permita contar la cantidad de celdas que contienen un determinado color de fondo. Sin embargo podemos realizar una función udf que nos permita realizar tal cosa haciendo uso de programación vba

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

Cargar multiples archivos txt en SSIS

 Fuentes Archivos planos Descargar AQUÍ los archivos Consulta SQL de creacion de tabla Despacho en SQL Server CREATE TABLE [dbo].[Despacho]...