Подсчитайте список ячеек с одинаковым цветом фона

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

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


person FortunateDuke    schedule 08.09.2008    source источник


Ответы (5)


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

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

Пример с сайта:

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

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

person Sean    schedule 08.09.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.

person Graham    schedule 08.09.2008
comment
Кажется, я не могу заставить это работать. Индекс цвета выходит на 55, когда есть 6 ячеек с цветом. - person FortunateDuke; 09.09.2008
comment
Извините, я не совсем закончил свое объяснение. ColorIndex указывает значение индекса в текущей цветовой палитре, поэтому вам понадобится другая формула рабочего листа, чтобы подсчитать, сколько функций CellColor возвращает 55. - person Graham; 09.09.2008
comment
Вот подробная пошаговая статья с картинками о создании определяемой пользователем функции в надстройке VBA: Подсчитайте количество ячеек с определенным цветом ячеек с помощью VBA support.microsoft.com/kb/2815384 - person Vadzim; 16.03.2015

Я только что создал это, и это выглядит проще. Вы получаете эти 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
person Stan Towianski    schedule 30.08.2013
comment
Как я могу заставить это решение работать автоматически, когда я вручную меняю цвет фона после того, как формула была на месте? На данный момент у меня все работает нормально, но мне нужно повторно ввести формулы, чтобы пересчитать новые значения после изменения цветов. - person al1en; 16.04.2018

Мне нужно было решить абсолютно такую ​​же задачу. Я визуально разделил таблицу, используя разные цвета фона для разных частей. Погуглив в Интернете, я нашел эту страницу 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
person jsxt    schedule 11.01.2016

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

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

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

введите здесь описание изображения

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

person qoheleth    schedule 12.09.2016