710

Сумма ячеек по цвету, шрифту, формату и т.д

Допустим вы используете таблицу с числовыми данными, которые для удобства помечаете цветом для последующего их подсчёта. Исходя из названия заголовка рассмотрим, как такое можно реализовать в Excel.

1. Сохраняем документ с поддержкой макросов, хотя его там и не будет, но в данном случае так надо.

2. Нажатием Ctrl+F3 или на вкладке «Формулы» выбираем «Диспетчер имён», где в строке «Имя» вводим название формулы ЦветЯчейки, а в поле «Диапазон» саму формулу: =ПОЛУЧИТЬ.ЯЧЕЙКУ(63;ДВССЫЛ("RC[-1]";0))

=GET.CELL(63;INDIRECT("RC[-1]";0))

Я не буду грузить читателя разъяснением значений этой формулы, главное, чтобы всё работало, не так ли?)) Отмечу лишь, что 63 это код цвета заливки, заменяя который, можно подсчитывать ячейки по формату, шрифту, выделению курсивом и т.п.

Вот таблица с кодами и их значениями:

3. В соседнюю от цветной ячейки вводим «равно» и имя созданной формулы ЦветЯчейки, затем протягиваем её вниз. В результате отображаются коды цветов, которые будут необходимы нам для подсчёта.

4. Теперь с помощью формулы =СУММЕСЛИ(B2:B12;10;A2:A12) можно посчитать сумму цветных ячеек, где 10 это код цвета, для жёлтых - 6:

=SUMIF(B2:B12;10;A2:A12)

Созданная формула =ЦветЯчейки определяет 56 цветов. На некоторые цветовые гаммы он реагирует некорректно, так что любителям 50 оттенков серого придётся воспользоваться хардкорным чёрным или серым))

Вот пример палитры «твёрдых» цветов:

Следует учесть, что Excel при изменении цвета ячейки автоматически не совершит пересчёт данных, для этого необходимо заново ввести формулу, либо нажать Ctlr+Alt+F9, что гораздо проще и быстрее.


Также на этот случай есть макрос,


1. Нажимаем Alt+F11 и в открывшемся окне вводим следующий текст


Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double

Dim Sum As Double

Application.Volatile True


For Each cell In DataRange

If cell.Interior.Color = ColorSample.Interior.Color Then

Sum = Sum + cell.Value

End If

Next cell

SumByColor = Sum

End Function


2. В разделе «Формулы» - «Вставить функцию» выбираем категорию «Определенные пользователем», где указываем нашу функцию, которой задаём диапазон подсчёта и образец цвета:

И получаем результат:

Чтобы макрос учитывал не цвет заливки фона, а цвет шрифта ячейки, в шестой строке заменяем свойство Interior на Font в обеих частях выражения.


Для подсчёта количества цветных ячеек, а не суммы, заменяем в седьмой строке Sum = Sum + cell.Value на Sum = Sum + 1


Как и в первом варианте, макрос также не может подсчитать сумму ячеек автоматически, поэтому после произведённых изменений нажимаем клавишу F9.


Если значения в Вашей таблице окрашены в различные цвета и нужно их пересчитать по отдельности, то просто замените ячейку с образцом на цвет из таблицы и нажав F9 получите мгновенный результат.

Также используя ту же формулу, заменив лишь ячейку с образцом, можно вывести сумму и в другой ячейке.


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


P.S. Уважаемые подписчики, посты про Excel будут выходить по понедельникам

MS, Libreoffice & Google docs

762 поста14.9K подписчика

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Я обычно просто фильтрую по цвету и снижу ставлю сумму.

раскрыть ветку (8)
2
Автор поста оценил этот комментарий

Посмотрите мой предыдущий пост формула =СУММЕСЛИ(B2:B15;"Доход";C2:C15) слово доход замените на своё

раскрыть ветку (7)
0
Автор поста оценил этот комментарий
Товарищ Гуру, подскажите как вместо "Доход" указать условие заливка красным например. Голову сломал не могу сделать.
раскрыть ветку (6)
2
Автор поста оценил этот комментарий

С помощью стандартных инструментов Excel такое сделать не получится, здесь в любом случае надо будет писать собственную функцию в VBA. Вот готовый макрос:


Option Explicit

Function SUMIFCOLOR(rgCellsToSum As Range, rgColorSample As Range)

Dim rgCellChecked As Range

Dim dblSum As Double

Dim intColorIndex As Integer

intColorIndex = rgColorSample.Interior.ColorIndex

For Each rgCellChecked In rgCellsToSum

If rgCellChecked.Interior.ColorIndex = intColorIndex Then

dblSum = dblSum + rgCellChecked.Value

End If

Next rgCellChecked

SUMIFCOLOR = dblSum

End Function


1. Скопируйте весь код

2. С помощью Alt+F11 откройте окно VBA

3. Вставьте новый модуль (Insert->Module)

4. Просто вставьте в новый модуль весь код выше

5. Сохраните файл (поскольку в файле теперь макрос, сохранять надо в формате xlsm –«Книга Excel с поддержкой макросов)


Всё, теперь Вы можете использовать эту пользовательскую функцию. То есть абсолютно привычным образом пишите знак равно в нужной ячейке, прописываете название функции и вводите оба параметра функции. Параметры такие:

1. Суммируемый диапазон

2. Ячейка, которая содержит требуемый цвет (пример использования смотрите на скриншоте)

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Спасибо !!!! Работает
0
Автор поста оценил этот комментарий
Вам нужно в "Условном форматировании" указать соответствующие ячейки, дальше знаете как?
раскрыть ветку (3)
0
Автор поста оценил этот комментарий
Через условное форматирование не получается, так как в этих ячейках ещё могут быть значения а могут и не быть
раскрыть ветку (2)
0
Автор поста оценил этот комментарий
У меня сейчас нет компьютера, поэтому точного ответа вам дать не могу(

@VBA.Excel, можешь помочь с решением?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Да, сегодня отвечу)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку