¿Cómo puedo escribir una macro que recorra un rango de celdas y cuente el contenido por color sin que cuente cada celda individual dentro de un grupo de celdas combinadas?
Por ejemplo, en la imagen, quiero que una macro devuelva un recuento de 2 amarillos y 3 verdes, pero la macro que escribí devuelve un recuento de 8 amarillos, ya que cuenta las 7 celdas amarillas fusionadas como individuos.....
Respuesta1
Puaj. Hay dos malas prácticas en este ejemplo que debes evitar: codificar celdas con colores para transmitir significado y fusionar celdas. No. Simplemente no lo hagas. Use una columna diferente para determinar un valor de estado o categoría, luego puede usar el formato condicional para establecer un color de celda basado en ese valor de estado o categoría. Y puede utilizar fórmulas simples de hojas de trabajo para realizar un recuento por estado o categoría.
La fusión de células causa más dolores de cabeza que la aspirina. Simplemente no fusiones celdas. Causan problemas con la selección y, como habrás notado, con la lógica en VBA. No fusione y haga un recuento simple con fórmulas de hojas de trabajo. La "necesidad" de fusionar celdas siempre se puede superar con una arquitectura de datos y una estructura de hoja de trabajo adecuadas.
Respuesta2
Estoy totalmente de acuerdo con@teylynAdvertencia, pero si existen razones muy justificadas para tal solución, puede utilizar dicha función, por ejemplo.
Function ColorCount(rng As Range, pat) As Long
Dim cell As Range, cnt As Long
Select Case TypeName(pat)
Case "Range": pat = pat.Interior.Color
Case "String": pat = Range(pat).Interior.Color
End Select
For Each cell In rng
If cell.Address = cell.MergeArea(1).Address And _
cell.Interior.Color = pat Then
cnt = cnt + 1
End If
Next cell
ColorCount = cnt
End Function
La función toma dos argumentos: el primero es el rango de celdas a verificar, el segundo es el patrón de color (puede ser una referencia, el texto de una dirección o un valor de color numérico). El color de la celda del formato base, no condicional.