Мы с вами уже рассматривали вопрос о том как посчитать в Excel количество ячеек/значений в подробном видео уроке. Сегодня мы бы хотели немного расширить данную статью для решения более узкой задачи. Допустим, вам необходимо посчитать количество ячеек в зависимости от цвета ячеек или цвета текста.
Начиная с Excel 2007 в программе встроили возможность сортировки ячеек по цвету. Таким образом, можно отфильтровать нужный нам цвет, выделить оставшиеся на виду ячейки и визуально посмотреть общее количество ячеек. Но что делать, если нам требуется делать это часто и при этом нам необходимо, чтобы все считалось и пересчитывалось с помощью формул.
Для этих целей необходимо использовать очень простенький макрос, а точнее пользовательскую функцию, назовем ее ColorNom, она позволит нам вытягивать числовой код цвета заливки и далее по этому коду мы и будет считать общее количество ячеек, используя приемы, описываемые в статье как посчитать в Excel количество ячеек/значений
Итак, приступим. Зайдите в редактор Visual Basic, для этого:
в Excel 2003 нажмите на Сервис, далее Макрос и затем Редактор Visual Basic.
в Excel 2007, 2010 и 2013 это делается по-другому. Зайдите в раздел Разработчик, далее выберите Visual Basic
Внимание! Раздел панели инструментов Разработчик в Excel 2007 доступен по умолчанию, а в Excel 2010 и 2013 его необходимо включить. Это особенно полезно сделать тем пользователям, которые будут часто работать с макросами. Чтобы включить панель инструментов Разработчик в Excel 2010 или 2013 необходимо запустить Файл | Параметры | Настройка ленты после этого необходимо с правой стороны необходимо поставить галочку напротив надписи Разработчик
После того как откроется редактор Visual Basic, вставьте пустой модуль, для этого выберите меню Insert и далее Module
и скопируйте туда текст простой функции:
Public Function ColorNom(Cell As Range)
ColorNom = Cell.Interior.ColorIndex
End Function
После этого закройте редактор Visual Basic и можно вернуться к нашему файлу. В любой пустой ячейки введите пользовательскую функцию, которую мы ввели раннее. В нашем случае это функция ColorNom, ее можно вызвать либо через меню Вставка, Функция — категория Определенные пользователем, либо просто можно напечатать ее в самой ячейке =ColorNom(A1), где A1 — это наша ячейка, в которой нам необходимо определить индекс цвета.
После этого уже не составит труда посчитать количество ячеек или значений в зависимости от цвета ячейки. Используйте нашу статью как посчитать в Excel количество ячеек/значений
Если вам необходимо посчитать количество значений или сумму в зависимости от цвета текста, то необходимо немного изменить код пользовательской функции.
Public Function ColorNom(Cell As Range)
ColorNom = Cell.Font.ColorIndex
End Function
Важно! Вы не сможете находить с помощью данной функции номер цвета ячейки при использовании условного форматирования. Кроме того, при изменении цвета ячейки Excel не пересчитывает значения, необходимо это делать в ручную, нажимая Ctrl+Alt+F9, либо изменения будут происходить при новом открытии данного файла. Это происходит из-за того, что Excel не считает изменение цвета ячейки редактированием формулы. В связи с этим, если это критично, то можно внести изменение в саму формулу, просто добавив функцию, которая постоянно пересчитывается и при этом не повлияет на определение цвета ячейки. Например, указать функцию определения текущей даты, умноженную на ноль.
В нашем случае функция будет выглядеть следующем образом.
=ColorNom(A1)+Сегодня()*0
Пример подсчета количества значений по цвету цвету заливки ячеек в Excel
Рассмотрим вышеуказанный пример с перечнем фруктов. Мы определили код ячеек и отобразили его напротив каждой ячейки.
Далее для удобства мы создадим вспомогательную таблицу из всех существующих цветов заливки. В нашем случае это красный, зеленый и желтый. Рядом с помощью все той же формулы определим код цвета.
В третьем столбце мы уже будет считать количество ячеек определенного цвета по условию, использую код цвета.
Считать количество мы будем с помощью функции СЧЁТЕСЛИ
Вот так выглядят аргументы данной функции
=СЧЁТЕСЛИ(диапазон;критерий)
Пропишем формулу:
=СЧЁТЕСЛИ($B$1:$B$8;E2)
Диапазон мы указали со знаком доллара, чтобы он был закреплен и можно было протянуть формулу. Критерия у нас встречается всего три и они указаны в нашей вспомогательной таблице. Протянем формулу и получим количество ячеек по цветам.
Скачать пример файла: Цвет_Ячеек.xlsm (файл с поддержкой макросов)
Skip to content
В этой статье вы узнаете, как посчитать ячейки по цвету и получить сумму по цвету ячеек в Excel. Эти решения работают как для окрашенных вручную, так и с условным форматированием.
Если вы активно используете различные цвета заливки и шрифта на листах Excel, чтобы различать различные типы значений, вам может потребоваться узнать, сколько ячеек выделено определенным цветом. Если значения ваших ячеек являются числами, вы можете автоматически вычислить сумму ячеек, закрашенных одним цветом, например, сумму всех красных ячеек.
Как все мы знаем, Microsoft Excel предоставляет множество формул для разных целей, и было бы логично предположить, что для подсчета ячеек по цвету есть и такие. Но, к сожалению, нет стандартной функции, которая позволяла бы суммировать по цветам или считать по цветам в Excel.
Помимо использования сторонних надстроек, есть только одно возможное решение — использование пользовательских функций. Если вы очень мало знаете об этой технологии или никогда раньше не слышали этот термин, не пугайтесь, вам не придется писать код самостоятельно. Здесь вы найдете готовое решение, и все, что вам нужно сделать, это скопировать / вставить его в свою книгу.
Функции и макросы, которые мы рассмотрим в этой статье, помогут нам сделать следующее:
- Как посчитать по цвету и суммировать по цвету на листе Excel
- Как суммировать по цвету и сосчитать по цвету во всей рабочей книге
- Пользовательские функции для получения цвета ячейки, цвета шрифта и цветового кода
- Как считать по цвету и суммировать ячейки, окрашенные с использованием условного форматирования
- Самый быстрый способ подсчета и суммирования ячеек по цвету в Excel
Как посчитать по цвету и суммировать по цвету на листе Excel
Предположим, у вас есть таблица со списком заказов, в которой ячейки в столбце «Количество» окрашены в зависимости от их значения в колонке «Выполнение» и даты: ячейки с выполняемыми заказами сроком до 30 дней от текущей даты — желтые, уже выполненные — зеленые, а просроченные заказы — красные.
Теперь нам нужно автоматически подсчитать ячейки определенного цвета, т.е. посчитать количество красных, зеленых и желтых ячеек в таблице. Как я объяснил выше, прямого решения этой задачи при помощи стандартных формул Excel не существует. Но, к счастью, есть код VBA для Excel. Выполните 5 быстрых шагов ниже, и вы узнаете число и сумму ваших цветных ячеек всего за несколько минут.
- Откройте книгу Excel и нажмите
Alt+F11
, чтобы открыть редактор Visual Basic (VBE). - Щелкните правой кнопкой мыши имя своей книги в разделе «Project–VBAProject» в правой части экрана, а затем выберите «Вставить» > «Модуль» в контекстном меню.
- Добавьте в вашу рабочую книгу следующий код:
Function GetCellColor(xlRange As Range)
Dim indRow, indColumn As Long
Dim arResults()
Dim colorVal As Variant
Application.Volatile
If xlRange Is Nothing Then
Set xlRange = Application.ThisCell
End If
If xlRange.Count > 1 Then
ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count)
For indRow = 1 To xlRange.Rows.Count
For indColumn = 1 To xlRange.Columns.Count
colorVal = xlRange(indRow, indColumn).Interior.Color
arResults(indRow, indColumn) = (colorVal Mod 256) & ", " & ((colorVal 256) Mod 256) & ", " & (colorVal 65536)
Next
Next
GetCellColor = arResults
Else
colorVal = xlRange.Cells(1, 1).Interior.Color
GetCellColor = (colorVal Mod 256) & ", " & ((colorVal 256) Mod 256) & ", " & (colorVal 65536)
End If
End Function
Function GetCellFontColor(xlRange As Range)
Dim indRow, indColumn As Long
Dim arResults()
Dim colorVal As Variant
Application.Volatile
If xlRange Is Nothing Then
Set xlRange = Application.ThisCell
End If
If xlRange.Count > 1 Then
ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count)
For indRow = 1 To xlRange.Rows.Count
For indColumn = 1 To xlRange.Columns.Count
colorVal = xlRange(indRow, indColumn).Font.Color
arResults(indRow, indColumn) = (colorVal Mod 256) & ", " & ((colorVal 256) Mod 256) & ", " & (colorVal 65536)
Next
Next
GetCellFontColor = arResults
Else
colorVal = xlRange.Cells(1, 1).Font.Color
GetCellFontColor = (colorVal Mod 256) & ", " & ((colorVal 256) Mod 256) & ", " & (colorVal 65536)
End If
End Function
Function CountCellsByColor(rData As Range, cellRefColor As Range) As Long
Dim indRefColor As Long
Dim cellCurrent As Range
Dim cntRes As Long
Application.Volatile
cntRes = 0
indRefColor = cellRefColor.Cells(1, 1).Interior.Color
For Each cellCurrent In rData
If indRefColor = cellCurrent.Interior.Color Then
cntRes = cntRes + 1
End If
Next cellCurrent
CountCellsByColor = cntRes
End Function
Function SumCellsByColor(rData As Range, cellRefColor As Range)
Dim indRefColor As Long
Dim cellCurrent As Range
Dim sumRes
Application.Volatile
sumRes = 0
indRefColor = cellRefColor.Cells(1, 1).Interior.Color
For Each cellCurrent In rData
If indRefColor = cellCurrent.Interior.Color Then
sumRes = WorksheetFunction.Sum(cellCurrent, sumRes)
End If
Next cellCurrent
SumCellsByColor = sumRes
End Function
Function CountCellsByFontColor(rData As Range, cellRefColor As Range) As Long
Dim indRefColor As Long
Dim cellCurrent As Range
Dim cntRes As Long
Application.Volatile
cntRes = 0
indRefColor = cellRefColor.Cells(1, 1).Font.Color
For Each cellCurrent In rData
If indRefColor = cellCurrent.Font.Color Then
cntRes = cntRes + 1
End If
Next cellCurrent
CountCellsByFontColor = cntRes
End Function
Function SumCellsByFontColor(rData As Range, cellRefColor As Range)
Dim indRefColor As Long
Dim cellCurrent As Range
Dim sumRes
Application.Volatile
sumRes = 0
indRefColor = cellRefColor.Cells(1, 1).Font.Color
For Each cellCurrent In rData
If indRefColor = cellCurrent.Font.Color Then
sumRes = WorksheetFunction.Sum(cellCurrent, sumRes)
End If
Next cellCurrent
SumCellsByFontColor = sumRes
End Function
- Сохраните свою книгу как «Книга Excel с поддержкой макросов (.xlsm)».
Если вы новичок и вам сложно работать с VBA, вы можете найти подробные пошаговые инструкции и несколько полезных советов в этом руководстве: Как вставить и запустить код VBA в Excel .
- Теперь, когда вся подготовительная работа сделана, выберите ячейку, в которой вы хотите получить результат, и введите в нее только что записанную нами пользовательскую функцию CountCellsByColor:
CountCellsByColor( диапазон ; код цвета )
здесь и далее эти аргументы означают:
диапазон – диапазон ячеек, в которых вы хотите произвести подсчеты по цвету,
код цвета – адрес ячейки-образца, цвет фона или шрифта которой соответствуют искомому цвету фона или шрифта.
В этом примере мы используем формулу, =CountCellsByColor(D2:D21;A24), где D2:D21— это диапазон, в котором вы хотите посчитать количество ячеек с цветом, а A24 — это ячейка, закрашенная нужным нам цветом, красным в нашем случае.
Аналогичным образом вы записываете формулы для других цветов, которые хотите посчитать, желтого и зеленого, в нашей таблице.
Если у вас есть числовые данные в цветных ячейках (например, столбец Количество в нашей таблице), вы можете сложить значения на основе определенного цвета, используя аналогичную функцию SumCellsByColor:
SumCellsByColor( диапазон ; код цвета)
Как показано на скриншоте выше, мы использовали формулу суммы по цвету, =SumCellsByColor(D2:D21;A24), где D2:D21 — это диапазон, а A24 — ячейка с образцом цвета.
Аналогичным образом вы можете посчитать выделенные цветом ячейки и суммировать значения таких ячеек по цвету шрифта, используя функции CountCellsByFontColor и SumCellsByFontColor соответственно.
На скриншоте ниже вы видите, как можно подсчитать количество значений, написанных красным цветом.
=CountCellsByFontColor(D2:D21;A24)
Аналогично подсчитываем сумму чисел, имеющих определённый цвет шрифта, при помощи формулы:
=SumCellsByFontColor(D2:D21;A24)
Примечание. Если после применения вышеупомянутого кода VBA вам потребуется раскрасить еще несколько ячеек вручную, то сумма и количество окрашенных ячеек не будут пересчитаны автоматически, чтобы отразить произошедшие изменения. Пожалуйста, не сердитесь на нас, это не ошибка кода
На самом деле, это нормальное поведение всех макросов Excel, скриптов VBA и пользовательских функций. Дело в том, что все подобные функции вызываются только при изменении данных рабочего листа. Но Excel не воспринимает изменение цвета шрифта или цвета ячейки как изменение данных.
Итак, после раскрашивания ячеек вручную, просто поместите курсор в любую ячейку и нажмите F2
, а затем Enter
. То есть, сделайте вид, что меняете содержимое какой-либо ячейки. Сумма и количество в пользовательской функции тут же будут обновлены. То же самое относится и к другим макросам, которые считают по цвету.
Как суммировать по цвету и сосчитать по цвету во всей рабочей книге
Приведенная ниже пользовательская функция подсчитывает и находит сумму ячеек по цвету заливки на всех листах рабочей книги. Итак, вот ее код:
Function WbkCountCellsByColor(cellRefColor As Range)
Dim vWbkRes
Dim wshCurrent As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
vWbkRes = 0
For Each wshCurrent In Worksheets
wshCurrent.Activate
vWbkRes = vWbkRes + CountCellsByColor(wshCurrent.UsedRange, cellRefColor)
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
WbkCountCellsByColor = vWbkRes
End Function
Function WbkSumCellsByColor(cellRefColor As Range)
Dim vWbkRes
Dim wshCurrent As Worksheet
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
vWbkRes = 0
For Each wshCurrent In Worksheets
wshCurrent.Activate
vWbkRes = vWbkRes + SumCellsByColor(wshCurrent.UsedRange, cellRefColor)
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
WbkSumCellsByColor = vWbkRes
End Function
Вы используете этот макрос так же, как и предыдущий код, и выводите количество и сумму цветных ячеек с помощью следующих формул =WbkCountCellsByColor() и =WbkSumCellsByColor() соответственно.
Единственный аргумент, который нужен этим функциям, это адрес ячейки с нужным цветом.
Просто введите любую из этих формул в любую пустую ячейку на любом листе без указания диапазона, используйте в скобках адрес ячейки нужного цвета, например
=WbkSumCellsByColor(A1)
Формула отобразит сумму всех ячеек, закрашенных тем же цветом, на всех листах в вашей рабочей книге.
Пользовательские функции для получения цвета ячейки, цвета шрифта и цветового кода
Здесь вы найдете перечень всех функций, которые мы использовали ранее, а также несколько новых, которые извлекают цветовые коды.
Зачем они нам? Но ведь если ваша таблица окрашена не совсем стандартными цветами (например, светло-зеленым), то подобрать образец цвета для функций, которые мы рассматривали выше, будет весьма затруднительно. Если же у вас будет код нужного цвета, вы сможете использовать его при форматировании ячейки-образца, чтобы получить точное соответствие цвета.
Если вы вдруг забыли, как можно вручную раскрасить ячейку в нужный цвет, то напомню. Жмем Ctrl+1
, затем Заливка – Другие цвета – Спектр – RGB формат. Вот туда и вставляем полученный код. Точное соответствие цвета будет обеспечено.
Примечание. Помните, что все эти формулы будут работать только в том случае, если вы добавили пользовательскую функцию в книгу Excel, как показано ранее в этой статье.
Функции для подсчета по цвету:
- CountCellsByColor(диапазон; код цвета) – считает ячейки с заданным цветом фона.
В приведенном выше примере мы использовали следующую формулу для подсчета ячеек по цвету
= CountCellsByColor (F2: F14, A17)
где F2: F14 — выбранный диапазон, а A17 — ячейка с нужным цветом фона. Вы можете использовать все остальные формулы, перечисленные ниже, аналогичным образом.
- CountCellsByFontColor(диапазон; код цвета) – подсчитывает ячейки с указанным цветом шрифта.
Формулы для суммирования по цветам:
- SumCellsByColor(диапазон; код цвета) – вычисляет сумму ячеек с определенным цветом фона.
- SumCellsByFontColor(диапазон; код цвета) – вычисляет сумму ячеек с определенным цветом шрифта.
Функции для получения кода цвета ячейки:
- GetCellFontColor(ячейка) – возвращает цветовой код цвета шрифта указанной ячейки.
- GetCellColor(ячейка) – возвращает цветовой код цвета фона указанной ячейки.
Вот примеры использования функции цвета ячейки:
А на этим скриншоте мы получаем цветовой RGB код шрифта.
Как считать по цвету и суммировать ячейки, окрашенные с использованием условного форматирования
Если вы применили условное форматирование к ячейкам на основе их значений и теперь хотите посчитать эти ячейки по цвету или просуммировать значения в закрашенных ячейках, то у меня плохие новости — не существует универсальной определяемой пользователем функции, которая бы суммировала по цвету или пересчитала закрашенные условным форматированием ячейки и вывела бы полученные числа прямо в указанные клетки таблицы. По крайней мере мне о такой функции не известно, увы
Конечно, вы можете найти в Интернете тонны кода VBA, который пытается это сделать, но все эти коды (по крайней мере, примеры, с которыми я сталкивался), не обрабатывают условное форматирование, такое как «Форматировать все ячейки на основе их значений», «Форматировать только наибольшие или наименьшие значения», «Форматировать только значения выше или ниже среднего», «Форматировать только уникальные или повторяющиеся значения». Кроме того, почти все эти коды VBA имеют ряд особенностей и ограничений, из-за которых они могут работать некорректно с определенными книгами или типами данных. В общем, вы можете испытать удачу и поискать в Google идеальное решение, и если вы его найдете, пожалуйста, вернитесь и опубликуйте свое открытие здесь!
Но если пользовательская функция не может выполнить эту задачу, то макрос VBA вполне может справиться. О различиях пользовательских функций и макросов VBA вы можете более подробно прочитать в этой статье.
Приведенный ниже макрос VBA преодолевает вышеупомянутые ограничения и работает в электронных таблицах Microsoft Excel со всеми типами условного форматирования. Он отображает количество выделенных определенным цветом ячеек и сумму значений в этих ячейках, независимо от того, какой тип условного форматирования используется на листе.
Sub SumCountByConditionalFormat()
Dim indRefColor As Long
Dim cellCurrent As Object
Dim cntRes As Long
Dim sumRes
Dim cntCells As Long
Dim indCurCell As Long
cntRes = 0
sumRes = 0
Set cellCurrent = Selection
adr = Mid(cellCurrent.Address, InStr(cellCurrent.Address, ",") + 1, 20)
adr1 = Left(adr, 4)
adr2 = Left(cellCurrent.Address, InStr(cellCurrent.Address, ",") - 1)
Range(adr2).Activate
indRefColor = ActiveCell.DisplayFormat.Interior.Color
Range(adr).Activate
cntCells = Selection.CountLarge
Range(adr).Select
Range(adr).Activate
Set cellCurrent = Selection
For indCurCell = 1 To (cntCells - 1)
If indRefColor = cellCurrent(indCurCell).DisplayFormat.Interior.Color Then
cntRes = cntRes + 1
sumRes = WorksheetFunction.Sum(cellCurrent(indCurCell), sumRes)
End If
Next
MsgBox "Count=" & cntRes & vbCrLf & "Sum= " & sumRes & vbCrLf & vbCrLf & _
"Color=" & Left("000000", 6 - Len(Hex(indRefColor))) & _
Hex(indRefColor) & vbCrLf, , "Count & Sum by Conditional Format color"
End Sub
Как использовать этот макрос для подсчета цветных ячеек и суммирования их значений.
Опишем процесс пошагово:
- Добавьте приведенный выше код на лист, как описано в первом параграфе статьи .
- Выберите ячейку с нужным цветом.
- Нажмите и удерживайте
Ctrl
. - Выберите диапазон, в котором вы хотите подсчитать цветные ячейки и/или суммировать по цвету, если у вас есть числовые данные.
- Отпустите клавишу
Ctrl
. - НажНажмите комбинацию
Alt+F8
, чтобы открыть список макросов в вашей книге. - Выберите макрос SumCountByConditionalFormat и нажмите «Выполнить» .
Покажем эти действия на скриншотах. Используем пример данных, с которыми мы уже работали в первых параграфах этой статьи. Только теперь они окрашены в столбце В при помощи условного форматирования.
Сначала выбираем ячейку D5, поскольку хотим подсчитать ячейки красного цвета с просроченными заказами.
Затем дополнительно, удерживая Ctrl
, выделяем диапазон ячеек в столбце D, по которым нужно выполнить подсчет ячеек определенного цвета.
Выполняем макрос, как показано на скриншоте ниже.
В результате вы увидите следующее сообщение с результатами:
Для этого примера мы выбрали столбец «Количество» и получили следующие цифры:
- Count — это количество ячеек определенного цвета, красного в нашем случае, который отмечает ячейки «Просрочен».
- Sum — это сумма значений всех красных ячеек в выбранной колонке, т.е. общее количество «Просроченных» заказов.
- Color — это шестнадцатеричный код цвета выбранной ячейки, в нашем случае D5.
Таким образом мы можем посчитать сумму и количество по цвету ячеек с условным форматированием.
Самый быстрый способ подсчета и суммирования ячеек по цвету в Excel
Я могу рекомендовать вам надстройку для Excel, которая бы считала и суммировала ячейки по указанному вами цвету или по всем цветам в выбранном диапазоне.
При этом не имеет значения, как установлены эти цвета – прямым форматированием ячейки либо при помощи условного форматирования.
Позвольте представить вам наш совершенно новый инструмент — «Счет и сумма по цвету» для Excel. Он имеет два варианта подсчета — «Один цвет» и «Все цвета», как видно на скриншоте ниже.
Подсчет и суммирование по одному цвету.
Вы нажимаете кнопку « Один цвет » на ленте, и в левой части рабочего листа открывается панель « Подсчет и сумма по цвету» . На панели вы выбираете:
- Диапазон, в котором вы хотите подсчитать и суммировать ячейки
- Любую ячейку с нужным цветом как образец
- Вариант — цвет фона или шрифта
После этого нажмите « Рассчитать » и сразу же увидите результат в нижней части панели! Помимо подсчета и суммы, надстройка вычисляет среднее значение и находит максимальное и минимальное значения. Никаких макросов, никаких формул, никакой боли
Обратите внимание, что подсчет возможен как по цвету фона, так и по цвету шрифта.
Подсчет и суммирование ячеек по всем цветам в выбранном диапазоне
Опция «Все цвета» работает в основном так же, за исключением того, что вам не нужно выбирать цвет. В разделе «Result for ..» вы можете выбрать любой из параметров: Количество, Сумма, Среднее, Максимальное или Минимальное значение и другие.
Если вы хотите скопировать результаты на свой рабочий лист, нажмите кнопку «Paste All…» в нижней части панели .
В настоящее время надстройка доступна как часть Ultimate Suite for Excel . Это коллекция отличных инструментов, специально разработанных для решения самых утомительных, кропотливых и подверженных ошибкам задач в Excel.
В дополнение к надстройке «Подсчет и суммирование по цвету», Ultimate Suite включает более 70 инструментов, которые помогут вам объединить данные из разных листов, удалить дубликаты, сравнить листы на совпадения и различия и многое другое.
Надеюсь, теперь сумма по цвету и подсчет ячеек по цвету для вас не будут сложными. Если же будут вопросы – не стесняйтесь задавать их в комментариях.
Из этой статьи Вы узнаете, как в Excel посчитать количество и сумму ячеек определенного цвета. Этот способ работает как для ячеек, раскрашенных вручную, так и для ячеек с правилами условного форматирования. Кроме того, Вы научитесь настраивать фильтр по нескольким цветам в Excel 2010 и 2013.
Если Вы активно используете разнообразные заливки и цвет шрифта на листах Excel, чтобы выделять различные типы ячеек или значений, то, скорее всего, захотите узнать, сколько ячеек выделено определённым цветом. Если же в ячейках хранятся числа, то, вероятно, Вы захотите вычислить сумму всех ячеек с одинаковой заливкой, например, сумму всех красных ячеек.
Как известно, Microsoft Excel предоставляет набор функций для различных целей, и логично предположить, что существуют формулы для подсчёта ячеек по цвету. Но, к сожалению, не существует формулы, которая позволила бы на обычном листе Excel суммировать или считать по цвету.
Если не использовать сторонние надстройки, существует только одно решение – создать пользовательскую функцию (UDF). Если Вы мало знаете об этой технологии или вообще никогда не слышали этого термина, не пугайтесь, Вам не придётся писать код самостоятельно. Здесь Вы найдёте отличный готовый код (написанный нашим гуру Excel), и всё, что Вам потребуется сделать – это скопировать его и вставить в свою рабочую книгу.
- Считаем и суммируем по цвету, когда ячейки раскрашены вручную
- Считаем сумму и количество ячеек по цвету во всей книге
- Считаем и суммируем по цвету, когда к ячейкам применены правила условного форматирования
Содержание
- Как считать и суммировать по цвету на листе Excel
- Считаем сумму и количество ячеек по цвету во всей книге
- Пользовательские функции для определения кодов цвета заливки ячеек и цвета шрифта
- Функции, которые считают количество по цвету:
- Функции, которые суммируют значения по цвету ячейки:
- Функции, которые возвращают код цвета:
- Как посчитать количество и сумму ячеек по цвету, раскрашенных при помощи условного форматирования
- Как использовать код, чтобы посчитать количество цветных ячеек и просуммировать их значения
- Рабочая книга с примерами для скачивания
Как считать и суммировать по цвету на листе Excel
Предположим, у Вас есть таблица заказов компании, в которой ячейки в столбце Delivery раскрашены в зависимости от их значений: Due in X Days – оранжевые, Delivered – зелёные, Past Due – красные.
Теперь мы хотим автоматически сосчитать количество ячеек по их цвету, то есть сосчитать количество красных, зелёных и оранжевых ячеек на листе. Как я уже сказал выше, прямого решения этой задачи не существует. Но, к счастью, в нашей команде есть очень умелые и знающие Excel гуру, и один из них написал безупречный код для Excel 2010 и 2013. Итак, выполните 5 простых шагов, описанных далее, и через несколько минут Вы узнаете количество и сумму ячеек нужного цвета.
- Откройте книгу Excel и нажмите Alt+F11, чтобы запустить редактор Visual Basic for Applications (VBA).
- Правой кнопкой мыши кликните по имени Вашей рабочей книги в области Project – VBAProject, которая находится в левой части экрана, далее в появившемся контекстном меню нажмите Insert > Module.
- Вставьте на свой лист вот такой код:
Function GetCellColor(xlRange As Range) Dim indRow, indColumn As Long Dim arResults() Application.Volatile If xlRange Is Nothing Then Set xlRange = Application.ThisCell End If If xlRange.Count > 1 Then ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count) For indRow = 1 To xlRange.Rows.Count For indColumn = 1 To xlRange.Columns.Count arResults(indRow, indColumn) = xlRange(indRow, indColumn).Interior.Color Next Next GetCellColor = arResults Else GetCellColor = xlRange.Interior.Color End If End Function Function GetCellFontColor(xlRange As Range) Dim indRow, indColumn As Long Dim arResults() Application.Volatile If xlRange Is Nothing Then Set xlRange = Application.ThisCell End If If xlRange.Count > 1 Then ReDim arResults(1 To xlRange.Rows.Count, 1 To xlRange.Columns.Count) For indRow = 1 To xlRange.Rows.Count For indColumn = 1 To xlRange.Columns.Count arResults(indRow, indColumn) = xlRange(indRow, indColumn).Font.Color Next Next GetCellFontColor = arResults Else GetCellFontColor = xlRange.Font.Color End If End Function Function CountCellsByColor(rData As Range, cellRefColor As Range) As Long Dim indRefColor As Long Dim cellCurrent As Range Dim cntRes As Long Application.Volatile cntRes = 0 indRefColor = cellRefColor.Cells(1, 1).Interior.Color For Each cellCurrent In rData If indRefColor = cellCurrent.Interior.Color Then cntRes = cntRes + 1 End If Next cellCurrent CountCellsByColor = cntRes End Function Function SumCellsByColor(rData As Range, cellRefColor As Range) Dim indRefColor As Long Dim cellCurrent As Range Dim sumRes Application.Volatile sumRes = 0 indRefColor = cellRefColor.Cells(1, 1).Interior.Color For Each cellCurrent In rData If indRefColor = cellCurrent.Interior.Color Then sumRes = WorksheetFunction.Sum(cellCurrent, sumRes) End If Next cellCurrent SumCellsByColor = sumRes End Function Function CountCellsByFontColor(rData As Range, cellRefColor As Range) As Long Dim indRefColor As Long Dim cellCurrent As Range Dim cntRes As Long Application.Volatile cntRes = 0 indRefColor = cellRefColor.Cells(1, 1).Font.Color For Each cellCurrent In rData If indRefColor = cellCurrent.Font.Color Then cntRes = cntRes + 1 End If Next cellCurrent CountCellsByFontColor = cntRes End Function Function SumCellsByFontColor(rData As Range, cellRefColor As Range) Dim indRefColor As Long Dim cellCurrent As Range Dim sumRes Application.Volatile sumRes = 0 indRefColor = cellRefColor.Cells(1, 1).Font.Color For Each cellCurrent In rData If indRefColor = cellCurrent.Font.Color Then sumRes = WorksheetFunction.Sum(cellCurrent, sumRes) End If Next cellCurrent SumCellsByFontColor = sumRes End Function
- Сохраните рабочую книгу Excel в формате .xlsm (Книга Excel с поддержкой макросов).Если Вы не слишком уверенно чувствуете себя с VBA, то посмотрите подробную пошаговую инструкцию и массу полезных советов в учебнике Как вставить и запустить код VBA в Excel.
- Когда все закулисные действия будут выполнены, выберите ячейки, в которые нужно вставить результат, и введите в них функцию CountCellsByColor:
CountCellsByColor(диапазон, код_цвета)
В этом примере мы используем формулу =CountCellsByColor(F2:F14,A17), где F2:F14 – это диапазон, содержащий раскрашенные ячейки, которые Вы хотите посчитать. Ячейка A17 – содержит определённый цвет заливки, в нашем случае красный.
Точно таким же образом Вы записываете формулу для других цветов, которые требуется посчитать в таблице (жёлтый и зелёный).
Если в раскрашенных ячейках содержатся численные данные (например, столбец Qty. в нашей таблице), Вы можете суммировать значения на основе выбранного цвета ячейки, используя аналогичную функцию SumCellsByColor:
SumCellsByColor(диапазон, код_цвета)
Как показано на снимке экрана ниже, мы использовали формулу:
=SumCellsByColor(D2:D14,A17)
где D2:D14 – диапазон, A17 – ячейка с образцом цвета.
Таким же образом Вы можете посчитать и просуммировать ячейки по цвету шрифта при помощи функций CountCellsByFontColor и SumCellsByFontColor соответственно.
Замечание: Если после применения выше описанного кода VBA Вам вдруг потребуется раскрасить ещё несколько ячеек вручную, сумма и количество ячеек не будут пересчитаны автоматически после этих изменений. Не ругайте нас, это не погрешности кода 🙂
На самом деле, это нормальное поведение макросов в Excel, скриптов VBA и пользовательских функций (UDF). Дело в том, что все подобные функции вызываются только изменением данных на листе, но Excel не расценивает изменение цвета шрифта или заливки ячейки как изменение данных. Поэтому, после изменения цвета ячеек вручную, просто поставьте курсор на любую ячейку и кликните F2, а затем Enter, сумма и количество после этого обновятся. Так нужно сделать, работая с любым макросом, который Вы найдёте далее в этой статье.
Считаем сумму и количество ячеек по цвету во всей книге
Представленный ниже скрипт Visual Basic был написан в ответ на один из комментариев читателей (также нашим гуру Excel) и выполняет именно те действия, которые упомянул автор комментария, а именно считает количество и сумму ячеек определённого цвета на всех листах данной книги. Итак, вот этот код:
Function WbkCountCellsByColor(cellRefColor As Range) Dim vWbkRes Dim wshCurrent As Worksheet Application.ScreenUpdating = False Application.Calculation = xlCalculationManual vWbkRes = 0 For Each wshCurrent In Worksheets wshCurrent.Activate vWbkRes = vWbkRes + CountCellsByColor(wshCurrent.UsedRange, cellRefColor) Next Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic WbkCountCellsByColor = vWbkRes End Function Function WbkSumCellsByColor(cellRefColor As Range) Dim vWbkRes Dim wshCurrent As Worksheet Application.ScreenUpdating = False Application.Calculation = xlCalculationManual vWbkRes = 0 For Each wshCurrent In Worksheets wshCurrent.Activate vWbkRes = vWbkRes + SumCellsByColor(wshCurrent.UsedRange, cellRefColor) Next Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic WbkSumCellsByColor = vWbkRes End Function
Добавьте этот макрос точно также, как и предыдущий код. Чтобы получить количество и сумму цветных ячеек используйте вот такие формулы:
=WbkCountCellsByColor()
=WbkSumCellsByColor()
Просто введите одну из этих формул в любую пустую ячейку на любом листе Excel. Диапазон указывать не нужно, но необходимо в скобках указать любую ячейку с заливкой нужного цвета, например, =WbkSumCellsByColor(A1), и формула вернет сумму всех ячеек в книге, окрашенных в этот же цвет.
Пользовательские функции для определения кодов цвета заливки ячеек и цвета шрифта
Здесь Вы найдёте самые важные моменты по всем функциям, использованным нами в этом примере, а также пару новых функций, которые определяют коды цветов.
Замечание: Пожалуйста, помните, что все эти формулы будут работать, если Вы уже добавили в свою рабочую книгу Excel пользовательскую функцию, как было показано ранее в этой статье.
Функции, которые считают количество по цвету:
CountCellsByColor(диапазон, код_цвета)
– считает ячейки с заданным цветом заливки.В примере, рассмотренном выше, мы использовали вот такую формулу для подсчёта количества ячеек по их цвету:=CountCellsByColor(F2:F14,A17)
где F2:F14 – это выбранный диапазон, A17 – это ячейка с нужным цветом заливки.
Все перечисленные далее формулы работают по такому же принципу.
CountCellsByFontColor(диапазон, код_цвета)
– считает ячейки с заданным цветом шрифта.
Функции, которые суммируют значения по цвету ячейки:
SumCellsByColor(диапазон, код_цвета)
– вычисляет сумму ячеек с заданным цветом заливки.SumCellsByFontColor(диапазон, код_цвета)
– вычисляет сумму ячеек с заданным цветом шрифта.
Функции, которые возвращают код цвета:
GetCellFontColor(ячейка)
– возвращает код цвета шрифта в выбранной ячейке.GetCellColor(ячейка)
– возвращает код цвета заливки в выбранной ячейке.
Итак, посчитать количество ячеек по их цвету и вычислить сумму значений в раскрашенных ячейках оказалось совсем не сложно, не так ли? Но что если Вы не раскрашиваете ячейки вручную, а предпочитаете использовать условное форматирование, как мы делали это в статьях Как изменить цвет заливки ячеек и Как изменить цвет заливки строки, основываясь на значении ячейки?
Как посчитать количество и сумму ячеек по цвету, раскрашенных при помощи условного форматирования
Если Вы применили условное форматирование, чтобы задать цвет заливки ячеек в зависимости от их значений, и теперь хотите посчитать количество ячеек определённого цвета или сумму значений в них, то у меня для Вас плохие новости – не существует универсальной пользовательской функции, которая будет по цвету суммировать или считать количество ячеек и выводить результат в определённые ячейки. По крайней мере, я не слышал о таких функциях, а жаль 🙁
Конечно, Вы можете найти тонны кода VBA в интернете, который пытается сделать это, но все эти коды (по крайней мере, те экземпляры, которые попадались мне) не обрабатывают правила условного форматирования, такие как:
- Format all cells based on their values (Форматировать все ячейки на основании их значений);
- Format only top or bottom ranked values (Форматировать только первые или последние значения);
- Format only values that are above or below average (Форматировать только значения, которые находятся выше или ниже среднего);
- Format only unique or duplicate values (Форматировать только уникальные или повторяющиеся значения).
Кроме того, практически все эти коды VBA имеют целый ряд особенностей и ограничений, из-за которых они могут не работать корректно с какой-то конкретной книгой или типами данных. Так или иначе, Вы можете попытать счастье и google в поисках идеального решения, и если Вам удастся найти его, пожалуйста, возвращайтесь и опубликуйте здесь свою находку!
Код VBA, приведённый ниже, преодолевает все указанные выше ограничения и работает в таблицах Microsoft Excel 2010 и 2013, с любыми типами условного форматирования (и снова спасибо нашему гуру!). В результате он выводит количество раскрашенных ячеек и сумму значений в этих ячейках, независимо от типа условного форматирования, применённого на листе.
Sub SumCountByConditionalFormat() Dim indRefColor As Long Dim cellCurrent As Range Dim cntRes As Long Dim sumRes Dim cntCells As Long Dim indCurCell As Long cntRes = 0 sumRes = 0 cntCells = Selection.CountLarge indRefColor = ActiveCell.DisplayFormat.Interior.Color For indCurCell = 1 To (cntCells - 1) If indRefColor = Selection(indCurCell).DisplayFormat.Interior.Color Then cntRes = cntRes + 1 sumRes = WorksheetFunction.Sum(Selection(indCurCell), sumRes) End If Next MsgBox "Count=" & cntRes & vbCrLf & "Sum= " & sumRes & vbCrLf & vbCrLf & _ "Color=" & Left("000000", 6 - Len(Hex(indRefColor))) & _ Hex(indRefColor) & vbCrLf, , "Count & Sum by Conditional Format color" End Sub
Как использовать код, чтобы посчитать количество цветных ячеек и просуммировать их значения
- Добавьте код, приведённый выше, на Ваш лист, как мы делали это в первом примере.
- Выберите диапазон (или диапазоны), в которых нужно сосчитать цветные ячейки или просуммировать по цвету, если в них содержатся числовые данные.
- Нажмите и удерживайте Ctrl, кликните по одной ячейке нужного цвета, затем отпустите Ctrl.
- Нажмите Alt+F8, чтобы открыть список макросов в Вашей рабочей книге.
- Выберите макрос SumCountByConditionalFormat и нажмите Run (Выполнить).В результате Вы увидите вот такое сообщение:
Для этого примера мы выбрали столбец Qty. и получили следующие цифры:
- Count – это число ячеек искомого цвета; в нашем случае это красноватый цвет, которым выделены ячейки со значением Past Due.
- Sum – это сумма значений всех ячеек красного цвета в столбце Qty., то есть общее количество элементов с отметкой Past Due.
- Color – это шестнадцатеричный код цвета выделенной ячейки, в нашем случае D2.
Рабочая книга с примерами для скачивания
Если у Вас возникли трудности с добавлением скриптов в рабочую книгу Excel, например, ошибки компиляции, не работающие формулы и так далее, Вы можете скачать рабочую книгу Excel с примерами и с готовыми к использованию функциями CountCellsByColor и SumCellsByColor, и испытать их на своих данных.
Оцените качество статьи. Нам важно ваше мнение:
Как посчитать количество и сумму ячеек по цвету в Excel 2010 и 2013
Смотрите такжеКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>And Not bCellIsHidden(cll): Саня, Спасибо! ВотОформляйте коды тегамиКол-во волн, но добавил Application.Volatile, чтобы Пример все-таки не цвету. Прилагаемый мною строках, но по в строках «план» не считаются вДля этого примера мы или последние значения);Замечание: пересчитаны автоматически после
cntRes As Long шагов, описанных далее,Из этой статьи Вы Then как все просто) (кнопка #). На это так сказать, функция пересчитывалась хотя совсем удачный, наверное. пример очень прост, другим условиям. Смотрите — это первая, строке состояния. Получится выбрали столбецFormat only values thatПожалуйста, помните, что этих изменений. Не
Application.Volatile cntRes = и через несколько узнаете, как вSkyProLeojse первый раз исправила под результат сделана. бы по F9. Просто делается универсальная но могут же в статье «Как четвертая и восьмая так.
Qty. are above or все эти формулы ругайте нас, это 0 indRefColor = минут Вы узнаете Excel посчитать количество: Да, что-то я: А можно ещеPelenaПо поводу max.Byronel таблица, в которой возникнуть и другие в Excel сложить строки.Выделены три строки.и получили следующие below average будут работать, если не погрешности кода
- cellRefColor.Cells(1, 1).Font.Color For количество и сумму и сумму ячеек
- не подумал о вопрос? Получается, нужно: Здравствуйте. А закрашивается
- Т.е. нужно min, В приложении образец имеено заточено будет условия!
Как считать и суммировать по цвету на листе Excel
каждую вторую ячейку,В ячейке F1Быстро выделить столбец цифры:(Форматировать только значения, Вы уже добавилиНа самом деле, это Each cellCurrent In ячеек нужного цвета. определенного цвета. Этот скрытых столбцах всегда теперь вводить тоже руками или
и max значения – можно поиграть под цвет ячеекHugo строку». пишем формулу. На можно так. ВыделяемCount которые находятся выше в свою рабочую нормальное поведение макросов rData If indRefColorОткройте книгу Excel и способ работает какLeojse две ячейки-образца… Я Условным форматированием. самой длинной волны с ним. Может можно: Так я тожеSmersh закладке «Главная» в верхнюю ячейку столбца.– это число
- или ниже среднего); книгу Excel пользовательскую в Excel, скриптов = cellCurrent.Font.Color Then нажмите для ячеек, раскрашенных
- : наверно неправильно выразилсяФайл с примером за год, такKoGG подругому? сперва проверил на: добрый день. Помогите разделе «формулы» - Нажимаем на клавишу ячеек искомого цвета;Format only unique or функцию, как было
- VBA и пользовательских cntRes = cntRes
Alt+F11 вручную, так иСаня в постах выше… помог бы разобраться. я понял?: To Heidegger :Byronel Вашем файле эту разобраться. Имею таблицу «Математические» выбираем функцию F8 и ставим в нашем случае duplicate values показано ранее в функций (UDF). Дело + 1 End, чтобы запустить редактор для ячеек с, Я хотел, чтоstasprvbaneskaСознательно не вставлял: добрый день! UDF. Всё считает. (см. вложение), в «СУММЕСЛИ». В появившемся курсор в нижнюю это красноватый цвет,(Форматировать только уникальные этой статье. в том, что If Next cellCurrentVisual Basic for Applications правилами условного форматирования.SkyProесли: Добрый день! Да,: Application.Volatile, чтобы неесть 2 столбцаSmersh которой ячеки с диалоговом окне в ячейку столбца. Нажимаем которым выделены ячейки или повторяющиеся значения).CountCellsByColor(диапазон, код_цвета) все подобные функции CountCellsByFontColor = cntRes(VBA). Кроме того, Вы, Огромнейшее спасибо!нужно посчитать еще руками выделяем. ХотелосьYouGreed вводить пользователя вячейки в них: Народ, прикрепляю свой помощью условного форматирования, строке «Диапазон» указываем левую мышку. со значениемКроме того, практически все– считает ячейки вызываются только изменением End Function FunctionПравой кнопкой мыши кликните научитесь настраивать фильтрВоспользовался кодом один цвет, то бы, конечно, настроить, Почти. заблуждение: да при закрашены 4 цветами файл. Посмотрите,плиз, что при вводе определенного диапазон (столбец), вИли нажимаем сочетаниеPast Due эти коды VBA с заданным цветом данных на листе, SumCellsByFontColor(rData As Range, по имени Вашей по нескольким цветамSkyPro дополнительно указать еще условное форматирование, ноНе обязательно самой изменении значений в (причем, некоторые из я делаю не значения, окрашиваются в котором написано слово клавиш «Ctrl» +. имеют целый ряд заливки.В примере, рассмотренном но Excel не cellRefColor As Range) рабочей книги в в Excel 2010. одну ячейку-образец. Это прочитал на форумах, длиной. Если их целевых ячейках функция них нестандартны - так. Надстройки подключаю
- определенные цвета. Не «план». У нас «А». Активная ячейка,Sum особенностей и ограничений, выше, мы использовали расценивает изменение цвета Dim indRefColor As области и 2013.Теперь мне просто никак не поправить? что тогда невозможно несколько за год,
- пересчитается, но если выбирал оттенки через как описано на могу подсчитать колличетво – это столбец при этом, находится– это сумма из-за которых они
вот такую формулу
шрифта или заливки Long Dim cellCurrentProject – VBAProjectЕсли Вы активно используете интересно… А как То есть, если посчитать кол-во ячеек к примеру две не меняя значений «другие цвета») сайте (через сервис-надстройки-пакет ячеек определенного цвета, В.
в таблице. значений всех ячеек могут не работать для подсчёта количества ячейки как изменение As Range Dim
, которая находится в разнообразные заливки и надо было воспользоваться не указана вторая по цвету. волны за один поменять цвета ячеекнеобходимо посчитать количество анализа) Я Ваш к примеру «зеленого».В строке «Критерий»
О других сочетаниях
красного цвета в корректно с какой-то ячеек по их
данных. Поэтому, после
sumRes Application.Volatile sumRes левой части экрана, цвет шрифта на кодом ячейка-образец, суммируем поФайл прилагаю.
год, то нужны в целевом диапазоне ячеек определенного цвета пример скопировал в Подскажите, пожалуйста. Заранее пишем то, что клавиш, чтобы выделить столбце конкретной книгой или
цвету: изменения цвета ячеек = 0 indRefColor далее в появившемся листах Excel, чтобыСани первой._Boroda_ min и max — функция автоматическив ячейках значений строку формул и
спасибо. ищем. Мы написали ячейки, смотрите вQty. типами данных. Так=CountCellsByColor(F2:F14,A17) вручную, просто поставьте = cellRefColor.Cells(1, 1).Font.Color контекстном меню нажмите выделять различные типы?Саня: Почему в одинаковых значения за обе не пересчитается - нет, они просто нажал зеленую галочку.Hugo слово «план», п.ч. статье «Сочетание клавиш, то есть общее или иначе, Выгде курсор на любую For Each cellCurrentInsert ячеек или значений,SkyPro
Считаем сумму и количество ячеек по цвету во всей книге
: строках (например, в волны. надо вводить ее закрашеныHugo: формула из копилки считаем сумму плана. в Excel». количество элементов с можете попытать счастьеF2:F14 ячейку и кликните In rData If>
то, скорее всего,: Мой код не200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, строках 4 иYouGreed заново.насколько я понимаю,: У меня тоже=Count_CellColor(B2:H2;J2) Если бы считалиЧетвертый способ отметкой и google в– это выбранныйF2 indRefColor = cellCurrent.Font.ColorModule захотите узнать, сколько сработает, если скрыты Цвет_берется_из_ячейки As Range, 5) разная раскраска?: baneska, Просмотрите файл.Александр Смит подобную задачу надо не работает, еслиВ J2 образец сумму «выпушено», то.Past Due
поисках идеального решения, диапазон,, а затем Then sumRes =. ячеек выделено определённым столбцы.
_
Это действительно реальный
baneska: Ctrl+Alt+F9 решать посредством VBA, как критерий указывать цвета. написали бы критерийПосчитать количество строк. и если ВамA17Enter WorksheetFunction.Sum(cellCurrent, sumRes) EndВставьте на свой лист цветом. Если жеА вот кодoptional Цвет_берется_из_ячейки2 As
Пользовательские функции для определения кодов цвета заливки ячеек и цвета шрифта
пример или Вы:Heidegger некоторые варианты я ячейку с УФ.Hugo – «выпущено». можно с помощью
Color удастся найти его,– это ячейка, сумма и количество If Next cellCurrent вот такой код: в ячейках хранятся Сани в сборе Range) просто написали произвольные
Функции, которые считают количество по цвету:
YouGreed
: Да, тогда пересчитает видел в интернете, Но если указать: Если проблема найтиВ разделе «Критерий»функции «Автосумма» в Excel– это шестнадцатеричный пожалуйста, возвращайтесь и с нужным цветом
после этого обновятся. SumCellsByFontColor = sumResFunction GetCellColor(xlRange As числа, то, вероятно,200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function СУММ_ЦВЕТ(Диапазон_суммирования As Range,if not Цвет_берется_из_ячейки2is даты?, Боже, вы гений.
и без Volatile. у меня не любую залитую нужным
копилку - вот
можно писать некоторые. Выделяем ячейку, в код цвета выделенной
Функции, которые суммируют значения по цвету ячейки:
опубликуйте здесь свою
заливки. Так нужно сделать, End Function Range) Dim indRow,
Вы захотите вычислить Цвет_берется_из_ячейки As Range, nothing then
Функции, которые возвращают код цвета:
Добавлено
Спасибо вам большоеbaneska получилось цветом ячейку -
точный адрес символы. которой будет стоять
ячейки, в нашем находку!Все перечисленные далее формулы работая с любымСохраните рабочую книгу Excel indColumn As Long сумму всех ячеек _For Each cll. большое!! ))): Добрый вечер. :)помогите, пожалуйста всё работает.Smersh* (звездочка) означает цифра количества строк. случае
Как посчитать количество и сумму ячеек по цвету, раскрашенных при помощи условного форматирования
Код VBA, приведённый ниже, работают по такому макросом, который Вы в формате Dim arResults() Application.Volatile с одинаковой заливкой,Optional Цвет_берется_из_ячейки2 As In Диапазон_суммирования.CellsВсё, почему покрашенаstasprvС помощью УФKoGGGuest: Спасибо за помощь, любое количество символов Нажимаем стрелку уD2 преодолевает все указанные же принципу. найдёте далее в.xlsm If xlRange Is
например, сумму всех Range)If cll.Interior.ColorIndex = М5, понял. А: Добрый день, уважаемые я выделила цветом: Function СчетЕслиЦвет(Oblast As: а у меня но есть один в слове. Например, кнопки «Автосумма» на
- . выше ограничения иCountCellsByFontColor(диапазон, код_цвета) этой статье.(Книга Excel с
- Nothing Then Set красных ячеек.If Not Цвет_берется_из_ячейки2 Цвет_берется_из_ячейки.Interior.ColorIndex or _
- вот почему покрашена форумчане! нужные ячейки (столбец Range, Obrazec As не сработало ни нюанс. Я пользуюсь
- «мор*» — будет закладке Excel «Главная»Если у Вас возникли работает в таблицах
– считает ячейкиПредставленный ниже скрипт Visual поддержкой макросов).Если Вы xlRange = Application.ThisCellКак известно, Microsoft Excel Is Nothing Thencll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex АА7?Подскажите, пожалуйста, как K — разница). Range) As Variant так ни так. корпоративной версией 2003 искать слова на и выбираем функцию трудности с добавлением Microsoft Excel 2010 с заданным цветом
Basic был написан не слишком уверенно End If If предоставляет набор функцийFor Each cll ThenДобавлено решить сложную техническую Теперь, для моей ‘ Считает числоВсе надстройки всключены. Excel. В списках «мор» и любое «Число». скриптов в рабочую и 2013, с
шрифта. в ответ на чувствуете себя с xlRange.Count > 1 для различных целей, In Диапазон_суммирования.Cellssumma = summa. задачу. Необходимо подсчитать задачи нужно выполнить ячеек в заданномHugo формл такой нет окончание (мор, море,Эта функция считает только книгу Excel, например, любыми типами условногоSumCellsByColor(диапазон, код_цвета) один из комментариев VBA, то посмотрите Then ReDim arResults(1 и логично предположить,If cll.Interior.ColorIndex = + cll.ValueА, не, тоже количество ячеек определенного следующее: диапазоне, цвет фона: Формулу вложил в и он ее моряк, т.д.). Чтобы заполненные строки. Если ошибки компиляции, не
Как использовать код, чтобы посчитать количество цветных ячеек и просуммировать их значения
- форматирования (и снова– вычисляет сумму читателей (также нашим подробную пошаговую инструкцию To xlRange.Rows.Count, 1
- что существуют формулы Цвет_берется_из_ячейки.Interior.ColorIndex _End If доперло. цвета, в которых1. которых совпадает с
- файл. не понимает :-( найти все фамилии есть пустые ячейки работающие формулы и спасибо нашему гуру!). ячеек с заданным
- гуру Excel) и и массу полезных To xlRange.Columns.Count) For для подсчёта ячеекAnd Not bCellIsHidden(cll)
- NextДобавлено содержится определенная дата.Посчитать количество волн, цветом фона ячейкиКроме неё - Есть какой-нибудь другой на букву «Р»
в столбце, то так далее, Вы В результате он цветом заливки. выполняет именно те
- советов в учебнике indRow = 1 по цвету. Но, Or _elseДержите формулами иМы ведем учет группы выделенных ячеек, образца. Dim Summa1
- нужны ещё две способ? и заканчивающиеся на в формуле исправляем можете скачать рабочую выводит количество раскрашенныхSumCellsByFontColor(диапазон, код_цвета) действия, которые упомянул Как вставить и To xlRange.Rows.Count For к сожалению, не
- cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndexFor Each cll условным форматированием. посещаемости занятий. Каждый с сортировкой по As Variant, c формулы, присутсвуют.
Рабочая книга с примерами для скачивания
Юрий М букву «в», нужно адрес первой ячейки книгу Excel с ячеек и сумму– вычисляет сумму автор комментария, а запустить код VBA indColumn = 1 существует формулы, которая _ In Диапазон_суммирования.CellsПривел Вашу таблицу человек должен пройти годам. As Range, ObrazecCvetHugo
: Это ведь НАДСТРОЙКА. написать критерий так
диапазона. Например, мы
примерами и с
значений в этих
office-guru.ru
Количество выделенных строк в Excel.
ячеек с заданным именно считает количество в Excel. To xlRange.Columns.Count arResults(indRow, позволила бы наAnd Not bCellIsHidden(cll)If cll.Interior.ColorIndex = к стандартному виду определенной количество курсов.Например, в 1914 году As Long ObrazecCvet
: Т.е. две функции, Подключите её и — «Р*в» (или вставили формулу функцией готовыми к использованию ячейках, независимо от цветом шрифта. и сумму ячеекКогда все закулисные действия indColumn) = xlRange(indRow,
обычном листе Excel Then Цвет_берется_из_ячейки.Interior.ColorIndex Then — сначала идет К примеру, если
их нет, а = Obrazec.Interior.Color For извиняюсь… всё заработает. «Р*В»). Найдет фамилии «Автосумма». В этой функциями типа условного форматирования,GetCellFontColor(ячейка) определённого цвета на будут выполнены, выберите indColumn).Interior.Color Next Next суммировать или считатьsumma = summasumma = summa Курс, потом Факт, человек пришел на в 1915 - Each c Insva
Guest — Рублев, Рылеев,
формуле указан диапазонCountCellsByColor применённого на листе.– возвращает код всех листах данной ячейки, в которые GetCellColor = arResults по цвету. + cll.Value + cll.Value потом Прогноз. Можно «Русский язык» 23.10.15,
одна волна (т.е. Oblast.Cells If c.Interior.Color: Меня напрягает вот: Это ведь НАДСТРОЙКА. т.д. до первой пустойиSub SumCountByConditionalFormat() Dim
цвета шрифта в книги. Итак, вот нужно вставить результат, Else GetCellColor =Если не использовать сторонние
End IfEnd If было сделать и то в ячейку имеется в виду
= ObrazecCvet Then эта часть.
Подключите её и? (знак вопроса) ячейке столбца. =СЧЁТ(A4:A6)SumCellsByColor indRefColor As Long выбранной ячейке. этот код: и введите в xlRange.Interior.Color End If надстройки, существует толькоNextNext без этого, но напротив его фамилии последовательно выделенные, без Summa1 = Summa1По идее должно всё заработает.{/post}{/quote} обозначает один символ. Мы адрес ячейки, и испытать их Dim cellCurrent AsGetCellColor(ячейка)Function WbkCountCellsByColor(cellRefColor As них функцию End Function Function одно решение –
Else
end if формулы получатся сложнее руками ставится дата
перерывов) + 1 End быть: сервис-надстройки-обзор-находим надстройкиПодключал, вроде что-то Например, критерий «ст?л» А4 исправляем на
на своих данных.
Range Dim cntRes– возвращает код Range) Dim vWbkResCountCellsByColor GetCellFontColor(xlRange As Range) создать пользовательскую функциюFor Each cll
СУММ_ЦВЕТ = summa — оно Вам
и ячейка закрашивается; If Next СчетЕслиЦвет Summ_Color-ок происходит, но в — будет искать
адрес ячейки А1.Урок подготовлен для Вас
As Long Dim цвета заливки в Dim wshCurrent As
: Dim indRow, indColumn (UDF). Если Вы In Диапазон_суммирования.CellsEnd Function надо?
в зеленый цвет,2. = Summa1 EndGuest итоге все-равно ошибка стул, стол, т.д. Получится так. командой сайта office-guru.ru
excel-office.ru
Как посчитать в Excel ячейки в определенных строках.
sumRes Dim cntCells выбранной ячейке. Worksheet Application.ScreenUpdating =CountCellsByColor(диапазон, код_цвета) As Long Dim мало знаете обIf cll.Interior.ColorIndex =оба варианта рабочие:stasprv если нет -Посчитать продолжительность этих
Function Function СумЕслиЦвет(Oblast: Отлично!!! Все вроде
#Имя Можно написать несколькоПятый способ.Источник: https://www.ablebits.com/office-addins-blog/2013/12/12/count-sort-by-color-excel/ As Long Dim
Итак, посчитать количество ячеек False Application.Calculation =В этом примере мы arResults() Application.Volatile If этой технологии или Цвет_берется_из_ячейки.Interior.ColorIndex _Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММ_ЦВЕТ(F8:F1317;F348): _Boroda_, спасибо Вам красный. Каждый 3 волн с сортировкой As Range, Obrazec работает спасибо!!!R Dmitry
вопросительных знаков. Например,Посчитать, если выделено цветомПеревел: Антон Андронов indCurCell As Long по их цвету xlCalculationManual vWbkRes = используем формулу xlRange Is Nothing вообще никогда не
And Not bCellIsHidden(cll)Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММ_ЦВЕТ(F8:F1317;F348;F349) большое. Отличное решение!
месяца необходимо проводить по годам. As Range) AsP.S. А не: А зачем вообще «Иван?????» (Иванов, Иванченко, – формула ExcelАвтор: Антон Андронов cntRes = 0 и вычислить сумму 0 For Each=CountCellsByColor(F2:F14,A17) Then Set xlRange слышали этого термина, ThenLeojseLeojse
«чистки рядов» иНапример, в 1915 году Variant ‘ Суммирует подскажешь как вкладывать цвета считать, если т.д.).Говорят, что нет sumRes = 0
значений в раскрашенных wshCurrent In Worksheets, где = Application.ThisCell End не пугайтесь, Вам
summa = summa: Саня, Спасибо еще: Добрый вечер. отчислять тех, кто — волна продолжалась заданный диапазон ячеек фукнции в файл, вы используете уф,О других символах,
Можно написать такую специальной функции без
cntCells = Selection.CountLarge
ячейках оказалось совсем wshCurrent.Activate vWbkRes =
F2:F14 If If xlRange.Count не придётся писать + cll.Value
раз, как разЕсть такая функция, не ходит, потому
13 дней, а при условии, что в частности Count_CellColor? можно и условия которые можно вставить формулу. =СЧЁТ(A1:A6) Эта
макросов indRefColor = ActiveCell.DisplayFormat.Interior.Color не сложно, не vWbkRes + CountCellsByColor(wshCurrent.UsedRange,– это диапазон, > 1 Then код самостоятельно. ЗдесьEnd If то, чо нужно! которая подсчитывает сумму необходимо посчитать сколько в в 1917 RGB цвет фона
Smersh
посчитать
в формулу, читайте формула считает толькопосчитать количество выделенных строк For indCurCell = так ли? Но cellRefColor) Next Application.ScreenUpdating
содержащий раскрашенные ячейки, ReDim arResults(1 To Вы найдёте отличныйNextLeojse значений залитых ячеек в том или — 10 дней
excel-office.ru
Подсчет количества ячеек определенного цвета
слагаемого совпадает с: С функциями разобралсянапример так в статье «Символы ячейки с числами, в Excel 1 To (cntCells что если Вы = True Application.Calculation которые Вы хотите xlRange.Rows.Count, 1 To готовый код (написанныйEnd If: Добрый день.
по ячейке-образцу: ином временном интервале
;
цветом фона ячейки ;-)) А возможно
Guest в формулах Excel». а с текстом. Неправда. Есть много
— 1) If не раскрашиваете ячейки = xlCalculationAutomatic WbkCountCellsByColor посчитать. Ячейка xlRange.Columns.Count) For indRow нашим гуру Excel),СУММ_ЦВЕТ = summaПодскажите, а возможно200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, посетил и пропустил3.
образца. Dim Summa1 ли сделать, так,: Есть ли УФВ строке «Диапазон_суммирования»
– не считает. других приемов, чтобы indRefColor = Selection(indCurCell).DisplayFormat.Interior.Color вручную, а предпочитаете
= vWbkRes EndA17 = 1 To и всё, что
End Function ли, чтобы функция Цвет_берется_из_ячейки As Range) занятий. Например, сколькоАмплитуду волн. Т.е. As Variant, c
что если в
на листе? Если указываем диапазон (столбец),Шестой способ. посчитать выделенные строки, Then cntRes =
использовать условное форматирование, Function Function WbkSumCellsByColor(cellRefColor– содержит определённый
xlRange.Rows.Count For indColumn Вам потребуется сделатьFunction bCellIsHidden(rngCell As суммировала только видимыеFor Each cll занятий посетил Иван min и max As Range, ObrazecCvet ячейке образце менять есть — какие в котором находятсяЧтобы посчитать ячейки
ячейки Excel. Было cntRes + 1 как мы делали As Range) Dim цвет заливки, в = 1 To
– это скопировать Range) As Boolean ячейки? In Диапазон_суммирования.Cells петров с октября температуры. As Long ObrazecCvet
цвет, то формулы применены условия?{/post}{/quote}
числа, то, что (строки) по определенному бы желание, а
sumRes = WorksheetFunction.Sum(Selection(indCurCell), это в статьях vWbkRes Dim wshCurrent нашем случае красный. xlRange.Columns.Count arResults(indRow, indColumn) его и вставитьbCellIsHidden = rngCell.EntireRow.HiddenSkyPro
If cll.Interior.ColorIndex = по декабрь.
Например, в 1915 году = Obrazec.Interior.Color For бы автоматически пересчитывалась?В первом сообщении нам нужно сложить. условию, используем функцию способы найдем. ))) sumRes) End If
Как изменить цвет As Worksheet Application.ScreenUpdatingТочно таким же образом = xlRange(indRow, indColumn).Font.Color в свою рабочую
Or _: Цвет_берется_из_ячейки.Interior.ColorIndex ThenОбыскал весь интернет, — min 1.348, Each c In Заранее спасибо!!! прикреплен пример файла. У нас - «СЧЁТЕСЛИ». Примеры формулОдин из способов
Next MsgBox «Count=» заливки ячеек и = False Application.Calculation Вы записываете формулу Next Next GetCellFontColor книгу.rngCell.EntireColumn.Hidden200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function СУММ_ЦВЕТ(Диапазон_суммирования As Range,summa = summa
похоже, стандартными средствами max 7.248 Oblast.Cells If c.Interior.ColorSmersh
Условия УФ следующие:
это столбец С. смотрите в статьеузнать количество выделенных
& cntRes & Как изменить цвет = xlCalculationManual vWbkRes
для других цветов, = arResults ElseСчитаем и суммируем по
End Function Цвет_берется_из_ячейки As Range, + cll.Value
задачу не решить.. = ObrazecCvet Then
: Ребят, подскажите, естьЕсть 7 критериев Диалоговое окно заполнили
«Функция «СЧЁТЕСЛИ» в строк – это vbCrLf & «Sum= заливки строки, основываясь
= 0 For которые требуется посчитать GetCellFontColor = xlRange.Font.Color цвету, когда ячейкиLeojse _End IfНашел такой скрипт,У самой, к
Summa1 = Summa1 такая возможность или оценки людей и так. Нажимаем «ОК».
Excel» здесь. настроить порядковые номера
» & sumRes
на значении ячейки?
Each wshCurrent In
в таблице (жёлтый
End If End раскрашены вручную: Просто ради интересаOptional Цвет_берется_из_ячейки2 As
Next он суммирует по сожалению, мозгов не + c.Value End нет? каждому критерию соответвуютПолучилась такая формула.Седьмой способ строк после фильтра. & vbCrLf &Если Вы применили условное Worksheets wshCurrent.Activate vWbkRes и зелёный). Function Function CountCellsByColor(rDataСчитаем сумму и количество попробовал код Сани, Range)СУММ_ЦВЕТ = summa цвету, а как
хватает разобраться с If Next СумЕслиЦветТолькоУчусь
определенные баллы (от =СУММЕСЛИ(B2:B10;»план»;C2:C10). Смотрите об этом vbCrLf & _
форматирование, чтобы задать = vWbkRes +Если в раскрашенных ячейках As Range, cellRefColor ячеек по цвету который в сборе)If Not Цвет_берется_из_ячейки2End Function сюда добавить выбор этим. Помогите, пожалуйста, = Summa1 End
planetaexcel.ru
Посчитать количество цветных ячеек
: Кажется так. 1 до 10).
Формула посчитала.
Посчитать строки, выделенные условным способе статью «Порядковый «Color=» & Left(«000000», цвет заливки ячеек SumCellsByColor(wshCurrent.UsedRange, cellRefColor) Next содержатся численные данные
As Range) As во всей книге
Выдает ошибку на Is Nothing ThenФормула — =СУММ_ЦВЕТ(F8:F1317;F348),
по дате (мясяцу)? кто чем может. Function———————— При установке определенныхВ ячейке F2 пишем форматированием
номер строк по
6 — Len(Hex(indRefColor))) в зависимости от Application.ScreenUpdating = True (например, столбец Long Dim indRefColorСчитаем и суммируем по первой строчкеFor Each cll где F8:F1317 - А еще лучшеЗаранее, большое спасибо.Byronel’Ваш код чисел ячейки окрашиваются такую формулу. =СУММЕСЛИ(B2:B10;»выпущено»;C2:C10)или порядку после фильтра & _ Hex(indRefColor) их значений, и Application.Calculation = xlCalculationAutomaticQty. As Long Dim цвету, когда к200?’200px’:»+(this.scrollHeight+5)+’px’);»>And Not bCellIsHidden(cll) Or In Диапазон_суммирования.Cells суммируемый диапазон, F348 временному интервалу )): сразу предупреждаю, сApplication.Calculate = True в три цветаЕщё примеры счетаокрашены цветом вручную в в Excel» & vbCrLf, , теперь хотите посчитать WbkSumCellsByColor = vWbkResв нашей таблице), cellCurrent As Range ячейкам применены правила _If cll.Interior.ColorIndex = — ячейка-образец
200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function КолЦвет(диапазон As Range,YouGreed VBA работал давно
———————— (красный — негатив, с условием смотрите ExcelВторой способ «Count & Sum
количество ячеек определённого
End Function
Вы можете суммировать Dim cntRes As условного форматирования, выделяя при Цвет_берется_из_ячейки.Interior.ColorIndex And cll.EntireRow.Hidden
Подскажите, а можно критерий As Range): baneska, Так-с, предлагаем.создал модуль, забилSmersh желтый — что-то
в статье «Функция.– by Conditional Format цвета или суммуДобавьте этот макрос точно
значения на основе Long Application.Volatile cntResПредположим, у Вас есть этом cll. Ошибка = False Or ли как-то подредактировать
As Double200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТЕСЛИМН($A$2:$A$1178;$K4;$H$2:$H$1178;5) туда этот код: Ясно. Спасибо всем среднее, зеленый - «СУММЕСЛИ» в Excel».
Можно применить фильтрпосчитать количество выделенных ячеек color» End Sub значений в них,
также, как и выбранного цвета ячейки,
= 0 indRefColor таблица заказов компании, — Compile error: _ функцию, чтобы сумма’ Определяет числоНужно уточнение, счет и сохранил, выбрал огромное за помощь все отлично).Теперь нам нужно по цвету. в столбце ExcelДобавьте код, приведённый выше,
то у меня предыдущий код. Чтобы
используя аналогичную функцию = cellRefColor.Cells(1, 1).Interior.Color в которой ячейки
CyberForum.ru
Посчитать количество выделенных цветом ячеек. (Формулы/Formulas)
ByRef argument typecll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex
подсчитывалась по двум ячеек «диапазона», максимальной продолжительности волны имя модуля «test» и участие :-)На вопрос Rпосчитать проценты в Excel
Затем выделить ячейки и. на Ваш лист, для Вас плохие получить количество иSumCellsByColor For Each cellCurrent в столбце mismatch. Так что _ ячейкам-образцам (мне нужно’ цвет которых или сумма всех
и в концеSmersh Dmitry отвечаю. Ваш. посмотреть количество вВыделяем ячейки в как мы делали новости – не сумму цветных ячеек:
In rData IfDelivery пользуюсь Вашим кодом,And cll.EntireRow.Hidden = получить сумму значений совпадает с цветом волн? добавилось 2 строки
: Народ, нужна еще способ вроде подходит,В ячейку F3 строке состояния. столбце и смотрим
это в первом существует универсальной пользовательской
используйте вот такиеSumCellsByColor(диапазон, код_цвета)
indRefColor = cellCurrent.Interior.Color
раскрашены в зависимостиSkyPro False Then по двум цветам)?
в ячейке «критерий»
Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=МИН(ЕСЛИ(($A$2:$A$1178=$K4)*($H$2:$H$1178=5)*$G$2:$G$1178>0;$G$2:$G$1178))»Sub test()
Ваша помощь. В но подсчет кол-ва
напишем формулу, которая
Здесь ячейки выделены условным
внизу листа Excel примере.
функции, которая будет формулы:
Как показано на снимке Then cntRes =
от их значений:
, но и
summa = summa
То есть, еслиApplication.Volatile TrueФормула массива, вводитсяEnd Sub» примере в ячейках
ячеек — проще посчитает средний процент форматированием. Отфильтровали по в строке состояния
Выберите диапазон (или диапазоны), по цвету суммировать=WbkCountCellsByColor()
экрана ниже, мы cntRes + 1Due in X Days
Сане + cll.Value при вводе второйDim i As Ctrl+Shift+Enter.забил внутрь текст
B,C,D 17 УФД, :-) выполнения плана по цвету. В строке цифру «Количество». Это в которых нужно или считать количество=WbkSumCellsByColor() использовали формулу: End If Next– оранжевые,огромное спасибо)End If
ячейки-образца, то считался Range
Наименьшее значение в функций — пишется привязанное к цифрам.R Dmitry фирме. Здесь пригодится состояния написано, что
excelworld.ru
Подсчет количества ячеек по цвету и дате (Макросы/Sub)
число заполненных выделенных сосчитать цветные ячейки ячеек и выводить
Просто введите одну из=SumCellsByColor(D2:D14,A17) cellCurrent CountCellsByColor =DeliveredСаняNext
бы и второйFor Each i волне. компайл ерор, ожидается Хотелось бы сделать: На вопрос R функция Excel «СРЗНАЧЕСЛИ». выделено 3 строки ячеек. Пустые ячейки или просуммировать по результат в определённые этих формул вгде cntRes End Function– зелёные,: И Вам огромноеElse цвет. In диапазонКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>=МАКС(($A$2:$A$1178=$K4)*($H$2:$H$1178=5)*$G$2:$G$1178) End Sub, в 3-е условие, что Dmitry отвечаю. ВашВ ячейке устанавливаем (ячейки). так Excel не
цвету, если в ячейки. По крайней любую пустую ячейку
D2:D14 Function SumCellsByColor(rData AsPast Due спасибо, заходите еще…For Each cllСаняIf i.Interior.Color =
Формула массива. чем ошибка? если хоть одна
способ вроде подходит, формат «процентный». На
Как преобразовать формат считает. Но, если них содержатся числовые
мере, я не
на любом листе– диапазон,
Range, cellRefColor As– красные.
перед In Диапазон_суммирования.Cells
: критерий.Interior.Color Then
Максимальное значение в
и попутно вопрос
из ячеек B5:B16
но подсчет кол-ва закладке «Формулы» выбираем данных из других нужно посчитать строку, данные. слышал о таких Excel. Диапазон указыватьA17 Range) Dim indRefColor
Теперь мы хотим автоматически200?’200px’:»+(this.scrollHeight+5)+’px’);»>If Not Цвет_берется_из_ячейки2 IsIf cll.Interior.ColorIndex =200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММ_ЦВЕТ(F8:F1317;F348)+СУММ_ЦВЕТ(F8:F1317;F349)КолЦвет = КолЦвет волне.
— как узнать красного цвета, то ячеек — проще
«Другие функции» - программ в формат в которой вНажмите и удерживайте
функциях, а жаль не нужно, но
– ячейка с As Long Dim сосчитать количество ячеек Nothing Then Цвет_берется_из_ячейки.Interior.ColorIndex _шутка. + 1Осталось посчитать кол-во код цвета, насколько
ячейка B17 окрашивалась
:-) «Статистические» и, выбираем числа Excel, чтобы столбце А нетCtrlКонечно, Вы можете найти необходимо в скобках образцом цвета. cellCurrent As Range
по их цвету,Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>dim cll as
And cll.EntireRow.Hidden =Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function СУММ_ЦВЕТ(Диапазон_суммирования AsEnd If волн.
я понял именно бы тоже в
как сказать…… если функцию «СРЗНАЧЕСЛИ». Диалоговое
формулы считали такие
значений, а есть, кликните по одной
тонны кода VBA указать любую ячейкуТаким же образом Вы Dim sumRes Application.Volatile то есть сосчитать range False Then Range, Цвет_берется_из_ячейки AsNext_Boroda_
его значение нужно красный цвет. В условий немного :)),
excelworld.ru
Подсчет суммы ячеек по цвету (редактирование функции) (Макросы Sub)
окно заполняем, как числа, смотрите в
в столбце В, ячейке нужного цвета, в интернете, который с заливкой нужного
можете посчитать и sumRes = 0
количество красных, зелёныхLeojse
summa = summa Range, _
End Function: Длинная, зато быстрая
подставить в ObrazecCvet
этом файле вложены
в лбом случае
в предыдущей формуле,
статье «Преобразовать текст то выделяем ячейку затем отпустите пытается сделать это,
цвета, например, просуммировать ячейки по indRefColor = cellRefColor.Cells(1, и оранжевых ячеек: Спасибо, все работает) + cll.ValueЦвет_берется_из_ячейки2 As Range)Подскажите, пожалуйста, как200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММПРОИЗВ(—(—(ИНДЕКС(H$1:H$1178;ПОИСКПОЗ(K4;A$1:A$1178;)-1):ИНДЕКС(H$1:H$1178;ПОИСКПОЗ(K4;A$1:A$1178;)-2+СЧЁТЕСЛИ($A$1:$A$32;A$2))&ИНДЕКС(H$1:H$1178;ПОИСКПОЗ(K4;A$1:A$1178;)):ИНДЕКС(H$1:H$1178;ПОИСКПОЗ(K4;A$1:A$1178;)-1+СЧЁТЕСЛИ($A$1:$A$32;A$2)))=5))Heidegger две функции, т.к. право выбора всегда
только «критерий» пишем в число Excel». столбца В. Главное,
Ctrl
но все эти=WbkSumCellsByColor(A1) цвету шрифта при
1).Interior.Color For Each
на листе. Какbumnik
End IfFor Each cll
это можно решить?Короткая, но медленнее
: Текст функций не в моем excel
за вами
«%» — это
Как посчитать в
чтобы были выделены
.
коды (по крайней, и формула вернет помощи функций
cellCurrent In rData я уже сказал: Здравствуйте! Можно лиNext In Диапазон_суммирования.Cells VBA изучал ещеКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММПРОИЗВ(—((A$2:A$1178=K4)*(H$1:H$1177&H$2:H$1178)=5)) нужно никуда забивать можно только так.Z в нашей таблицеExcel ячейки всех нужныхНажмите мере, те экземпляры, сумму всех ячеекCountCellsByFontColor If indRefColor =
выше, прямого решения данной функцией суммироватьEnd IfIf cll.Interior.ColorIndex = в институте, а
baneska – они должны
Заранее спасибо.: "НУ,ВЫ,БЛИН, ДАЕТЕ!"(с) -
так написано. Получиласьячейки выборочно
строк. Например, так.Alt+F8
которые попадались мне) в книге, окрашенных
и cellCurrent.Interior.Color Then sumRes
этой задачи не
диапазон цифр +
СУММ_ЦВЕТ = summa
Цвет_берется_из_ячейки.Interior.ColorIndex or _ это было достаточно
: быть на верхнем
Hugo "На вопрос R
такая формула.
, не все подряд,
Здесь выделили четыре строки.
, чтобы открыть список
не обрабатывают правила
в этот же
SumCellsByFontColor
= WorksheetFunction.Sum(cellCurrent, sumRes)
существует. Но, к цифры только вотEnd Functioncll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex
давно и заYouGreed
уровне.: А если УФ Dmitry отвечаю. Ваш=СРЗНАЧЕСЛИ(B2:B10;»%»;C2:C10)
а по условию?Третий способ макросов в Вашей условного форматирования, такие цвет.
соответственно. End If Next
счастью, в нашей с таким символом
Пробуйте Then
несколько часов вспомнить, Спасибо за отклик.Нет, вторым аргументом поменять?
способ вроде подходит,Таблица посчитала так.
Если вводить формулу.
рабочей книге. как:
Здесь Вы найдёте самые
Замечание:
cellCurrent SumCellsByColor =
команде есть очень ( ' )
Саняsumma = summa
синтаксис не получается ))
функции идёт ячейка,Hugo
но подсчет кол-ва
Как посчитать наценку, скидку,
вручную в большой
Можно в таблице
Выберите макрос
Format all cells based
важные моменты поЕсли после применения sumRes End Function умелые и знающие
(например: от 1:
+ cll.Value
:(
Нет нет, max имеющая целевой цвет,
: Вернее это условие ячеек — проще умножив столбец на таблице, то это
фильтром отфильтровать нужныеSum on their values всем функциям, использованным выше описанного кода Function CountCellsByFontColor(rData As
Excel гуру, и до 12 +200?’200px’:»+(this.scrollHeight+5)+’px’);»>Function bCellIsHidden(rngCell As Range)
End IfПример как организованы это — максимальное вхождения которого ищутся с формулой нужно :-)
число, смотрите в очень долго. Нас данные. Затем выделитьCountByConditionalFormat
(Форматировать все ячейки нами в этом
VBA Вам вдруг Range, cellRefColor As один из них
1', 2', 3', As Boolean
Next данные - во
значение в период во входном диапазоне
первым поставить, затемИ чему улыбаться
статье "Как умножить выручит функция Excel
отфильтрованные ячейки ви нажмите
на основании их примере, а также
потребуется раскрасить ещё Range) As Long
написал безупречный код
4', 5', 6'
bCellIsHidden = rngCell.EntireRow.Hidden
СУММ_ЦВЕТ = summa вложении. Оставил в
определённой волны. (первый аргумент функции).
уже два других. - "=СЧЁТЕСЛИ(B2:H2;" 44325
в Excel число «СУММЕСЛИ».
столбце. В строке
Run
значений);
пару новых функций,
несколько ячеек вручную,
Dim indRefColor As для Excel 2010
и т.д.) Or _
End Function
нем только несколько
YouGreedKoGGSmershGuest
на число, проценты».У нас такая состояния будет видно(Выполнить).
Format only top or которые определяют коды сумма и количество Long Dim cellCurrent и 2013. Итак,Читайте правила форума,rngCell.EntireColumn.HiddenКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММ_ЦВЕТ(F8:F1317;F348;F349) строк, оригинал гораздо: baneska,
, прекрасный код, но: Да этот вариант,: Мне принципиально посчитать
Ещё один способ
таблица. количество строк. Помним,
В результате Вы увидите bottom ranked values
цветов. ячеек не будут
As Range Dim выполните 5 простых создавайте свою тему!End FunctionLeojse больше.200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(МАКС(($A$2:$A$1178=$K4)*($H$2:$H$1178=5)*$B$2:$B$1178)-МИН(ЕСЛИ(($A$2:$A$1178=$K4)*($H$2:$H$1178=5)*$B$2:$B$1178>0;$B$2:$B$1178))>$Q4;2;ЕСЛИ($Q4=0;0;1)) я бы ещё я тоже рассматривал. кол-во ячеек по посчитать ячейки вСкладываем ячейки с суммой
что пустые ячейки вот такое сообщение:
excelworld.ru
(Форматировать только первые
Как в Excel посчитать количество ячеек по цвету ячейки или цвету текста
Мы с вами уже рассматривали вопрос о том как посчитать в Excel количество ячеек/значений в подробном видео уроке. Сегодня мы бы хотели немного расширить данную статью для решения более узкой задачи. Допустим, вам необходимо посчитать количество ячеек в зависимости от цвета ячеек или цвета текста.
Начиная с Excel 2007 в программе встроили возможность сортировки ячеек по цвету. Таким образом, можно отфильтровать нужный нам цвет, выделить оставшиеся на виду ячейки и визуально посмотреть общее количество ячеек. Но что делать, если нам требуется делать это часто и при этом нам необходимо, чтобы все считалось и пересчитывалось с помощью формул.
Для этих целей необходимо использовать очень простенький макрос, а точнее пользовательскую функцию, назовем ее ColorNom, она позволит нам вытягивать числовой код цвета заливки и далее по этому коду мы и будет считать общее количество ячеек, используя приемы, описываемые в статье как посчитать в Excel количество ячеек/значений
Итак, приступим. Зайдите в редактор Visual Basic, для этого:
в Excel 2003 нажмите на Сервис, далее Макрос и затем Редактор Visual Basic.
в Excel 2007, 2010 и 2013 это делается по-другому. Зайдите в раздел Разработчик, далее выберите Visual Basic
Внимание! Раздел панели инструментов Разработчик в Excel 2007 доступен по умолчанию, а в Excel 2010 и 2013 его необходимо включить. Это особенно полезно сделать тем пользователям, которые будут часто работать с макросами. Чтобы включить панель инструментов Разработчик в Excel 2010 или 2013 необходимо запустить Файл | Параметры | Настройка ленты после этого необходимо с правой стороны необходимо поставить галочку напротив надписи Разработчик
После того как откроется редактор Visual Basic, вставьте пустой модуль, для этого выберите меню Insert и далее Module
и скопируйте туда текст простой функции:
Public Function ColorNom (Cell As Range)
ColorNom = Cell.Interior.ColorIndex
End Function
После этого закройте редактор Visual Basic и можно вернуться к нашему файлу. В любой пустой ячейки введите пользовательскую функцию, которую мы ввели раннее. В нашем случае это функция ColorNom, ее можно вызвать либо через меню Вставка, Функция — категория Определенные пользователем, либо просто можно напечатать ее в самой ячейке =ColorNom ( A1 ), где A1 — это наша ячейка, в которой нам необходимо определить индекс цвета.
После этого уже не составит труда посчитать количество ячеек или значений в зависимости от цвета ячейки. Используйте нашу статью как посчитать в Excel количество ячеек/значений
Если вам необходимо посчитать количество значений или сумму в зависимости от цвета текста, то необходимо немного изменить код пользовательской функции.
Public Function ColorNom (Cell As Range)
ColorNom = Cell.Font.ColorIndex
End Function
Важно! Вы не сможете находить с помощью данной функции номер цвета ячейки при использовании условного форматирования. Кроме того, при изменении цвета ячейки Excel не пересчитывает значения, необходимо это делать в ручную, нажимая Ctrl+Alt+F9, либо изменения будут происходить при новом открытии данного файла. Это происходит из-за того, что Excel не считает изменение цвета ячейки редактированием формулы. В связи с этим, если это критично, то можно внести изменение в саму формулу, просто добавив функцию, которая постоянно пересчитывается и при этом не повлияет на определение цвета ячейки. Например, указать функцию определения текущей даты, умноженную на ноль.
В нашем случае функция будет выглядеть следующем образом.
=ColorNom (A1)+Сегодня()*0
Пример подсчета количества значений по цвету цвету заливки ячеек в Excel
Рассмотрим вышеуказанный пример с перечнем фруктов. Мы определили код ячеек и отобразили его напротив каждой ячейки.
Далее для удобства мы создадим вспомогательную таблицу из всех существующих цветов заливки. В нашем случае это красный, зеленый и желтый. Рядом с помощью все той же формулы определим код цвета.
В третьем столбце мы уже будет считать количество ячеек определенного цвета по условию, использую код цвета.
Считать количество мы будем с помощью функции СЧЁТЕСЛИ
Вот так выглядят аргументы данной функции
=СЧЁТЕСЛИ( диапазон ; критерий )
=СЧЁТЕСЛИ( $B$1:$B$8 ; E2 )
Диапазон мы указали со знаком доллара, чтобы он был закреплен и можно было протянуть формулу. Критерия у нас встречается всего три и они указаны в нашей вспомогательной таблице. Протянем формулу и получим количество ячеек по цветам.
Скачать пример файла: Цвет_Ячеек.xlsm (файл с поддержкой макросов)
Excel — выборка ячеек по цвету заливки
December 15, 2013
На работе столкнулся с такой задачей — имеется таблица в Excel, в которой ведется табель выходов рабочих в цеху.
В таблице подсчитывается количество часов, фактически отработанных; часов переработки и часов сверх нормы. Так вот, необходимо сделать так, чтобы производилась автоматическая выборка ячеек таблицы по цвету заливки последних.
То есть, нужно отобрать все ячейки с заливкой определенного цвета, подсчитать их количество; а затем применить к полученному значению определенные формулы.
Чтобы было понятнее, приведу изображение подобной таблицы. В ней необходимо произвести подсчет ячеек с заливкой зеленого цвета:
В Excel нет встроенных (готовых) инструментов для выборки подобного рода; можно отбирать ячейки только по одному условию — по значению, находящемуся в них. Поэтому решение задачи получалось только одно — через VBA (пользовательские функции).
Прекрасное и готовое решение моей задачи я нашел на сайте http://www.excel-vba.ru/. Даже не одно, а целых два решения, под разные условия. Ниже привожу последовательность шагов, которые привели меня к успеху.
Сразу скажу, что изображения были сделаны в Excel 2007. В Excel 2010 все несколько по другому, но запутаться невозможно, если что.
Режим “Разработчик” в Excel
Первое, что нужно сделать — заставить Excel работать с пользовательскими функциями. Фактически, мы будем писать сценарий на языке VBA в Excel, но такая возможность по умолчанию отключена в этой программе. Включить ее можно следующим образом.
Переходим в “Пуск — Параметры Excel” и находим в левом списке пункт “Надстройки”:
Выбираем в основном окне строчку “Пакет анализа — VBA” и жмем кнопочку “Перейти” в самом низу окна. Откроется еще одно окошко со списком доступных под Excel расширений (надстроек). Снова выбираем в этом списке “Пакет анализа — VBA” и соглашаемся, что хотим установить его, нажав кнопку “ОК”:
Потребуется установочный диск с Microsoft Office на нем (или же подключение к Интернет) чтобы программа получила необходимые пакеты для инсталляции. Если установка прошла успешно, то в “Ленте” появиться пункт “Разработчик” (Excel 2010). Можно перейти в него через эту панель или же с помощью сочетания клавиш Alt + F11 .
Появиться окно, в котором выполняется написание кода на языке VBA, то есть фактически создаются пользовательские функции. Я писать их не буду, так как языка VBA не знаю и знать особого желания нет (все знать невозможно).
Вставка готовых функций в Excel VBA
Но есть готовые решения, которые я вставлю в виде кода с помощью меню “Insert — Module”. Просто берем отсюда код функций и вставляем в свой Excel. Затем сохраняем файл Excel с поддержкой VBA (макросов) и все готово для дальнейшей работы.
Вставленные функции появятся в списке формул таблицы:
Ниже представлен готовый код двух функций на VBA, написанных их автором Дмитрием Щербаковым. Первая функция с именем “CountByInteriorColor” выполняет подсчет количества ячеек по цвету заливки.
Вторая функция с именем “SumByInteriorColor” выполняет выборку ячеек по цвету заливки и суммирует все значения в этих ячейках.
Обе функции имеют одинаковый синтаксис и принимают три входных аргумента, первые два из которых обязательные, а третий — необязательный:
Количество и сумма ячеек по цвету в Excel
Разберем простые способы как посчитать количество, и как суммировать ячейки по цвету в Excel.
Мы часто при работе в Excel окрашиваем ячейки различными цветами для лучшей визуализации данных.
Однако, когда возникает необходимость произвести какие-либо расчеты с обработанными данными мы сталкиваемся с трудностями в связи с малыми возможностями стандартных средств Excel.
Рассмотрим две простые функции, которые дают возможность суммировать ячейки, и посчитать количество выделенных цветом ячеек.
Суммирование ячеек по цвету
Перейдем в редактор VBA, для этого в панели вкладок выбираем Разработчик -> Visual Basic (или нажимаем комбинацию клавиш Alt + F11).
Создаем новый модуль и добавляем в него следующий код (напротив каждой строчки дается пояснение к коду):
Функция СУММЦВЕТ содержит два аргумента:
- MyRange(обязательный аргумент) — диапазон ячеек для суммирования;
- MyCell(обязательный аргумент) — ячейка, по цвету заливки которой рассчитывается сумма.
Функция СУММЦВЕТ теперь будет определяться при вводе формулы в ячейку, переходим из редактора на лист Excel и воспользуемся новой функцией:
При этом, если выбранная ячейка не имеет заливки, то функция суммы ячеек по выбранному цвету также будет работать.
Подсчет количества ячеек по цвету
Чтобы посчитать ячейки одного цвета достаточно немного видоизменить функцию для подсчета суммы — вместо прибавления значения текущей ячейки (Sum = Sum + cell.Value) мы добавляем 1 (Sum = Sum + 1).
При работе с данными функциями обратите внимание на два важных момента:
- Если цвет выбранной ячейки определяется с помощью условного форматирования (т.е. цвет ячейки определяется не за счет заливки), то рассмотренные функции не сработают.
- В случае изменения раскраски ячейки в Excel формулы автоматически не пересчитываются, так как не изменяется содержимое ячейки, поэтому для корректного расчета необходимо произвести пересчет формул. Комбинация клавиш Shift + F9 пересчитает формулы на активном листе (F9 — для всей книги).
Сумма ячеек по цвету
Помечать ячейки цветом, используя заливку или цвет шрифта, очень удобно и наглядно. Если вы не дальтоник, конечно 🙂 Трудности возникают тогда, когда по такой раскрашенной таблице возникает необходимость сделать отчет. И если фильтровать и сортировать по цвету Excel в последних версиях научился, то суммировать по цвету до сих пор не умеет.
Чтобы исправить этот существенный недостаток можно использовать несложную пользовательскую функцию на Visual Basic, которая позволит нам суммировать ячейки с определенным цветом.
Откройте редактор Visual Basic:
- В Excel 2003 и старше для этого нужно выбрать в меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor)
- В новых версиях Excel 2007-2013 перейти на вкладку Разработчик (Developer) и нажать кнопку Visual Basic. Если такой вкладки у вас не видно, то включите ее в настройках Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon)
В окне редактора вставьте новый модуль через меню Insert — Module и скопируйте туда текст вот такой функции:
Если теперь вернуться в Excel, то в Мастере функций (Вставка — Функция) в появившейся там категории Определенные пользователем (User Defined) можно найти нашу функцию и вставить ее на лист:
У нее два аргумента:
- DataRange — диапазон раскрашенных ячеек с числами
- ColorSample — ячейка, цвет которой принимается как образец для суммирования
Цвет шрифта
Легко изменить нашу функцию, чтобы она учитывала не цвет заливки фона, а цвет шрифта ячейки. Для этого в строке 6 просто замените свойство Interior на Font в обеих частях выражения.
Количество вместо суммы
Если вам нужно подсчитывать не сумму покрашенных определенным цветом ячеек, а всего лишь их количество, то наша функция будет еще проще. Замените в ней 7-ю строку на:
Нюансы пересчета
К сожалению изменение цвета заливки или цвета шрифта ячейки Excel не считает изменением ее содержимого, поэтому не запускает пересчет формул. То есть при перекрашивании исходных ячеек с числами в другие цвета итоговая сумма по нашей функции пересчитываться не будет.
Полностью решить эту проблему невозможно, но можно ее существенно облегчить. Для этого в третьей строке нашей функции используется команда Application.Volatile True. Она заставляет Excel пересчитывать результаты нашей функции при изменении любой ячейки на листе (или по нажатию F9).
И помните о том, что наша функция перебирает все (и пустые тоже) ячейки в диапазоне DataRange и не задавайте в качестве первого аргумента целый столбец — «думать» будет долго 🙂
Как посчитать количество и сумму ячеек по цвету в Excel 2010 и 2013
Из этой статьи Вы узнаете, как в Excel посчитать количество и сумму ячеек определенного цвета. Этот способ работает как для ячеек, раскрашенных вручную, так и для ячеек с правилами условного форматирования. Кроме того, Вы научитесь настраивать фильтр по нескольким цветам в Excel 2010 и 2013.
Если Вы активно используете разнообразные заливки и цвет шрифта на листах Excel, чтобы выделять различные типы ячеек или значений, то, скорее всего, захотите узнать, сколько ячеек выделено определённым цветом. Если же в ячейках хранятся числа, то, вероятно, Вы захотите вычислить сумму всех ячеек с одинаковой заливкой, например, сумму всех красных ячеек.
Как известно, Microsoft Excel предоставляет набор функций для различных целей, и логично предположить, что существуют формулы для подсчёта ячеек по цвету. Но, к сожалению, не существует формулы, которая позволила бы на обычном листе Excel суммировать или считать по цвету.
Если не использовать сторонние надстройки, существует только одно решение – создать пользовательскую функцию (UDF). Если Вы мало знаете об этой технологии или вообще никогда не слышали этого термина, не пугайтесь, Вам не придётся писать код самостоятельно. Здесь Вы найдёте отличный готовый код (написанный нашим гуру Excel), и всё, что Вам потребуется сделать – это скопировать его и вставить в свою рабочую книгу.
Как считать и суммировать по цвету на листе Excel
Предположим, у Вас есть таблица заказов компании, в которой ячейки в столбце Delivery раскрашены в зависимости от их значений: Due in X Days – оранжевые, Delivered – зелёные, Past Due – красные.
Теперь мы хотим автоматически сосчитать количество ячеек по их цвету, то есть сосчитать количество красных, зелёных и оранжевых ячеек на листе. Как я уже сказал выше, прямого решения этой задачи не существует. Но, к счастью, в нашей команде есть очень умелые и знающие Excel гуру, и один из них написал безупречный код для Excel 2010 и 2013. Итак, выполните 5 простых шагов, описанных далее, и через несколько минут Вы узнаете количество и сумму ячеек нужного цвета.
- Откройте книгу Excel и нажмите Alt+F11, чтобы запустить редактор Visual Basic for Applications (VBA).
- Правой кнопкой мыши кликните по имени Вашей рабочей книги в области Project – VBAProject, которая находится в левой части экрана, далее в появившемся контекстном меню нажмите Insert >Module.
- Вставьте на свой лист вот такой код:
- Сохраните рабочую книгу Excel в формате .xlsm (Книга Excel с поддержкой макросов).Если Вы не слишком уверенно чувствуете себя с VBA, то посмотрите подробную пошаговую инструкцию и массу полезных советов в учебнике Как вставить и запустить код VBA в Excel.
- Когда все закулисные действия будут выполнены, выберите ячейки, в которые нужно вставить результат, и введите в них функцию CountCellsByColor:
CountCellsByColor( диапазон , код_цвета )
В этом примере мы используем формулу =CountCellsByColor(F2:F14,A17), где F2:F14 – это диапазон, содержащий раскрашенные ячейки, которые Вы хотите посчитать. Ячейка A17 – содержит определённый цвет заливки, в нашем случае красный.
Точно таким же образом Вы записываете формулу для других цветов, которые требуется посчитать в таблице (жёлтый и зелёный).
Если в раскрашенных ячейках содержатся численные данные (например, столбец Qty. в нашей таблице), Вы можете суммировать значения на основе выбранного цвета ячейки, используя аналогичную функцию SumCellsByColor:
SumCellsByColor( диапазон , код_цвета )
Как показано на снимке экрана ниже, мы использовали формулу:
где D2:D14 – диапазон, A17 – ячейка с образцом цвета.
Таким же образом Вы можете посчитать и просуммировать ячейки по цвету шрифта при помощи функций CountCellsByFontColor и SumCellsByFontColor соответственно.
Замечание: Если после применения выше описанного кода VBA Вам вдруг потребуется раскрасить ещё несколько ячеек вручную, сумма и количество ячеек не будут пересчитаны автоматически после этих изменений. Не ругайте нас, это не погрешности кода
На самом деле, это нормальное поведение макросов в Excel, скриптов VBA и пользовательских функций (UDF). Дело в том, что все подобные функции вызываются только изменением данных на листе, но Excel не расценивает изменение цвета шрифта или заливки ячейки как изменение данных. Поэтому, после изменения цвета ячеек вручную, просто поставьте курсор на любую ячейку и кликните F2, а затем Enter, сумма и количество после этого обновятся. Так нужно сделать, работая с любым макросом, который Вы найдёте далее в этой статье.
Считаем сумму и количество ячеек по цвету во всей книге
Представленный ниже скрипт Visual Basic был написан в ответ на один из комментариев читателей (также нашим гуру Excel) и выполняет именно те действия, которые упомянул автор комментария, а именно считает количество и сумму ячеек определённого цвета на всех листах данной книги. Итак, вот этот код:
Добавьте этот макрос точно также, как и предыдущий код. Чтобы получить количество и сумму цветных ячеек используйте вот такие формулы:
Просто введите одну из этих формул в любую пустую ячейку на любом листе Excel. Диапазон указывать не нужно, но необходимо в скобках указать любую ячейку с заливкой нужного цвета, например, =WbkSumCellsByColor(A1), и формула вернет сумму всех ячеек в книге, окрашенных в этот же цвет.
Пользовательские функции для определения кодов цвета заливки ячеек и цвета шрифта
Здесь Вы найдёте самые важные моменты по всем функциям, использованным нами в этом примере, а также пару новых функций, которые определяют коды цветов.
Замечание: Пожалуйста, помните, что все эти формулы будут работать, если Вы уже добавили в свою рабочую книгу Excel пользовательскую функцию, как было показано ранее в этой статье.
Функции, которые считают количество по цвету:
- CountCellsByColor( диапазон , код_цвета ) – считает ячейки с заданным цветом заливки.В примере, рассмотренном выше, мы использовали вот такую формулу для подсчёта количества ячеек по их цвету:
где F2:F14 – это выбранный диапазон, A17 – это ячейка с нужным цветом заливки.
Все перечисленные далее формулы работают по такому же принципу.
Функции, которые суммируют значения по цвету ячейки:
- SumCellsByColor( диапазон , код_цвета ) – вычисляет сумму ячеек с заданным цветом заливки.
- SumCellsByFontColor( диапазон , код_цвета ) – вычисляет сумму ячеек с заданным цветом шрифта.
Функции, которые возвращают код цвета:
- GetCellFontColor( ячейка ) – возвращает код цвета шрифта в выбранной ячейке.
- GetCellColor( ячейка ) – возвращает код цвета заливки в выбранной ячейке.
Итак, посчитать количество ячеек по их цвету и вычислить сумму значений в раскрашенных ячейках оказалось совсем не сложно, не так ли? Но что если Вы не раскрашиваете ячейки вручную, а предпочитаете использовать условное форматирование, как мы делали это в статьях Как изменить цвет заливки ячеек и Как изменить цвет заливки строки, основываясь на значении ячейки?
Как посчитать количество и сумму ячеек по цвету, раскрашенных при помощи условного форматирования
Если Вы применили условное форматирование, чтобы задать цвет заливки ячеек в зависимости от их значений, и теперь хотите посчитать количество ячеек определённого цвета или сумму значений в них, то у меня для Вас плохие новости – не существует универсальной пользовательской функции, которая будет по цвету суммировать или считать количество ячеек и выводить результат в определённые ячейки. По крайней мере, я не слышал о таких функциях, а жаль
Конечно, Вы можете найти тонны кода VBA в интернете, который пытается сделать это, но все эти коды (по крайней мере, те экземпляры, которые попадались мне) не обрабатывают правила условного форматирования, такие как:
- Format all cells based on their values (Форматировать все ячейки на основании их значений);
- Format only top or bottom ranked values (Форматировать только первые или последние значения);
- Format only values that are above or below average (Форматировать только значения, которые находятся выше или ниже среднего);
- Format only unique or duplicate values (Форматировать только уникальные или повторяющиеся значения).
Кроме того, практически все эти коды VBA имеют целый ряд особенностей и ограничений, из-за которых они могут не работать корректно с какой-то конкретной книгой или типами данных. Так или иначе, Вы можете попытать счастье и google в поисках идеального решения, и если Вам удастся найти его, пожалуйста, возвращайтесь и опубликуйте здесь свою находку!
Код VBA, приведённый ниже, преодолевает все указанные выше ограничения и работает в таблицах Microsoft Excel 2010 и 2013, с любыми типами условного форматирования (и снова спасибо нашему гуру!). В результате он выводит количество раскрашенных ячеек и сумму значений в этих ячейках, независимо от типа условного форматирования, применённого на листе.
Как использовать код, чтобы посчитать количество цветных ячеек и просуммировать их значения
- Добавьте код, приведённый выше, на Ваш лист, как мы делали это в первом примере.
- Выберите диапазон (или диапазоны), в которых нужно сосчитать цветные ячейки или просуммировать по цвету, если в них содержатся числовые данные.
- Нажмите и удерживайте Ctrl, кликните по одной ячейке нужного цвета, затем отпустите Ctrl.
- Нажмите Alt+F8, чтобы открыть список макросов в Вашей рабочей книге.
- Выберите макрос SumCountByConditionalFormat и нажмите Run (Выполнить).В результате Вы увидите вот такое сообщение:
Для этого примера мы выбрали столбец Qty. и получили следующие цифры:
- Count – это число ячеек искомого цвета; в нашем случае это красноватый цвет, которым выделены ячейки со значением Past Due.
- Sum – это сумма значений всех ячеек красного цвета в столбце Qty., то есть общее количество элементов с отметкой Past Due.
- Color – это шестнадцатеричный код цвета выделенной ячейки, в нашем случае D2.
Рабочая книга с примерами для скачивания
Если у Вас возникли трудности с добавлением скриптов в рабочую книгу Excel, например, ошибки компиляции, не работающие формулы и так далее, Вы можете скачать рабочую книгу Excel с примерами и с готовыми к использованию функциями CountCellsByColor и SumCellsByColor, и испытать их на своих данных.