Contar celdas por el color

Respuesta de
a
Usuario
Me gustaría saber cómo puedo hacer una fórmula para que cuente el número de celdas de un determminado color (pe rojo) dentro de un rango. Esto lo quiero para poder contar los días de vacaciones de la plantilla identificados en un calendario de excel hecho por mí. Ya sabes, así me evito contar los días que se toma cada persona.

Gracias
Avatar
Experto
Hola!

Digamos en principio que no existe una función standard de MS Excel que haga lo que pretendes.

Sin embargo se puede ejecutar una macro cómo la que te indico a continuación, para que cuente las celdas en color de un rango seleccionado y lo deje en una celda.

Primero, "pinta" una celda (D1 en mi macro) del msmo color que quieres contar en tu rango.

Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuvo módulo ("Insertar", "´Modulo") y pega el siguiente código:

Sub ctaxcol()

Dim vCountCol As Integer
Dim vCellTarg As String

'Ferreiro, cambia esta direccion de celda si la tuya es distinta:
vCellTarg = "D1"
'=================

vCountCol = 0

For Each cell In Selection
If ActiveCell.Interior.ColorIndex = ActiveSheet.Range(vCellTarg).Interior.ColorIndex Then
vCountCol = vCountCol + 1
End If
ActiveCell.Offset(1, 0).Select
Next cell
ActiveSheet.Range(vCellTarg).FormulaR1C1 = vCountCol

End Sub

----

Cierra el editor y graba el archivo.

Para que funcione selecciona un rango de celdas a contar y ejecuta la macro que acabas de pegar(ctaxcol).

Esta contará las celdas cuyo color coincida con el de la celda D1 y dejará en ella el resultado. (Como dice dentro del mismo macro) puedes cambiar allí la referencia a otra celda si así lo deseas).

Inténtalo y comentame. Lo probé y funciona bien.

Un abrazo.
Fernando
Usuario
Lo que me has mandado funciona en columnas pero no lo consigo hacer funcionar en filas. Si me dejas una dirección te puedo mandar el fichero para que le eches un vistazo.

Muchas gracias por tu interés, de verdad..
Avatar
Experto

Buenas...

Si necesitas una respuesta rápida a tu problema reemplaza el código anterior por el siguiente. La única diferencia será la línea de instrucción de desplazamiento:

Sub ctaxcolF()

Dim vCountCol As Integer
Dim vCellTarg As String

'Ferreiro, cambia esta direccion de celda si la tuya es distinta:
vCellTarg = "D1"
'=================

vCountCol = 0

For Each cell In Selection
If ActiveCell.Interior.ColorIndex = ActiveSheet.Range(vCellTarg).Interior.ColorIndex Then
vCountCol = vCountCol + 1
End If
ActiveCell.Offset(0, 1).Select
Next cell
ActiveSheet.Range(vCellTarg).FormulaR1C1 = vCountCol

End Sub

-----

Si comparas ambos verás que sólo modifiqué esta linea:
ActiveCell.Offset(1, 0).Select

quedando ahora:
ActiveCell.Offset(0, 1).Select

Que indica que permanezca en la misma fila, pero que se mueva a la celda de la columna siguiente a la derecha.

Esto debería resolver el problema, pero si aún quieres enviar el archivo, mi dirección es fejoal@hotmail.com

Un abrazo!
Fernando


Usuario
Eternamente agradecido