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 инструментов, которые помогут вам объединить данные из разных листов, удалить дубликаты, сравнить листы на совпадения и различия и многое другое.
Надеюсь, теперь сумма по цвету и подсчет ячеек по цвету для вас не будут сложными. Если же будут вопросы – не стесняйтесь задавать их в комментариях.
pashulka, согласен по поводу макросов… Думал, что есть метод, встроенный в excel
Нашел вариант подсчета без указания переменной стиля. Удобен вариант тем, что при настройке формулы просто указываешь ту ячейку, совпадение форматирования с которой нужно подсчитать.
Visual Basic | ||
|
формула подсчета выглядит как =ColorFunction($RP$216;RP2:RP237;ЛОЖЬ)
первая позиция — та ячейка, совпадение со стилем которой мы ищем. на нее ссылка должна быть абсолютной. иначе при копировании формулы получим глупость.
Второй параметр — диапазон ячеек, в котором ведем подсчет.
Третий параметр — опциональный. Честно говоря, я не понял, зачем он введен в функцию.
ОБРАЩАЮ ВНИМАНИЕ!!! Функция найдена в книге Рейны Холи, Дэвида Холи «Excel. Трюки: 100 профессиональных примеров», 2007, 287 страниц, на страницах 219-220. Кстати, очень рекомендую книжку.
Как посчитать кол-во ячеек с условным форматированием?
Привет
Допустим у меня есть колонка, где я условным форматированием обозначаю все ячейки такой-то даты зеленым цветом.
Как мне внизу вывести кол-во таких ячеек?
-
Вопрос заданболее трёх лет назад
-
1519 просмотров
Привет
Если именно так решать задачу, то без скрипта не обойтись — забирать цвет ячеек в массив и считать кол-во элементов нужного цвета.
Но почему нельзя повторить логику условного форматирования в формуле с COUNTIF?
Можете дать пример файла?
нашел еще такой вариант:
в гуглотаблицах в Дополнениях есть Custom Count and Sum
Под нужным столбцом пишем:
=COUNTBACKGROUNDCOLOR(«AF3:AF102»; «AF3»)
Где AF3:AF102 это диапазон ячеек
а AF3 это ячейка с цветом, который нас интересует
Пригласить эксперта
-
Показать ещё
Загружается…
15 апр. 2023, в 23:37
1000 руб./в час
15 апр. 2023, в 23:24
25000 руб./за проект
15 апр. 2023, в 21:40
2000 руб./за проект
Минуточку внимания
Увидев результат условного форматирования, вы, вероятно, захотите создать формулы, ссылающиеся только на данные, которые подверглись условному форматированию. В Excel не очень хорошо реализована такая возможность, но мы поможем ему.
Пользователи Excel регулярно задают вопрос, как можно провести вычисления только с ячейками определенного фонового цвета. Этот вопрос возникает так часто, потому что в Excel не предусмотрена стандартная функция для выполнения этой задачи; однако это можно сделать при помощи пользовательской функции, как демонстрирует Трюк № 88 «Подсчет или суммирование ячеек с определенным цветом заливки».
Единственная неприятность при использовании пользовательской функции — она не понимает форматирование, наложенное при помощи условного форматирования. Однако, немного подумав, вы сможете добиться нужного результата, не применяя пользовательскую функцию.
Пусть есть длинный список чисел в диапазоне $А$2:$А$100. Вы наложили на эти ячейки условное форматирование, чтобы помечены были только числа между 10 и 20. Теперь необходимо сложить значения в ячейках, отвечающих только что установленному критерию, а затем выделить сумму значений при помощи условного форматирования. Неважно, какое именно форматирование применяется к этим ячейкам, однако необходимо знать критерий, согласно которому ячейки выделяются (в нашем случае это условие, что значение находится между 10 и 20).
Чтобы сложить диапазон ячеек, отвечающих определенному критерию, можно использовать функцию СУММЕСЛИ (SUMIF)
, но при этом можно указать только один критерий. Если у вас несколько факторов проверки, можно использовать формулу массива. Формулу массива можно записать так:
=SUM(IF($A$2:$A$100>10;IF($A$2:$A$100<20;$A$2:$A$100)))
В русской версии Excel
=СУММ(ЕСЛИ($А$2:$А$100>10;ЕСЛИ($А$2:$А$100<20;$А$2:$А$100)))
[stextbox id=»warning»]При вводе формул массива нажимайте не клавишу Enter, а сочетание клавиш Ctrl+Shift+Enter. После этого Excel поместит фигурные скобки вокруг формулы, чтобы она выглядела так:
{=SUM(IF($A$2:$A$100>10;IF($A$2:$A$100<20;$A$2:$A$100)))}
Если вы поставите скобки самостоятельно, формула не будет работать. Это должен сделать Excel. Помните также, что использование формул массива может замедлить пересчет в Excel, если в этих формулах присутствует слишком много ссылок на большие диапазоны.[/stextbox]
Чтобы больше узнать о формулах массива, посетите страницу http://excel2010.ru/massiv-formuly-massiva-knigax-excel.html
Альтернативный путь
В качестве альтернативы можно использовать дополнительный столбец (например, столбец В) для ссылки на ячейки в столбце А. Эти ссылки будут возвращать результат в столбец В, только если значение отвечает установленному условию, то есть >10, <20. Для этого сделайте следующее:
Выделите ячейку В1 и введите следующую формулу:
=IF(AND(A2>10;A2<20);A2;"")
В русской версии Excel
=ЕСЛИ(И(А2>10;А2<20);А2;"")
Запишите эту формулу в каждую ячейку до ячейки В100. После этого, если в столбце А есть значения, в столбце В должны оказаться значения между 10 и 20.
[stextbox id=»warning»]Чтобы быстро скопировать формулу в соседние ячейки вниз до последней строки, введите формулу в первую ячейку (В2), заново выделите эту ячейку и дважды щелкните маркер заполнения. Это можно сделать и выбрав команду Правка → Заполнить → Вниз (Edit → Fill → Down).[/stextbox]
Теперь выберите любую ячейку, где должна появиться сумма, и воспользуйтесь для сложения стандартной функцией СУММ (SUM). (Можно скрыть столбец В, если вы не хотите видеть дополнительный столбец с возвращенными формулой значениями.)
Оба предыдущих способа хорошо справляются с задачей, однако в Excel предусмотрена еще одна функция, которая позволяет указать несколько условий. Эта функция входит в набор функций баз данных Excel и называется БДСУММ (DSUM)
.
Чтобы проверить ее, используйте тот же набор чисел в диапазоне А2:А100
е ячейки C1:D2
и присвойте этому диапазону имя SumCriteria
, введя его в поле имени слева от строки формул. Теперь выделите ячейку С1 и введите =$А$1
, то есть ссылку на первую ячейку на листе. Скопируйте то же самое в ячейку D1
и вы получите две копии заголовка столбца А. Эти копии будут использоваться как заголовки для условий БДСУММ (DSUM) (C1:D2)
, который вы назвали SumCriteria
.
В ячейке С2 введите >10. В ячейке D2 введите <20. В ячейке, где должен быть результат, введите следующий код:
=DSUM($А$1:$А$100;$А$1;SumCriteria)
В русской версии Excel
=БДСУММ($А$1:$А$100;$А$1;SumCriteria)
Функция ДСУММ (DSUM)
— это предпочтительный и самый эффективный способ работы с ячейками, отвечающими определенному критерию. В отличие от массивов, встроенные функции баз данных разработаны специально для этой цели, и, даже когда они ссылаются на очень большой диапазон и используются в большом количестве, их отрицательное воздействие на скорость пересчета и эффективность достаточно мало по сравнению с формулами массива.
MEP Пользователь Сообщений: 253 |
Коллеги, помогите пожалуйста макросом. Уверяю, что не один час потратил на решение этой задачи, на форуме и в Инете куча макросов по подсчету ячеек, но они почему то категорически отказываются считать условное форматирование. |
Алексей К Пользователь Сообщений: 325 |
|
MEP Пользователь Сообщений: 253 |
да, первым делом туда полез . но там суммирование ЗНАЧЕНИЙ в ячейках по цвету. а мне надо просто посчитать количество закрашенных (можно даже без привязки к цвету) ячеек. в этом разница. находил и для подсчета цветных ячеек функции, но насколько понял они с условным форматированием не дружат |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#4 26.07.2013 20:15:35
Там и количество, насколько я помню, можно считать. Вы ПРОБОВАЛИ эту надстройку, прежде чем утверждать такое? |
||
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#5 26.07.2013 20:17:37 Дмитрий (автор надстройки) пишет:
Разве здесь только о суммах разговор? |
||
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
У вас все есть — в BX-BZ! http://www.planetaexcel.ru/techniques/4/74/ Изменено: Z — 26.07.2013 20:20:04 «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
Алексей К Пользователь Сообщений: 325 |
Юрий М, возможно автор прав. В полной версии надстройки Дмитрия точно есть функция подсчета количества, а в ограниченной ее может и не быть. В общем, надо посмотреть. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Ну для этого нужно хотя бы ПОПРОБОВАТЬ) |
MEP Пользователь Сообщений: 253 |
по вашей настоятельной просьбе еще раз попробовал Summ_CellColor и нифига, выдает ЗНАЧ. еще прочитал маленькую приписку что функция может работать некорректно если условное форматирование задано через формулу. у меня так и есть. может у меня такой случай |
Алексей К Пользователь Сообщений: 325 |
Считает функция CountByCellColor. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Вот здесь подробнее про счёт. |
MEP Пользователь Сообщений: 253 |
#12 26.07.2013 20:39:39
ганта этого я попробовал для своих задач. он тут строит все по порядку пытался там поковырять что бы в разные сроки проставить работников все поломалось и уже не стал разбираться даже. |
||
MEP Пользователь Сообщений: 253 |
Юрий М, по ссылке все равно ЗНАЧ выдает. задаю критерий — мой столбец закрашеный. Color Cell — это ячейка с цветом. критерии не задаю дальше. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#14 26.07.2013 20:45:08
Насколько я понимаю, в качестве критерия должна выступать ЯЧЕЙКА, а не столбец. |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#15 26.07.2013 20:51:34
И это логично. Внутри надстройки есть и Count_CellColor(Диапазон суммирования, Ячейка-образец цвета, Критерий, Номер столбца критерия) Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
Простите, но «по-малярному» подходить к делу — это заблуждение. Изменено: Z — 26.07.2013 21:00:08 «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
MEP Пользователь Сообщений: 253 |
ну это я для примера человек засунул) а если их 107 будет? думал тут помогут. а на форуме моего случая нет. если бы был то Гуру макросонаписания давно бы уже скинули мой пример с решением.. показали бы как надо. а тут только 2 листа переписки. ничего личного. разбирая эту тему итак многое узнал, будем двигаться дальше. если решу. выложу |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#18 26.07.2013 21:18:08
Я эту тему прошерстил уже и скажу Вам так: это очень наблагодарное занятие — работать с УФ через VBA. Там кода на добрых 300 с лишним строк(это я потраченное время на выдумывание алгоритмов не беру еще). И это не все. Сколько было тестирований и прочего…На данный момент у меня лично все это в DLL, не на VBA. Иначе невозможно с такими функциями работать — они по 2-3 минуты каждая могут считаться. Как вариант могу предложить сначала воспользоваться надстройкой: Замена Условного форматирования обычным А затем уже цвет считать любым удобным способом. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
|||
MEP Пользователь Сообщений: 253 |
ВО! в душе я догадывался что эта задача сложнореализуема и все советы типа попробуй то и это это для новичка пустая трата времени. Поэтому и пытал так усердно вас тут. Спасибо, теперь у меня в этой задаче вопросов нет. буду единичками баловаться) как мне тут посоветовали |
Nic70y Пользователь Сообщений: 3289 Win7 MSO 2013 |
#20 26.07.2013 21:27:54 MEP, а что у Вас в столбцах E, F делают 2?
|
||
MEP Пользователь Сообщений: 253 |
интересный вариант, но в моем примере он не заработал( |
Nic70y Пользователь Сообщений: 3289 Win7 MSO 2013 |
Странно… Прикрепленные файлы
|
MEP Пользователь Сообщений: 253 |
#23 26.07.2013 21:40:37 совсем забыл что массив запускается через ctrl shitft enter спасибо. это решение подойдет |