Macro de Excel para contar celdas por color y no cuenta las celdas combinadas como más de 1

Macro de Excel para contar celdas por color y no cuenta las celdas combinadas como más de 1

¿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?ingrese la descripción de la imagen aquí

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.

Conteo de colores

información relacionada