Professional Documents
Culture Documents
Next
End Function
eseamos contar y sumar los valores de ciertas celdas segn su color. Para
Hoja 1
En la primera hoja tenemos tres macros, con tres botones. La primera que
deberamos ejecutar es 'Limpia' que borra el contenido y los formatos de las
columnas C y E. Al efectuar la limpieza observamos que las columnas F y G nos
dan error, ya que la frmula que contienen deja de funcionar. Luego veremos como
se resuelve este error.
El botn 'Lista Colores' lanza la macro denominada 'marcas' que genera, en la
columna C, una lista con los nmeros del 1 al 56. A cada una de esas celdas las
dota del color correspondiente segn su cdigo de color entre 1 y 56.
Observar que al lanzar esta macro la columna G ya nos est dando el cdigo de
color gracias a una funcin que luego veremos. Por el contrario en la columna F
obtenemos un cdigo extrao (-4142).
Cdigo:
Sub marcas()
'Pone un tono de color a cada celda entre 1 y 56
Dim i As Integer
For i = 1 To 56
With Range("C5").Offset(i, 0)
.Value = i
.Interior.ColorIndex = i
.Interior.Pattern = xlSolid
End With
Next
End Sub
Cdigo:
Sub DetectaColor()
'Detecta el tono de color de cada celda
'y pone su nmero a la derecha de la celda
Dim i As Integer
Dim ColorCelda As Integer
Range("C5").Select
For i = 1 To 56
Selection.Offset(1, 0).Select
ColorCelda = Selection.Interior.ColorIndex
Selection.Offset(0, 2).Value = ColorCelda
Next
Range("A1").Select
End Sub
Vamos a crear una funcin que nos proporcione el nmero del color entre 1 y 56.
La funcin se denomina Num_Color.
Cdigo:
Hoja 2
En la Hoja2 vamos a desarrollar funciones (macrofunciones) que permiten contar y
sumar segn los colores asignados a las celdas de un rango.
Cdigo:
Sub color_aleatorio()
'Pone a cada celda un tono de color
'aleatoriamente entre 3 y 8
Dim i As Integer
For i = 1 To 20
With Range("C4").Offset(i, 0)
.Value = Int(Rnd() * 100) + 100
.Interior.ColorIndex = Int(Rnd() * 6) + 3
.Interior.Pattern = xlSolid
End With
'ahora generamos la columna D
Range("C4").Offset(i, 1).Value = Int(Rnd() * 500) + 500
Next
End Sub
Mtodo 1
La funcin contar_color nos permite contar los colores que existen en RangoColor
que sean iguales al color de CeldaColor.
Cdigo:
Mtodo 2
Creamos la columna auxiliar B que utiliza la funcin =num_color que ya hemos
visto en la Hoja1. La frmula de la celda B5 es:
=num_color(C5)+AHORA()*0
Mtodo 1
La funcin sumar_color nos permite sumar el valor numrico de las celdas de un
rango segn que el color de esa celda se corresponda con el de una celda
concreta denominada CeldaColor.
En la columna I calculamos la suma de las celdas de la columna C por cada color.
En la celda I6 calculamos la suma de las celdas de color rojo:
=sumar_color($C$5:$C$24;F6)+AHORA()*0
Cdigo:
Mtodo 2
En la columna J calculamos la suma por colores con la funcin =SUMAR.SI. En la
celda J6 tenemos la expresin:
=SUMAR.SI($B$5:$B$24;F6;$C$5:$C$24)
Mtodo 3
El mtodo 3 considera que puede suceder que lo que pretendamos sumar no est
precisamente en el mismo rango que se encuentran las celdas coloreadas. En este
caso, las celdas coloreadas se encuentran en la columna C y las celdas que
queremos sumar estn en la columna D. Es necesario que el rango que se desea
Cdigo:
Mtodo 4
Para sumar los importe de la columna D segn los colores de la columan C
utilizamos la funcin =SUMAR.SI. Esto se hace en la columna L. La celda L6 tiene
la siguiente expresin:
=SUMAR.SI($B$5:$B$24;F6;$D$5:$D$24)
Aqu nuevamente hemos utilizado la columna auxiliar B, que es donde calculamos
el cdigo de color de las celdas de la columna C.
Mtodo 5
El mtodo 5 es una variante del mtodo 3. En muchos casos el tercer argumento
coincidir con el primero. Esto es, el RangoSuma ser igual en muchos casos al
RangoColor, por lo que vamos a convertir este tercer argumento en optativo. Si no
se indica nada en este tercer argumento (RangoSuma) se supondr que lo que
queremos sumar esta precisamente en las celdas coloreadas (RangoColor).
Cdigo:
Observaciones