Подсчитать список ячеек с одинаковым цветом фона - PullRequest
10 голосов
/ 08 сентября 2008

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

Я пытался =COUNTIF(D3:D9,CELL("color",D3)) безуспешно (где D3 - красный).

Ответы [ 5 ]

9 голосов
/ 08 сентября 2008

Excel не может собрать этот атрибут с помощью встроенных функций. Если вы хотите использовать какой-нибудь VB, ответьте на все ваши вопросы о цвете здесь:

http://www.cpearson.com/excel/colors.aspx

Пример формы сайта:

Функция SumColor основана на цвете аналог как суммы, так и суммы функция. Это позволяет вам указать отдельные диапазоны для диапазона которого цветовые индексы должны быть изучены и диапазон ячеек, значения которых должны суммировать Если эти два диапазона являются то же самое, функция суммирует клетки чей цвет соответствует указанному значение. Например, следующее формула суммирует значения в B11: B17 чей цвет заливки красный.

=SUMCOLOR(B11:B17,B11:B17,3,FALSE)

6 голосов
/ 08 сентября 2008

Формула рабочего листа, =CELL("color",D3) возвращает 1, если ячейка отформатирована цветом для отрицательных значений (в противном случае возвращается 0).

Вы можете решить это с небольшим количеством VBA. Вставьте это в модуль кода VBA:

Function CellColor(xlRange As Excel.Range)
    CellColor = xlRange.Cells(1, 1).Interior.ColorIndex
End Function

Затем используйте функцию =CellColor(D3), чтобы отобразить .ColorIndex из D3

4 голосов
/ 31 августа 2013

Я только что создал это, и это выглядит проще. Вы получаете эти 2 функции:

=GetColorIndex(E5)  <- returns color number for the cell

от (ячейка)

=CountColorIndexInRange(C7:C24,14) <- returns count of cells C7:C24 with color 14

из (диапазон ячеек, номер цвета, который вы хотите считать)

пример показывает процент клеток с цветом 14

=ROUND(CountColorIndexInRange(C7:C24,14)/18, 4 )

Создать эти 2 функции VBA в модуле (нажмите Alt-F11)

открыть + папки. дважды щелкните на Module1

Просто вставьте этот текст ниже, затем закройте окно модуля (оно должно сохранить его):

Function GetColorIndex(Cell As Range)
  GetColorIndex = Cell.Interior.ColorIndex
End Function

Function CountColorIndexInRange(Rng As Range, TestColor As Long)
  Dim cnt
  Dim cl As Range
  cnt = 0

  For Each cl In Rng
    If GetColorIndex(cl) = TestColor Then
      Rem Debug.Print ">" & TestColor & "<"
      cnt = cnt + 1
    End If
  Next

  CountColorIndexInRange = cnt

End Function
2 голосов
/ 11 января 2016

Мне нужно было решить абсолютно ту же задачу. Я визуально разделил таблицу, используя разные цвета фона для разных частей. Погуглив интернет, я нашел эту страницу https://support.microsoft.com/kb/2815384. К сожалению, это не решает проблему, потому что ColorIndex относится к некоторому непредсказуемому значению, поэтому, если некоторые ячейки имеют нюансы одного цвета (например, разные значения яркости цвета ), предлагаемая функция считает их. Решение ниже мое решение:

Function CountBgColor(range As range, criteria As range) As Long
    Dim cell As range
    Dim color As Long
    color = criteria.Interior.color
    For Each cell In range
        If cell.Interior.color = color Then
            CountBgColor = CountBgColor + 1
        End If
    Next cell
End Function
0 голосов
/ 12 сентября 2016

Да, VBA - это путь.

Но если вам не нужна ячейка с формулой, которая автоматически подсчитывает / обновляет количество ячеек с определенным цветом, альтернативой является просто использовать функцию «Найти и заменить» и отформатировать ячейку так, чтобы иметь соответствующий цвет заливки.

Нажав «Найти все», вы получите общее количество ячеек, найденных в левом нижнем углу диалогового окна.

enter image description here

Это становится особенно полезным, если ваш диапазон поиска огромен. Скрипт VBA будет очень медленным, но функция «Найти и заменить» все равно будет очень быстрой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...