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 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 в последних версиях научился, то суммировать по цвету до сих пор не умеет.
Чтобы исправить этот существенный недостаток можно использовать несложные пользовательские макрофункции на Visual Basic, которые позволят нам суммировать/подсчитывать количество/среднее арифметическое ячеек с определенным цветом заливки/шрифта.
На вкладке Разработчик (Developer) нажмите кнопку Visual Basic или сочетание клавиш Alt+F11, чтобы открыть редактор макросов. Если такой вкладки у вас не видно, то включите ее в настройках Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).
В окне редактора вставьте новый модуль через меню Insert — Module и скопируйте туда текст следующих функций:
Function CountByColor(DataRange As Range, ColorSample As Range) As Long Dim cell As Range, n As Long For Each cell In DataRange If cell.Interior.Color = ColorSample.Interior.Color Then n = n + 1 Next cell CountByColor = n End Function Function SumByColor(DataRange As Range, ColorSample As Range) As Double Dim cell As Range, total As Double For Each cell In DataRange If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color Then total = total + cell.Value Next cell SumByColor = total End Function Function AverageByColor(DataRange As Range, ColorSample As Range) As Double Dim cell As Range, total As Double, n As Long For Each cell In DataRange If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color Then total = total + cell.Value n = n + 1 End If Next cell AverageByColor = total / n End Function
Как легко сообразить, первая функция здесь вычисляет количество ячеек с заданным цветом заливки, вторая — сумму, а третья — среднее арифметическое. У всех функций два аргумента:
- DataRange — диапазон исходных ячеек с числами, раскрашенных в разные цвета
- ColorSample — ячейка, цвет заливки которой мы берём за образец
Если теперь вернуться в Excel, то в Мастере функций (вкладка Формулы — кнопка Вставить функцию) в появившейся там категории Определенные пользователем (User Defined) можно найти наши функции и вставить их на лист. Либо напрямую ввести их в строку формул, как любые другие функции Excel:
Добавление условий
Аналогичный подход можно легко масштабировать, добавляя, при необходимости, дополнительные условия в проверку (команда if … then…). Так, например, если нам нужно при вычислении среднего арифметического учитывать не только цвет заливки, но и цвет шрифта (т.е. считать не просто жёлтые, а именно жёлто-красные ячейки), то код нашей макро-функции будет выглядеть так:
Function AverageByColor2(DataRange As Range, ColorSample As Range) As Double Dim cell As Range, total As Double, n As Long For Each cell In DataRange If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color And cell.Font.Color = ColorSample.Font.Color Then total = total + cell.Value n = n + 1 End If Next cell AverageByColor2 = total / n End Function
Разница только в добавленном через логическую связку «И» (and) условии на проверку соответствия цвета шрифта очередной проверяемой ячейки cell.Font.Color цвету шрифта ячейки-образца ColorSample.Font.Color.
Ограничения и нюансы пересчёта
У созданных нами макрофункций есть 2 важных нюанса.
Во-первых, эти функции «не видят» заливку, созданную с помощью условного форматирования, т.е. работают только с цветом, который был задан для ячеек вручную.
Во-вторых, к сожалению, изменение цвета заливки или цвета шрифта ячейки Excel не считает изменением её содержимого, поэтому не запускает пересчет формул. То есть при перекрашивании исходных ячеек с числами в другие цвета итоговая сумма/среднее/количество по нашим функциям автоматически пересчитываться пересчитываться не будет.
Полностью решить эту проблему невозможно, но есть несколько способов её обойти:
- Сделать двойной щелчок левой кнопкой мыши по ячейки с нашей формулой и нажать на Enter, т.е. имитировать повторный ввод функции в ячейку — Excel её заново пересчитает и выдаст обновленный результат.
- Можно использовать сочетание клавиш Ctrl+Alt+F9, которое принудительно заставит Excel пересчитать всё формулы и функции независимо от того, изменились ли для них исходные данные. Но это сочетание нужно будет не забывать нажимать каждый раз при изменении исходных данных.
- Добавить в код наших макрофункций (в любое место) команду Application.Volatile True. Эта команда языка Visual Basic заставляет Excel пересчитывать результаты нашей функции при изменении любой ячейки на листе (или по нажатию F9). Однако, в этом случае, скорость работы наших функций заметно снизится, т.к. их пересчёт будет происходить постоянно — даже когда мы не меняли цвета или значения ячеек в исходных данных. Пользуйтесь этим методом осторожно.
И помните о том, что наша функция перебирает все (и пустые тоже) ячейки в диапазоне DataRange и не задавайте в качестве первого аргумента целый столбец — «думать» будет долго
Ссылки по теме
- Сортировка строк по цвету
- Функции подсчета количества и суммы ячеек по цвету из надстройки PLEX
- Что такое «ад условного форматирования» и как его победить
Как посчитать количество и сумму ячеек по цвету в Excel 2010 и 2013
Смотрите такжеПосчитать продолжительность этих всего уже задано. подставить в ObrazecCvet под цвет ячеек Но если указать всё заработает.{/post}{/quote} листе применено условный кнопки «Автосумма» наПеревел: Антон Андронов & _ Hex(indRefColor) пытается сделать это, в свою рабочую, сумма и количество и введите в
GetCellFontColor = xlRange.Font.Color– красные.Из этой статьи Вы волн с сортировкой Определить правило заданияHeidegger Может можно любую залитую нужнымПодключал, вроде что-то формат, можно быстро закладке Excel «Главная»Автор: Антон Андронов & vbCrLf, , но все эти книгу Excel пользовательскую после этого обновятся. них функцию
End If EndТеперь мы хотим автоматически узнаете, как в по годам. цвета и дальше: Текст функций не подругому? цветом ячейку - происходит, но в найти их для и выбираем функциюГоворят, что нет «Count & Sum
коды (по крайней функцию, как было Так нужно сделать,CountCellsByColor Function Function CountCellsByColor(rData сосчитать количество ячеек Excel посчитать количествоНапример, в 1915 году «плясать» от него нужно никуда забиватьByronel всё работает. итоге все-равно ошибка копирования, изменения или «Число». специальной функции без by Conditional Format мере, те экземпляры, показано ранее в работая с любым:
- As Range, cellRefColor по их цвету, и сумму ячеек
- — волна продолжаласьNikls2502 – они должны
- : добрый день!Guest #Имя удаления условного формата.
Как считать и суммировать по цвету на листе Excel
Эта функция считает только макросов color» End Sub которые попадались мне) этой статье. макросом, который ВыCountCellsByColor(диапазон, код_цвета) As Range) As то есть сосчитать определенного цвета. Этот 13 дней, а: Народ подскажите как быть на верхнем
есть 2 столбца: а у меняR Dmitry Для поиска ячеек заполненные строки. Еслипосчитать количество выделенных строкДобавьте код, приведённый выше, не обрабатывают правилаCountCellsByColor(диапазон, код_цвета) найдёте далее вВ этом примере мы Long Dim indRefColor количество красных, зелёных способ работает как в в 1917 посчитать сумму ячеек уровне.ячейки в них не сработало ни: А зачем вообще с определенным условным есть пустые ячейки в Excel на Ваш лист, условного форматирования, такие
- – считает ячейки этой статье. используем формулу As Long Dim и оранжевых ячеек для ячеек, раскрашенных
- — 10 дней выделенных цветомНет, вторым аргументом закрашены 4 цветами так ни так. цвета считать, если форматированием или всех в столбце, то. Неправда. Есть много как мы делали как: с заданным цветомПредставленный ниже скрипт Visual
- =CountCellsByColor(F2:F14,A17) cellCurrent As Range
на листе. Как вручную, так и;Michael_S функции идёт ячейка, (причем, некоторые изВсе надстройки всключены. вы используете уф, ячеек с условным в формуле исправляем других приемов, чтобы это в первомFormat all cells based заливки.В примере, рассмотренном Basic был написан, где Dim cntRes As я уже сказал для ячеек с3.: Смотря как они имеющая целевой цвет, них нестандартны -Hugo можно и условия форматированием можно использовать адрес первой ячейки посчитать выделенные строки, примере. on their values выше, мы использовали в ответ наF2:F14 Long Application.Volatile cntRes выше, прямого решения правилами условного форматирования.Амплитуду волн. Т.е. выделены. Если вручную вхождения которого ищутся выбирал оттенки через: Формулу вложил в посчитать команду диапазона. Например, мы ячейки Excel. БылоВыберите диапазон (или диапазоны),(Форматировать все ячейки вот такую формулу один из комментариев– это диапазон, = 0 indRefColor этой задачи не Кроме того, Вы min и max — то только во входном диапазоне «другие цвета») файл.например такВыделить группу ячеек вставили формулу функцией бы желание, а в которых нужно на основании их для подсчёта количества читателей (также нашим содержащий раскрашенные ячейки, = cellRefColor.Cells(1, 1).Interior.Color существует. Но, к научитесь настраивать фильтр температуры. макросом, если применялось (первый аргумент функции).необходимо посчитать количествоКроме неё -Guest. «Автосумма». В этой способы найдем. ))) сосчитать цветные ячейки значений); ячеек по их гуру Excel) и которые Вы хотите For Each cellCurrent счастью, в нашей по нескольким цветамНапример, в 1915 году УФ — тоKoGG ячеек определенного цвета нужны ещё две: Есть ли УФЩелкните любую ячейку без формуле указан диапазонОдин из способов или просуммировать поFormat only top or цвету: выполняет именно те посчитать. Ячейка In rData If команде есть очень в Excel 2010 — min 1.348, по условию УФ, прекрасный код, нов ячейках значений формулы, присутсвуют. на листе? Если условного форматирования.
- до первой пустойузнать количество выделенных цвету, если в bottom ranked values=CountCellsByColor(F2:F14,A17) действия, которые упомянулA17 indRefColor = cellCurrent.Interior.Color умелые и знающие и 2013. max 7.248vikttur я бы ещё нет, они просто
- Hugo есть — какиеНа вкладке ячейке столбца. =СЧЁТ(A4:A6) строк – это них содержатся числовые(Форматировать только первыегде
автор комментария, а
– содержит определённый Then cntRes = Excel гуру, иЕсли Вы активно используете.: Например, Надстройка для добавил Application.Volatile, чтобы закрашены: Т.е. две функции, применены условия?{/post}{/quote}Главная Мы адрес ячейки настроить порядковые номера
данные. или последние значения);F2:F14 именно считает количество цвет заливки, в cntRes + 1
один из них разнообразные заливки иУ самой, к суммирования по цвету функция пересчитывалась хотянасколько я понимаю, извиняюсь…В первом сообщениив группе А4 исправляем на строк после фильтра.
Нажмите и удерживайте
Format only values that– это выбранный и сумму ячеек
нашем случае красный.
End If Next написал безупречный код цвет шрифта на сожалению, мозгов не заливки,шрифта, формату бы по F9.
подобную задачу надоsva прикреплен пример файла.Редактирование адрес ячейки А1. Смотрите об этомCtrl are above or диапазон,
определённого цвета наТочно таким же образом cellCurrent CountCellsByColor = для Excel 2010 листах Excel, чтобы хватает разобраться сTyronByronel решать посредством VBA,: Меня напрягает вот Условия УФ следующие:щелкните стрелку рядом
Получится так. способе статью «Порядковый, кликните по одной below averageA17 всех листах данной Вы записываете формулу cntRes End Function и 2013. Итак, выделять различные типы этим. Помогите, пожалуйста,: С надстройкой получилось, В приложении образец некоторые варианты я эта часть.Есть 7 критериев с кнопкойПятый способ. номер строк по ячейке нужного цвета,(Форматировать только значения,– это ячейка книги. Итак, вот для других цветов, Function SumCellsByColor(rData As выполните 5 простых ячеек или значений, кто чем может.
Считаем сумму и количество ячеек по цвету во всей книге
подсчитать количество ячеек – можно поиграть видел в интернете,По идее должно оценки людей иНайти и выделитьПосчитать, если выделено цветом порядку после фильтра затем отпустите которые находятся выше с нужным цветом этот код: которые требуется посчитать Range, cellRefColor As шагов, описанных далее,
то, скорее всего,Заранее, большое спасибо. по цветам. с ним. у меня не быть: сервис-надстройки-обзор-находим надстройки каждому критерию соответвуют, а затем выберите – формула Excel в Excel»Ctrl или ниже среднего); заливки.Function WbkCountCellsByColor(cellRefColor As в таблице (жёлтый Range) Dim indRefColor и через несколько захотите узнать, сколько ))А как сделатьKoGG получилось Summ_Color-ок определенные баллы (от пункт.Второй способ.Format only unique or
Все перечисленные далее формулы Range) Dim vWbkRes и зелёный). As Long Dim минут Вы узнаете ячеек выделено определённымYouGreed
чтобы при изменении
: To Heidegger :
помогите, пожалуйстаGuest 1 до 10).Условное форматированиеМожно написать такую–Нажмите duplicate values работают по такому Dim wshCurrent AsЕсли в раскрашенных ячейках cellCurrent As Range количество и сумму цветом. Если же: baneska, Так-с, предлагаем. цвета ячейки автоматически
Пользовательские функции для определения кодов цвета заливки ячеек и цвета шрифта
Сознательно не вставлялKoGG: Отлично!!! Все вроде При установке определенных. формулу. =СЧЁТ(A1:A6) Этапосчитать количество выделенных ячеекAlt+F8
(Форматировать только уникальные же принципу. Worksheet Application.ScreenUpdating = содержатся численные данные Dim sumRes Application.Volatile ячеек нужного цвета. в ячейках хранятся200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СЧЁТЕСЛИМН($A$2:$A$1178;$K4;$H$2:$H$1178;5) пересчитывалось и их Application.Volatile, чтобы не
Функции, которые считают количество по цвету:
: Function СчетЕслиЦвет(Oblast As
работает спасибо!!! чисел ячейки окрашиваютсяЩелкните ячейку с условным формула считает только в столбце Excel, чтобы открыть список или повторяющиеся значения).CountCellsByFontColor(диапазон, код_цвета) False Application.Calculation =
(например, столбец sumRes = 0Откройте книгу Excel и числа, то, вероятно,Нужно уточнение, счет количество? вводить пользователя в Range, Obrazec As
P.S. А не в три цвета форматированием, которое необходимо
ячейки с числами,
. макросов в ВашейКроме того, практически все
Функции, которые суммируют значения по цвету ячейки:
– считает ячейки
xlCalculationManual vWbkRes =Qty. indRefColor = cellRefColor.Cells(1, нажмите
Вы захотите вычислить максимальной продолжительности волныЗ.Ы. Пример в
Функции, которые возвращают код цвета:
заблуждение: да при
Range) As Variant подскажешь как вкладывать (красный — негатив, найти.
а с текстомВыделяем ячейки в рабочей книге.
эти коды VBA с заданным цветом 0 For Eachв нашей таблице), 1).Interior.Color For EachAlt+F11 сумму всех ячеек или сумма всех файле. Подскажите кто изменении значений в ‘ Считает число фукнции в файл, желтый — что-тоНа вкладке – не считает. столбце и смотримВыберите макрос имеют целый ряд
Как посчитать количество и сумму ячеек по цвету, раскрашенных при помощи условного форматирования
шрифта. wshCurrent In Worksheets Вы можете суммировать cellCurrent In rData, чтобы запустить редактор с одинаковой заливкой, волн? знает пожалуйста! целевых ячейках функция ячеек в заданном в частности Count_CellColor? среднее, зеленый -ГлавнаяШестой способ. внизу листа ExcelSum особенностей и ограничений,SumCellsByColor(диапазон, код_цвета) wshCurrent.Activate vWbkRes = значения на основе If indRefColor =Visual Basic for Applications
например, сумму всехКод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))Hugo пересчитается, но если диапазоне, цвет фонаSmersh все отлично).в группеЧтобы посчитать ячейки в строке состоянияCountByConditionalFormat
- из-за которых они– вычисляет сумму vWbkRes + CountCellsByColor(wshCurrent.UsedRange, выбранного цвета ячейки, cellCurrent.Interior.Color Then sumRes
- (VBA). красных ячеек.Формула массива, вводится: Никак.
- не меняя значений которых совпадает с: С функциями разобралсяНа вопрос RРедактирование (строки) по определенному
- цифру «Количество». Этои нажмите могут не работать ячеек с заданным
cellRefColor) Next Application.ScreenUpdating используя аналогичную функцию = WorksheetFunction.Sum(cellCurrent, sumRes)Правой кнопкой мыши кликнитеКак известно, Microsoft Excel Ctrl+Shift+Enter.Но можно сделать поменять цвета ячеек цветом фона ячейки ;-)) А возможно Dmitry отвечаю. Вашщелкните стрелку рядом условию, используем функцию число заполненных выделенныхRun корректно с какой-то цветом заливки. = True Application.Calculation
SumCellsByColor End If Next по имени Вашей предоставляет набор функцийНаименьшее значение в по событию выделения в целевом диапазоне образца. Dim Summa1 ли сделать, так, способ вроде подходит, с кнопкой «СЧЁТЕСЛИ». Примеры формул ячеек. Пустые ячейки(Выполнить). конкретной книгой илиSumCellsByFontColor(диапазон, код_цвета)
= xlCalculationAutomatic WbkCountCellsByColor: cellCurrent SumCellsByColor = рабочей книги в для различных целей, волне. ячейки — хотя — функция автоматически As Variant, c что если в но подсчет кол-ваНайти и выделить смотрите в статье так Excel неВ результате Вы увидите типами данных. Так– вычисляет сумму = vWbkRes EndSumCellsByColor(диапазон, код_цвета) sumRes End Function области и логично предположить,Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=МАКС(($A$2:$A$1178=$K4)*($H$2:$H$1178=5)*$G$2:$G$1178) это костыли, и не пересчитается - As Range, ObrazecCvet ячейке образце менять ячеек — проще, а затем выберите «Функция «СЧЁТЕСЛИ» в считает. Но, если вот такое сообщение: или иначе, Вы
Как использовать код, чтобы посчитать количество цветных ячеек и просуммировать их значения
- ячеек с заданным Function Function WbkSumCellsByColor(cellRefColorКак показано на снимке Function CountCellsByFontColor(rData AsProject – VBAProject
- что существуют формулыФормула массива. ненадёжные, и тормозные надо вводить ее As Long ObrazecCvet цвет, то формулы :-)
- пункт Excel» здесь. нужно посчитать строку,Для этого примера мы можете попытать счастье цветом шрифта. As Range) Dim
- экрана ниже, мы Range, cellRefColor As, которая находится в для подсчёта ячеекМаксимальное значение в
- в целом. заново. = Obrazec.Interior.Color For бы автоматически пересчитывалась?R DmitryВыделить группу ячеекСедьмой способ в которой в
выбрали столбец и google вGetCellFontColor(ячейка) vWbkRes Dim wshCurrent использовали формулу:
- Range) As Long левой части экрана, по цвету. Но, волне.Ставьте подсчёт наАлександр Смит Each c In Заранее спасибо!!!: На вопрос R
- .. столбце А нетQty. поисках идеального решения,– возвращает код As Worksheet Application.ScreenUpdating=SumCellsByColor(D2:D14,A17) Dim indRefColor As далее в появившемся к сожалению, не
- Осталось посчитать кол-во кнопку.: Ctrl+Alt+F9 Oblast.Cells If c.Interior.ColorSmersh Dmitry отвечаю. ВашВыберите параметр
Рабочая книга с примерами для скачивания
Посчитать строки, выделенные условным значений, а естьи получили следующие и если Вам цвета шрифта в = False Application.Calculationгде Long Dim cellCurrent контекстном меню нажмите существует формулы, которая волн.P.S. И кстатиHeidegger = ObrazecCvet Then: Ребят, подскажите, есть способ вроде подходит,Условные форматы
форматированием в столбце В,
цифры:
удастся найти его,
выбранной ячейке.
office-guru.ru
Количество выделенных строк в Excel.
= xlCalculationManual vWbkResD2:D14 As Range DimInsert позволила бы на_Boroda_ у Вас в: Да, тогда пересчитает Summa1 = Summa1 такая возможность или но подсчет кол-ва
.или то выделяем ячейкуCount пожалуйста, возвращайтесь иGetCellColor(ячейка) = 0 For– диапазон, cntRes As Long>
обычном листе Excel: Длинная, зато быстрая формуле баксов не и без Volatile. + 1 End
нет? ячеек — прощеВыберите пунктокрашены цветом вручную в столбца В. Главное,– это число опубликуйте здесь свою– возвращает код Each wshCurrent InA17 Application.Volatile cntRes =Module суммировать или считать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)) хватает — диапазонAbram pupkin If Next СчетЕслиЦветТолькоУчусь :-)этих же
Excel чтобы были выделены
ячеек искомого цвета; находку! цвета заливки в Worksheets wshCurrent.Activate vWbkRes– ячейка с 0 indRefColor =. по цвету.Короткая, но медленнее сдвинулся, осторожно, может: Вам правильно подсказала = Summa1 End
: Кажется так.как сказать…… еслив группе. ячейки всех нужных в нашем случаеКод VBA, приведённый ниже, выбранной ячейке.
= vWbkRes + образцом цвета. cellRefColor.Cells(1, 1).Font.Color ForВставьте на свой листЕсли не использовать сторонние
Код200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММПРОИЗВ(—((A$2:A$1178=K4)*(H$1:H$1177&H$2:H$1178)=5)) наврать! Эля Коробицына Function Function СумЕслиЦвет(Oblast————————
условий немного :)),Проверка данных
Можно применить фильтр строк. Например, так. это красноватый цвет, преодолевает все указанныеИтак, посчитать количество ячеек SumCellsByColor(wshCurrent.UsedRange, cellRefColor) NextТаким же образом Вы Each cellCurrent In вот такой код: надстройки, существует толькоbaneskaTyronЕсли цвета ячеек As Range, Obrazec’Ваш кодв лбом случае. по цвету.Здесь выделили четыре строки. которым выделены ячейки выше ограничения и по их цвету Application.ScreenUpdating = True можете посчитать и rData If indRefColorFunction GetCellColor(xlRange As одно решение –
:
: Спасибо! задавались через условное As Range) As
Application.Calculate = True право выбора всегдаSmershЗатем выделить ячейки иТретий способ со значением
работает в таблицах
и вычислить сумму Application.Calculation = xlCalculationAutomatic просуммировать ячейки по = cellCurrent.Font.Color Then Range) Dim indRow, создать пользовательскую функциюYouGreed
Мария форматирование, тогда можно
Variant ‘ Суммирует———————— за вами: добрый день. Помогите посмотреть количество в.
Past Due Microsoft Excel 2010
значений в раскрашенных WbkSumCellsByColor = vWbkRes цвету шрифта при
cntRes = cntRes indColumn As Long (UDF). Если Вы, Спасибо за отклик.: подскажите пожалуйста, могу использовать те же
заданный диапазон ячеекSmershZ разобраться. Имею таблицу строке состояния.Можно в таблице. и 2013, с
excel-office.ru
Поиск ячеек с условным форматированием
ячейках оказалось совсем End Function помощи функций + 1 End Dim arResults() Application.Volatile мало знаете об )) ли сделать так, самые формулы при условии, что: Ясно. Спасибо всем: «НУ,ВЫ,БЛИН, ДАЕТЕ!»(с) - (см. вложение), вЗдесь ячейки выделены условным фильтром отфильтровать нужныеSum любыми типами условного не сложно, неДобавьте этот макрос точноCountCellsByFontColor If Next cellCurrent If xlRange Is
этой технологии илиНет нет, max чтобы в графике,Если ячейки красили RGB цвет фона огромное за помощь «На вопрос R которой ячеки с форматированием. Отфильтровали по данные. Затем выделить– это сумма форматирования (и снова так ли? Но также, как ии
Поиск всех ячеек с условным форматированием
-
CountCellsByFontColor = cntRes Nothing Then Set
-
вообще никогда не это — максимальное где проставлены все вручную, тогда только слагаемого совпадает с и участие :-) Dmitry отвечаю. Ваш помощью условного форматирования, цвету. В строке отфильтрованные ячейки в значений всех ячеек
Поиск ячеек с одинаковым условным форматированием
-
спасибо нашему гуру!). что если Вы предыдущий код. Чтобы
-
SumCellsByFontColor End Function Function xlRange = Application.ThisCell слышали этого термина, значение в период сроки платежей, считать макросы. цветом фона ячейкиSmersh способ вроде подходит, при вводе определенного
-
состояния написано, что столбце. В строке красного цвета в
-
В результате он не раскрашиваете ячейки получить количество исоответственно. SumCellsByFontColor(rData As Range,
support.office.com
Подсчет количества ячеек определенного цвета
End If If не пугайтесь, Вам определённой волны. только оплаченные, приАналогичный вопрос подробно образца. Dim Summa1: Народ, нужна еще но подсчет кол-ва значения, окрашиваются в выделено 3 строки состояния будет видно столбце выводит количество раскрашенных вручную, а предпочитаете
сумму цветных ячеекЗамечание:
cellRefColor As Range)
xlRange.Count > 1 не придётся писать
YouGreed выделении их цветом. рассматривался As Variant, c
Ваша помощь. В ячеек — проще определенные цвета. Не (ячейки). количество строк. Помним,Qty. ячеек и сумму использовать условное форматирование, используйте вот такиеЕсли после применения Dim indRefColor As
Then ReDim arResults(1 код самостоятельно. Здесь: baneska, Т.К., нужна сумма
здесь As Range, ObrazecCvet примере в ячейках :-)
могу подсчитать колличетвоКак преобразовать формат что пустые ячейки, то есть общее
значений в этих как мы делали формулы: выше описанного кода Long Dim cellCurrent To xlRange.Rows.Count, 1
Вы найдёте отличный
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)) только оплаченныхИнтересные решения выложил As Long ObrazecCvet B,C,D 17 УФД,
И чему улыбаться ячеек определенного цвета, данных из других
не считаются в количество элементов с ячейках, независимо от это в статьях=WbkCountCellsByColor() VBA Вам вдруг As Range Dim To xlRange.Columns.Count) For готовый код (написанныйКол-во волн, ноPelena The_Prist
= Obrazec.Interior.Color For привязанное к цифрам. — «=СЧЁТЕСЛИ(B2:H2;» 44325 к примеру «зеленого». программ в формат строке состояния. Получится
отметкой типа условного форматирования, Как изменить цвет=WbkSumCellsByColor() потребуется раскрасить ещё sumRes Application.Volatile sumRes indRow = 1
нашим гуру Excel), это так сказать,
:Очень простой ответ Each c In
Хотелось бы сделатьGuest Подскажите, пожалуйста. Заранее числа Excel, чтобы так.Past Due применённого на листе. заливки ячеек и
Просто введите одну из несколько ячеек вручную,
= 0 indRefColor To xlRange.Rows.Count For и всё, что под результат сделана.Мария предложил Oblast.Cells If c.Interior.Color 3-е условие, что
: Мне принципиально посчитать спасибо. формулы считали такиеВыделены три строки..
Sub SumCountByConditionalFormat() Dim Как изменить цвет этих формул в сумма и количество = cellRefColor.Cells(1, 1).Font.Color indColumn = 1 Вам потребуется сделатьПо поводу max., читаем Правила форума,Алексанндр _Boroda_ = ObrazecCvet Then
если хоть одна кол-во ячеек поHugo числа, смотрите вБыстро выделить столбецColor indRefColor As Long заливки строки, основываясь любую пустую ячейку
ячеек не будут For Each cellCurrent To xlRange.Columns.Count arResults(indRow, – это скопировать
Т.е. нужно min
создаём свою темуПосмотрите еще и Summa1 = Summa1
из ячеек B5:B16 цвету. Прилагаемый мною: формула из копилки
статье «Преобразовать текст можно так. Выделяем– это шестнадцатеричный
Dim cellCurrent As на значении ячейки? на любом листе
пересчитаны автоматически после In rData If indColumn) = xlRange(indRow,
его и вставить и max значения и прикладываем файл
здесь + c.Value End красного цвета, то пример очень прост,
=Count_CellColor(B2:H2;J2) в число Excel». верхнюю ячейку столбца. код цвета выделенной Range Dim cntResЕсли Вы применили условное Excel. Диапазон указывать этих изменений. Не indRefColor = cellCurrent.Font.Color
indColumn).Interior.Color Next Next в свою рабочую самой длинной волны с примером
Все ответы предусматривают If Next СумЕслиЦвет
ячейка B17 окрашивалась
но могут же
В J2 образец
Примечание:
Нажимаем на клавишу ячейки, в нашем As Long Dim форматирование, чтобы задать
не нужно, но ругайте нас, это Then sumRes = GetCellColor = arResults книгу. за год, такbaneska использование макросов. Если = Summa1 End бы тоже в возникнуть и другие цвета.Мы стараемся как F8 и ставим случае sumRes Dim cntCells цвет заливки ячеек необходимо в скобках не погрешности кода
WorksheetFunction.Sum(cellCurrent, sumRes) End Else GetCellColor =Считаем и суммируем по
я понял?: Добрый вечер. :) для вас это Function красный цвет. В
условия!Hugo можно оперативнее обеспечивать курсор в нижнююD2 As Long Dim в зависимости от указать любую ячейкуНа самом деле, это If Next cellCurrent xlRange.Interior.Color End If
planetaexcel.ru
Посчитать количество цветных ячеек
цвету, когда ячейкиbaneska
С помощью УФ
сложно, тогда зарегистрируйтесьByronel этом файле вложеныHugo: Если проблема найти вас актуальными справочными
ячейку столбца. Нажимаем.
indCurCell As Long их значений, и с заливкой нужного
нормальное поведение макросов SumCellsByFontColor = sumRes End Function Function раскрашены вручную: я выделила цветом на любом из
: сразу предупреждаю, с
две функции, т.к.: Так я тоже копилку — вот материалами на вашем левую мышку.Если у Вас возникли cntRes = 0 теперь хотите посчитать цвета, например, в Excel, скриптов End Function GetCellFontColor(xlRange As Range)Считаем сумму и количествоYouGreed нужные ячейки (столбец предложенных форумов и VBA работал давно в моем excel сперва проверил на точный адрес языке. Эта страницаИли нажимаем сочетание трудности с добавлением sumRes = 0 количество ячеек определённого=WbkSumCellsByColor(A1) VBA и пользовательскихСохраните рабочую книгу Excel Dim indRow, indColumn ячеек по цвету, Почти. K — разница). там продублируйте свойсоздал модуль, забил можно только так. Вашем файле этуSmersh переведена автоматически, поэтому клавиш «Ctrl» + скриптов в рабочую cntCells = Selection.CountLarge цвета или сумму, и формула вернет
функций (UDF). Дело в формате As Long Dim
во всей книгеНе обязательно самой Теперь, для моей вопрос туда этот код Заранее спасибо.
UDF. Всё считает.
: Спасибо за помощь,
ее текст может «А». Активная ячейка, книгу Excel, например, indRefColor = ActiveCell.DisplayFormat.Interior.Color значений в них,
сумму всех ячеек в том, что.xlsm arResults() Application.Volatile IfСчитаем и суммируем по длиной. Если их
задачи нужно выполнитьP.S. и сохранил, выбралHugoSmersh но есть один
содержать неточности и при этом, находится ошибки компиляции, не For indCurCell = то у меня в книге, окрашенных
все подобные функции(Книга Excel с xlRange Is Nothing цвету, когда к несколько за год, следующее:
уточните вопрос: Вам имя модуля «test»: А если УФ: Народ, прикрепляю свой
нюанс. Я пользуюсь грамматические ошибки. Для
в таблице. работающие формулы и 1 To (cntCells для Вас плохие в этот же вызываются только изменением поддержкой макросов).Если Вы Then Set xlRange ячейкам применены правила к примеру две1. надо посчитать кол-во и в конце поменять?
файл. Посмотрите,плиз, что корпоративной версией 2003
нас важно, чтобыО других сочетаниях так далее, Вы
CyberForum.ru
Как автоматически считать в эксель ячейки разного цвета
— 1) If новости – не цвет.
данных на листе, не слишком уверенно = Application.ThisCell End условного форматирования волны за один
Посчитать количество волн, желтыч ячеек или добавилось 2 строки
Hugo я делаю не
Excel. В списках
эта статья была клавиш, чтобы выделить
можете скачать рабочую indRefColor = Selection(indCurCell).DisplayFormat.Interior.Color
существует универсальной пользовательской
Здесь Вы найдёте самые но Excel не
чувствуете себя с If If xlRange.CountПредположим, у Вас есть год, то нужны группы выделенных ячеек, вам нужна сумма»Sub test(): Вернее это условие
так. Надстройки подключаю
формл такой нет вам полезна. Просим ячейки, смотрите в книгу Excel с Then cntRes = функции, которая будет
важные моменты по расценивает изменение цвета VBA, то посмотрите > 1 Then таблица заказов компании, min и max
с сортировкой по во всех желтыхEnd Sub» с формулой нужно как описано на и он ее вас уделить пару
Народ подскажите как посчитать сумму ячеек выделенных цветом (Народ подскажите как посчитать сумму ячеек выделенных цветом)
статье «Сочетание клавиш примерами и с cntRes + 1 по цвету суммировать
всем функциям, использованным шрифта или заливки подробную пошаговую инструкцию ReDim arResults(1 To в которой ячейки значения за обе годам.
ячейках ?забил внутрь текст первым поставить, затем сайте (через сервис-надстройки-пакет
не понимает :-( секунд и сообщить, в Excel». готовыми к использованию
sumRes = WorksheetFunction.Sum(Selection(indCurCell), или считать количество нами в этом ячейки как изменение и массу полезных
xlRange.Rows.Count, 1 To в столбце волны.
Например, в 1914 годуМи
функций — пишется уже два других. анализа) Я Ваш Есть какой-нибудь другой помогла ли онаЧетвертый способ
функциями sumRes) End If
ячеек и выводить примере, а также данных. Поэтому, после советов в учебнике xlRange.Columns.Count) For indRowDelivery
YouGreed их нет, а
: В EXEL нет компайл ерор, ожидаетсяSmersh пример скопировал в способ? вам, с помощью.CountCellsByColor Next MsgBox «Count=» результат в определённые
пару новых функций, изменения цвета ячеек Как вставить и = 1 Toраскрашены в зависимости: baneska, Просмотрите файл. в 1915 -
excelworld.ru
Посчитать количество выделенных цветом ячеек. (Формулы/Formulas)
формул, которые бы End Sub, в
: Да этот вариант, строку формул иЮрий М кнопок внизу страницы.Посчитать количество строки & cntRes &
ячейки. По крайней которые определяют коды вручную, просто поставьте запустить код VBA xlRange.Rows.Count For indColumn от их значений:baneska одна волна (т.е. различали ячейки по чем ошибка? я тоже рассматривал. нажал зеленую галочку.: Это ведь НАДСТРОЙКА.
Для удобства также можно с помощьюSumCellsByColor vbCrLf & «Sum= мере, я не цветов. курсор на любую в Excel. = 1 ToDue in X Days
: имеется в виду цвету, только пои попутно вопрос Пример все-таки неHugo Подключите её и приводим ссылку на
функции «Автосумма» в Excel, и испытать их » & sumRes слышал о такихЗамечание:
ячейку и кликнитеКогда все закулисные действия
xlRange.Columns.Count arResults(indRow, indColumn)– оранжевые,
YouGreed
последовательно выделенные, без адресу — как узнать совсем удачный, наверное.
: У меня тоже
всё заработает. оригинал (на английском
. Выделяем ячейку, в на своих данных.
& vbCrLf &
функциях, а жаль
Пожалуйста, помните, чтоF2
будут выполнены, выберите = xlRange(indRow, indColumn).Font.Color
Delivered, Боже, вы гений.
перерывов)
Эля коробицына
код цвета, насколько
Просто делается универсальная не работает, еслиGuest языке) . которой будет стоять
Урок подготовлен для Вас vbCrLf & _Конечно, Вы можете найти все эти формулы
, а затем ячейки, в которые Next Next GetCellFontColor
– зелёные, Спасибо вам большое;
: с помощью условного я понял именно таблица, в которой как критерий указывать: Это ведь НАДСТРОЙКА.Если к одной или
цифра количества строк. командой сайта office-guru.ru «Color=» & Left(«000000», тонны кода VBA будут работать, еслиEnter нужно вставить результат, = arResults ElsePast Due большое!! )))2. форматирования, оно скорее его значение нужно
имеено заточено будет ячейку с УФ.
Подключите её и нескольким ячейкам на Нажимаем стрелку уИсточник: https://www.ablebits.com/office-addins-blog/2013/12/12/count-sort-by-color-excel/ 6 — Len(Hex(indRefColor))) в интернете, который
excelworld.ru
Вы уже добавили
Количество и сумма ячеек по цвету в 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 посчитать количество ячеек по цвету ячейки или цвету текста
Мы с вами уже рассматривали вопрос о том как посчитать в 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 в последних версиях научился, то суммировать по цвету до сих пор не умеет.
Чтобы исправить этот существенный недостаток можно использовать несложную пользовательскую функцию на 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, и испытать их на своих данных.
СчетЯчеек_Заливка
Данная функция является частью надстройки MulTEx
- Описание, установка, удаление и обновление
- Полный список команд и функций MulTEx
- Часто задаваемые вопросы по MulTEx
- Скачать MulTEx
Подсчет ячеек по цвету заливки
Функция подсчитывает количество ячеек, заливка которых имеет определенный цвет. Может пригодиться, если ведется учет каких-либо соревнований и каждое место в туре имеет свой цвет ячейки. После заполнения такая таблица может и выглядит очень наглядно, но подсчитать количество первых мест, вторых, третьих становится большой проблемой, ведь в Excel до сих пор нет функций, способных суммировать/подсчитывать ячейки по цвету.
Вызов команды через стандартный диалог:
Мастер функций—Категория «MulTEx»— СчетЯчеек_Заливка
Вызов с панели MulTEx:
Сумма/Поиск/Функции — Математические — СчетЯчеек_Заливка
Синтаксис:
=СчетЯчеек_Заливка( $E$2:$E$20 ; $E$7 ; I13 ; $A$2:$A$20 )
ДиапазонСчета( $E$2:$E$20 ) — диапазон значений для подсчета. Можно указать несколько столбцов. Столбец с критерием(если планируется считать еще и по критерию) не обязательно должен входит в диапазон.
ЯчейкаОбразец( $E$7 ) — ячейка-образец с цветом заливки. Ячейки с этим цветом будут подсчитаны.
Критерий( I13 ) — необязательный аргумент. Если указан, то подсчитываются ячейки с указанным критерием и цветом заливки. Допускается применение в критерии символов подстановки — «*» и «?» . Например, для подсчета только ячеек, в которых содержится слово «мир» необходимо указать в качестве критерия — «*мир*» . Если необходимо посчитать количество непустых ячеек с указанным цветом заливки, то можно указать критерий: «*?*» . Если не указан, то подсчитываются все ячейки с указанным цветом заливки.
Так же данный аргумент может принимать в качестве критерия символы сравнения ( , =, <>, ):
- «>0» — будут просуммированы все ячейки в столбце суммирования, значения ячеек критериев для которых больше нуля;
- «>=2» — будут просуммированы все ячейки в столбце суммирования, значения ячеек критериев для которых больше или равно двум;
- » — будут просуммированы все ячейки в столбце суммирования, значения ячеек критериев для которых меньше нуля;
- » — будут просуммированы все ячейки в столбце суммирования, значения ячеек критериев для которых меньше или равно 60;
- «<>0″ — будут просуммированы все ячейки в столбце суммирования, значения ячеек критериев для которых не равно нулю;
- «<>» — будут просуммированы все ячейки в столбце суммирования, значения ячеек критериев для которых не пустые;
Вместо нуля может быть любое число или текст. Так же можно добавить ссылку на ячейку со значением: «<>«&D$1
ДиапазонКритерия( $A$2:$A$20 ) — Необязательный аргумент. Указывается диапазон, в котором следует искать критерий(если критерий указан). ДиапазонКритерия должен быть равен по количеству ячеек ДиапазонуСчета. Если ДиапазонКритерия не указан, то критерий просматривается в ДиапазонеСчета.
ИспУФ() — Необязательный аргумент. Допускается указание логических значений ИСТИНА(TRUE) или ЛОЖЬ(FALSE). По умолчанию принимает значение ИСТИНА. Если указан как ИСТИНА, то функция будет подсчитывать ячейки с учетом примененного к ним условного форматирования. Если указан как ЛОЖЬ, то функция будет подсчитывать ячейки без учета примененного условного форматирования, т.е. даже если условное форматирование применено и ячейка окрашена с его помощью, а реальный цвет заливки не соответствует цвету ЯчейкиОбразца — то она не будет подсчитана.
Функция подсчитывает любые ячейки, заливка которых равна заливке ячейки-образца. Даже если ячейка будет пустая, но заливка будет равна указанной — ячейка будет подсчитана. Чтобы подсчитать только заполненные ячейки в качестве критерия следует указать — «*?*» , а ДиапазонКритерия не указывать.
Важно: Функция не вычисляется при изменении цвета заливки. Для пересчета функции после изменения параметров необходимо выделить ячейку и нажать F2—Enter. Либо нажать сочетания клавиш Shift+F9(пересчет функций активного листа) или клавишу F9(пересчет функций всей книги)
Примечание: данная функция будет корректно работать даже при примененном к ячейке Условном форматировании. Однако если в ячейке/диапазоне присутствуют условия, формат для которых задан при помощи шкал, градиентов, гистограмм и значков — функция может вернуть некорректный результат. Связано это с тем, что Excel не предоставляет доступ к данным типам УФ извне.