Макрос Excel для подсчета ячеек по цвету и не учитывает объединенные ячейки, если их больше 1

Макрос Excel для подсчета ячеек по цвету и не учитывает объединенные ячейки, если их больше 1

Как написать макрос, который будет проходить по диапазону ячеек и подсчитывать их содержимое по цвету, не подсчитывая при этом каждую отдельную ячейку в группе объединенных ячеек?введите описание изображения здесь

Например, на рисунке я хочу, чтобы макрос возвращал количество 2 желтых и 3 зеленых, но написанный мной макрос возвращает количество 8 желтых, поскольку он считает 7 объединенных желтых ячеек как отдельные...

решение1

Уф. В этом примере есть две плохие практики, которых следует избегать: цветовое кодирование ячеек для передачи смысла и объединение ячеек. Не надо. Просто не надо. Используйте другой столбец для определения значения статуса или категории, затем вы можете использовать условное форматирование, чтобы задать цвет ячейки на основе этого значения статуса или категории. И вы можете использовать простые формулы рабочего листа для выполнения подсчета по статусу или категории.

Объединение ячеек вызывает больше головной боли, чем аспирин. Просто не объединяйте ячейки. Они вызывают проблемы с выбором и, как вы заметили, с логикой в ​​VBA. Не объединяйте, а сделайте простой подсчет с помощью формул рабочего листа. «Необходимость» в объединении ячеек всегда можно преодолеть с помощью правильной архитектуры данных и структуры рабочего листа.

решение2

Я полностью согласен с@тейлинпредупреждение, но если есть какие-то очень обоснованные причины для такого решения, то можно воспользоваться такой функцией, например.

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

Функция принимает два аргумента: первый — диапазон проверяемых ячеек, второй — цветовой шаблон (это может быть ссылка, текст адреса или числовое значение цвета). Цвет ячейки из базового форматирования, не условный.

Количество цветов

Связанный контент