В Excel нужно подсчитать ячейки, которые окрашены из условного форматирования, а затем создать отчет по конкретным результатам - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть электронная таблица с именами (в столбце A), и каждое имя имеет 10 номеров подряд (столбцы BK).Я использую условное форматирование, чтобы выделить ячейки зеленым цветом, которые содержат числа, которые соответствуют другим критериям.

Теперь мне нужно подсчитать выделенные зеленым цветом ячейки для каждого имени и создать отчет о результатах.Например, мне нужен отчет или список, или график, который показывает все имена людей, у которых 8 из 10 ячеек выделены зеленым цветом.(Имена с 8 зелеными клетками = Джо, Майк, Сью)

Я использую следующую формулу просто для подсчета каждой строки ячеек зеленого цвета, но в списке будет слишком много имен, чтобы повторить эту формулу для каждой строки,Поэтому я не создал отчет, основанный на результатах этой формулы, потому что мне нужна лучшая формула для начального подсчета зеленых клеток.Затем мне нужна помощь в создании наилучшего способа создания окончательного отчета.Спасибо!

enter image description here

Public Sub CountColorCells()
    'Variable declaration
    Dim rng As Range
    Dim lColorCounter As Long
    Dim rngCell As Range
    'Set the range
    Set rng = Sheet1.Range("B2:K2")
    'loop throught each cell in the range
    For Each rngCell In rng
        'Checking Green color
        If Cells(rngCell.Row, rngCell.Column).DisplayFormat.Interior.Color = _
                                                       RGB(169, 208, 142) Then
            lColorCounter = lColorCounter + 1
        End If
    Next
    'Display the value in cell L2
    Sheet1.Range("L2") = lColorCounter
 End Sub

1 Ответ

0 голосов
/ 03 февраля 2019

Полагаю, вам действительно нужен UDF (пользовательская функция).С помощью UDF вы можете ввести формулу, которая будет выглядеть следующим образом:

в ячейке L2: =CountColorCells(B2:K2), и этот UDF будет возвращать количество выделенных ячеек в диапазоне.

Вот некоторые изменения, которые нужно внести в ваш код.

Во-первых, вы хотите объявить его как Function, а не Sub, так как нам нужно вернуть значение.

Далее, вашкод близок к тому, чтобы быть правильным, как есть.Единственная проблема заключается в том, что когда вы выполняете итерации по диапазону (который будет изменен на входной параметр функции), вам не нужно разбивать Row и Column.Это уже запечено в rngCell.Итак, ваш UDF теперь выглядит так (и работает очень быстро)

Public Function CountColorCells(ByRef thisRange As Range) As Long
    Dim lColorCounter As Long
    Dim rngCell As Range
    For Each rngCell In thisRange
        If rngCell.Interior.Color = RGB(169, 208, 142) Then
            lColorCounter = lColorCounter + 1
        End If
    Next
    CountColorCells = lColorCounter
End Function

И теперь (только потому, что я не могу с этим поделать;)), вот версия UDF, которую я бы использовал.Теперь есть несколько необязательных параметров для значений красного, зеленого и синего цветов, которые вы можете добавить на тот случай, если вы хотите посчитать другой цвет.Таким образом, в этой версии UDF вы можете считать ячейки, которые являются КРАСНЫМИ, по формуле =CountColorCells(B2:K2,255,0,0).Это только расширенный пример того, что вы можете сделать:

Public Function CountColorCells(ByRef thisRange As Range, _
                                Optional ByVal r As Long = 169, _
                                Optional ByVal g As Long = 208, _
                                Optional ByVal b As Long = 142) As Long
    Dim checkColor As Long
    checkColor = RGB(r, g, b)

    Dim lColorCounter As Long
    Dim rngCell As Range
    For Each rngCell In thisRange
        If rngCell.Interior.Color = checkColor Then
            lColorCounter = lColorCounter + 1
        End If
    Next
    CountColorCells = lColorCounter
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...