Вычисление по формату ячеек в excel

Влияние формата ячеек на работу функции СУММ

При работе с функцией СУММ() в Excel следует учитывать особенности форматов данных, которые могут влиять на итоговые суммы при вычислениях.

Стоит обратить внимание на поведение самих форматов при работе с разными типами значений. При определенных условиях они могут автоматически изменяться и по-разному.

Ошибки суммирования при точке вместо запятой

Заполните ячейки значениями как показано на рисунке (в ячейке B2 точка вместо запятой):

Исходные данные с ошибкой.

Выделите диапазон A1:B3. Потом нажмите на закладке «Главная» инструмент «Сумма» (или нажмите ALT+=), чтобы автоматически просуммировать столбцы по отдельности.

Точка вместо запятой для Excel является текстом по умолчанию. Функция СУММ() пропускает текстовые значения при суммировании ячеек. В результате мы видим разные суммы.

Результат суммирования чисел и текста.

Данная ошибка является опасной, особенно когда в таблице много данных. Во-первых, ее легко допустить, а во-вторых трудно заметить. Поэтому Excel в формате по умолчанию «Общий» выравнивает текст по левой стороне, а числа по правой. Если суммы не сходятся, стоит всем ячейкам задать формат «Общий», чтобы найти, где вместо запятой стоит точка. Но есть еще лучший способ.



Как найти текст в числовых значениях?

Чтобы быстро найти все ячейки, где точка вместо запятой нужно сделать следующее:

  1. Выберите инструмент «Главная»-«Найти и выделить»-«Перейти» (или нажмите комбинацию горячих клавиш CTRL+G).
  2. Окно переход.

  3. В появившимся окне нажмите на кнопку «Выделить».
  4. В окне «Выделение группы ячеек» нужно выбрать опцию «Константы» и отметить галочкой только «Текст». После чего нажать ОК.

Выделение групп ячеек.

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

Результат поиска текстовых значений.

Если точек слишком много, можно использовать инструмент «Главная»-«Найти и выделить»-«Заменить» (или комбинация клавиш CTRL+H). Он позволит в Excel заменить точку, на запятую – автоматически.

Инструмент найти и заменить.

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

Хитрости »

30 Сентябрь 2016              10150 просмотров


Подсчитать сумму ячеек по формату

Несколько нестандартная задача: получить сумму ячеек отдельно для долларов, отдельно для евро, отдельно для рублей, но в таблице они при этом записаны вперемешку:
Суммирование ячеек по формату
И все эти доллары и рубли заданы для ячеек через формат ячеек(правая кнопка мыши на ячейке —Формат ячеек(Format Cells) -вкладка Число(Number)).
Ни одна стандартная функция в Excel этого делать не умеет, т.к. не различает подобные форматы ячеек. Поэтому я решил написать функцию пользователя(UDF), которая исправляет эту несправедливость.
Если не знаете что такое функция пользователя советую сначала прочитать статью: Что такое функция пользователя(UDF)?.
При этом функция может работать только с видимыми ячейками. Т.е. если отфильтровать диапазон, то функция подсчитает данные только отфильтрованных ячеек.

Option Explicit
 
'---------------------------------------------------------------------------------------
' Procedure : SumByNumberFormat
' Author    : The_Prist(Щербаков Дмитрий)
'             http://www.excel-vba.ru
' Purpose   : Функция суммирования ячеек на основе формата ячейки.
' Аргументы:
'             rRange     - диапазон с ячейками для суммирования.
'             rTemplCell - ячейка-образец формата ячейки
'             bSumHide   - ИСТИНА или 1 учитывает скрытые ячейки.
'                          ЛОЖЬ, 0 или опущен(по умолчанию) - скрытые ячейки не суммируются.
'---------------------------------------------------------------------------------------
Function SumByNumberFormat(rRange As Range, rTemplCell As Range, Optional bSumHide As Boolean = False)
    Application.Volatile  'закомментировать, чтобы функция не обновляла свои значения по нажатию Shift+F9(пересчет листа)
    Dim sFormat As String, rCell As Range, dblSum As Double, vVal
    sFormat = rTemplCell.NumberFormatLocal
    For Each rCell In rRange
        If rCell.NumberFormatLocal = sFormat Then
            vVal = rCell.Value
            If IsNumeric(vVal) Then
                If rCell.EntireRow.Hidden Or rCell.EntireColumn.Hidden Then
                    If bSumHide Then dblSum = dblSum + vVal
                Else
                    dblSum = dblSum + vVal
                End If
            End If
        End If
    Next rCell
    SumByNumberFormat = dblSum
End Function

Синтаксис функции:
без учета скрытых строк и столбцов:
=SumByNumberFormat($A$1:$A$10;B1)
все ячейки:
=SumByNumberFormat($A$1:$A$10;B1;1)

rRange($A$1:$A$10) — ссылка на диапазон с ячейками для суммирования.
rColorCell(B1) — ссылка на ячейка-образец с форматом ячейки.
bSumHide — Если указано ИСТИНА или 1 учитывает скрытые ячейки. ЛОЖЬ, 0 или опущен(по умолчанию) — скрытые ячейки не суммируются.

Как можно применить. Если посмотреть на картинку выше, то в ячейках D2:D4 уже просуммированы данные на основании формата приведенной выше функцией пользователя:

    в D2: =SumByNumberFormat($A$2:$A$8;C2)
    в D3: =SumByNumberFormat($A$2:$A$8;C3)
    в D4: =SumByNumberFormat($A$2:$A$8;C4)

в столбце С при этом заданы нужные форматы для суммирования. Чтобы теперь определить сумму в единой валюте(например, в рублях), можно записать в ячейки Е3 и Е4 курс доллара и евро(для этого можно использовать функцию из этой статьи — Получить курс валют от ЦБР). После чего в отдельной ячейке записать формулу: =СУММ(D2;D3*E3;D4*E4)
Ниже приложен файл, в котором уже прописана функция и пример суммирования разных валют:
Скачать пример

  SumByFormat.xls (56,5 KiB, 1 076 скачиваний)


 

Чтобы подсчитывалось количество ячеек, а не их сумма, то функцию надо изменить самую малость:

'---------------------------------------------------------------------------------------
' Procedure : CountByNumberFormat
' Author    : The_Prist(Щербаков Дмитрий)
'             http://www.excel-vba.ru
' Purpose   : Функция подсчета ячеек на основе формата ячейки.
' Аргументы:
'             rRange     - диапазон с ячейками для суммирования.
'             rTemplCell - ячейка-образец формата ячейки
'             bSumHide   - ИСТИНА или 1 учитывает скрытые ячейки.
'                          ЛОЖЬ, 0 или опущен(по умолчанию) - скрытые ячейки не подсчитываются
'---------------------------------------------------------------------------------------
Function CountByNumberFormat(rRange As Range, rTemplCell As Range, Optional bSumHide As Boolean = False)
    Application.Volatile  'закомментировать, чтобы функция не обновляла свои значения по нажатию Shift+F9(пересчет листа)
    Dim sFormat As String, rCell As Range, lCnt As Long, vVal
    sFormat = rTemplCell.NumberFormatLocal
    For Each rCell In rRange
        If rCell.NumberFormatLocal = sFormat Then
            vVal = rCell.Value
            If IsNumeric(vVal) Then
                If vVal <> 0 Then
                    If rCell.EntireRow.Hidden Or rCell.EntireColumn.Hidden Then
                        If bSumHide Then lCnt = lCnt + 1
                    Else
                        lCnt = lCnt + 1
                    End If
                End If
            End If
        End If
    Next rCell
    CountByNumberFormat = lCnt
End Function

Синтаксис и аргументы полностью идентичны с функцией SumByNumberFormat.

Что следует учитывать: функции подсчитывают и суммируют ячейки на основании формата, установленного вручную с панели. Если форматы ячеек созданы при помощи условного форматирования, то функции не определят формат такой ячейки. Это связано с особенностями создания визуального изменения свойств ячейки при помощи условного форматирования.

Так же функции не будут автоматически обновлять значения сразу после смены формата ячеек — это особенность Excel. Поэтому при изменении формата ячеек в вычисляемом диапазоне необходимо вручную пересчитать функцию(F2 -Enter).


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Ранее я описал, как с помощью пользовательской функции найти сумму значений в ячейках, выделенных цветом. К сожалению, эта функция не работает, если ячейки раскрашены с помощью условного форматирования. Я обещал «доработать» функцию. Но за два года, прошедшие с публикации той заметки, я не смог ни самостоятельно, ни с помощью информации из Интернета написать удобоваримый код… (Дополнение от 29 марта 2017 г. Спустя еще пять лет, код мне всё же удалось написать; см. заключительную часть заметки). И вот недавно я наткнулся на идею, содержащуюся в книге Д.Холи, Р. Холи «Excel 2007. Трюки», которая позволяет обойтись вовсе без кода.

Пусть есть список чисел от 1 до 100, размещенных в диапазоне А1:А100 (рис. 1; см. также лист «СУММЕСЛИ» Excel-файла) [1]. На диапазон наложено условное форматирование, помечающее ячейки, содержащие числа больше 10 и меньше или равно 20.

Рис. 1. Диапазон чисел; условным форматированием выделены ячейки, содержащие значения от 10 до 20

Скачать заметку в формате Word, примеры в формате Excel

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

Чтобы сложить диапазон ячеек, отвечающих одному критерию, можно использовать функцию СУММЕСЛИ (рис. 2).

Рис. 2. Суммирование ячеек, отвечающих одному условию

Если у вас несколько условий, можно использовать функцию СУММЕСЛИМН (рис. 3).

Рис. 3. Суммирование ячеек, отвечающих нескольким условиям

Для подсчета числа ячеек, отвечающих одному критерию, можно использовать функцию СЧЁТЕСЛИ.

Для подсчета числа ячеек, отвечающих нескольким критериям, можно использовать функцию СЧЁТЕСЛИМН.

В Excel предусмотрена еще одна функция, которая позволяет указать несколько условий. Эта функция входит в набор функций баз данных Excel и называется БДСУММ. Чтобы проверить ее, используйте тот же набор чисел в диапазоне А2:А100 (рис. 4; см. также лист «БДСУММ» Excel-файла).

Рис. 4. Использование функций баз данных

Выделите ячейки C1:D2 и присвойте этому диапазону имя Критерий, введя его в поле имени слева от строки формул. Теперь выделите ячейку С1 и введите =$А$1, то есть ссылку на первую ячейку на листе, содержащую имя базы данных. Введите =$А$1 в ячейку D1 и вы получите две копии заголовка столбца А. Эти копии будут использоваться как заголовки для условий БДСУММ (C1:D2), который вы назвали Критерий. В ячейке С2 введите >10. В ячейке D2 введите <=20. В ячейке, где должен быть результат, введите следующую формулу:

=БДСУММ($А$1:$А$101,1,Критерий)

Для подсчета числа ячеек, отвечающих нескольким критериям, можно использовать функцию БСЧЁТ.

Дополнение от 29 марта 2017 г.

Читая книгу Джона Уокенбаха Excel 2010. Профессиональное программирование на VBA я узнал, что, начиная с версии Excel 2010 в VBA появилось новое свойство DisplayFormat (см., например, Range.DisplayFormat Property). Т.е., VBA может считывать формат, отображаемый на экране. При этом не важно, как он был получен, прямыми настройками пользователя, или с помощью условного форматирования. К сожалению, разработчики MS сделали так, что свойство DisplayFormat работает только в процедурах, вызываемых из VBA, а пользовательские функции на основе этого свойства выдают ошибку #ЗНАЧ! Тем не менее, получить сумму значений в диапазоне по ячейкам определенного цвета, можно с помощью процедуры (макроса, но не функции). Откройте Excel-файл с примером (содержит код VBA). Пройдите по меню Вид -> Макросы -> Макросы; в окне Макрос, выделите строку СумЦветУсл, и нажмите Выполнить. Запустится макрос, выберите диапазон суммирования и критерий. Ответ появится в окне.

Код процедуры

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

Sub СумЦветУсл()

    Application.Volatile True

    Dim SumColor As Double

    Dim i As Range

    Dim UserRange As Range

    Dim CriterionRange As Range

    SumColor = 0

‘   Запрос диапазона

    Set UserRange = Application.InputBox( _

        Prompt:=»Выберите диапазон суммирования», _

        Title:=»Выбор диапазона», _

        Default:=ActiveCell.Address, _

        Type:=8)

   Запрос критерия

    Set CriterionRange = Application.InputBox( _

        Prompt:=«Выберите критерий суммирования», _

        Title:=«Выбор критерия», _

        Default:=ActiveCell.Address, _

        Type:=8)

   Суммирование «правильных» ячеек

    For Each i In UserRange

        If i.DisplayFormat.Interior.Color = _

               CriterionRange.DisplayFormat.Interior.Color Then

           SumColor = SumColor + i

        End If

    Next

    MsgBox SumColor

End Sub

Хотя пользовательская функция и дает ошибку, но в процессе ее вызова можно «подсмотреть» ответ. В ячейке начните набирать формулу =su…

Воспользуйтесь подсказкой, кликнув на нее, а затем нажмите знак функции в строке формул:

Введите аргументы, и увидите ответ. К сожалению, нажав, ОК, получите в ячейке значение ошибки.


[1] Массив я создал с помощью функции =СЛУЧМЕЖДУ(1;100)

В этой статье описываются принципы отображения в Excel чисел в процентах, а также предлагаются примеры вычисления процентов на листах.

В этой статье

  • Как Excel обрабатывает проценты

  • Отображение чисел в процентах

  • Советы по отображению процентов

  • Примеры вычисления процентов

    • Пример 1. Увеличение или уменьшение числа на заданное количество процентов

    • Пример 2. Вычисление значения на основе процента

    • Пример 3. Вычисление процента на основе двух значений

    • Пример 4. Вычисление значения на основе другого значения и процента

    • Пример 5. Вычисление разницы между двумя числами и ее отображение в процентах

Как Excel обрабатывает проценты

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

  • Форматирование ячеек, уже содержащих числа.    При применении процентного формата к существующим числам в книге Excel эти числа умножаются на 100. Например, если ячейка содержит число 10, оно будет умножено на 100, т. е. после применения процентного формата в ячейке будет отображаться значение 1000,00%, что может отличаться от ожидаемого результата. Чтобы процентные значения отображались точно, перед применением процентного формата следует убедиться в том, что числа вычислены как проценты и отображаются в десятичном формате. Проценты вычисляются с использованием формулы сумма /итог = процент. Например, если ячейка содержит формулу =10/100,результатом вычисления будет 0,1. Если применить к ячейке с числом 0,1 процентный формат, число будет правильно отображено как 10%. Дополнительные сведения о вычислении процентов см. в разделе Примеры вычисления процентов.

  • Форматирование пустых ячеек.    Если применить процентный формат к пустым ячейкам, пересчет вводимых чисел в проценты выполняется по другим правилам. Числа, большие или равные 1, преобразуются в проценты по умолчанию, а числа, меньшие 1, для пересчета в проценты умножаются на 100. Например, если ввести 10 или 0,1, результат будет одинаковым — 10,00%. (Если отображение двух нулей после десятичной запятой не требуется, от них легко избавиться, выполнив действия, описанные в приведенной ниже процедуре.)

К началу страницы

Отображение чисел в процентах

Чтобы быстро применить процентное форматирование к выбранным ячейкам, нажмите кнопку Процентный Изображение кнопки в группе Число на вкладке Главная или нажмите CTRL+SHIFT+%. Если необходимо более точно задать формат или изменить другие параметры форматирования для выделенного фрагмента, выполните действия, описанные ниже.

  1. На вкладке Главная в группе Число щелкните значок рядом с полем Число, чтобы открыть диалоговое окно Формат ячеек.

    Кнопка вызова диалогового окна в группе "Число"

  2. В диалоговом окне Формат ячеек в списке Числовые форматы выберите пункт Процентный.

    Процентный формат в диалоговом окне "Формат ячеек"

  3. В поле Число десятичных знаков введите требуемое число знаков после запятой. Например, чтобы ячейка содержала значение 10%, а не 10,00%, введите в поле Число десятичных знаков0.

К началу страницы

Советы по отображению процентов

  • Чтобы сбросить формат чисел в выбранных ячейках, в списке Числовые форматы выберите пункт Общий. Ячейки, к которым применен формат Общий, не имеют специального числового формата.

  • Если необходимо выделить отрицательные процентные значения (например, отображать их красным цветом), можно создать пользовательский числовой формат (диалоговое окно Формат ячеек, вкладка Число, категория (все форматы)). Формат должен иметь приблизительно следующий вид: 0,00%;[Красный]-0,00%. После применения этого формата к ячейкам положительные процентные значения будут отображаться цветом текста по умолчанию, а отрицательные — красным цветом. Часть формата после точки с запятой обозначает форматирование, которое применяется к отрицательным значениям.

    Пользовательский числовой формат

    Подобным образом можно настроить отображение отрицательных процентных значений в скобках, создав, например, следующий пользовательский формат: 0,00%_);(0,00%). Подробнее об этом см. в статье Создание и удаление пользовательских числовых форматов.

  • Для настройки отображения отрицательных процентных значений в книге можно также использовать условное форматирование (вкладка Главная, группа Стили, Условное форматирование). Созданное правило условного форматирования должно выглядеть примерно так же, как правило, приведенное в примере ниже. Данное правило предписывает приложению Excel применять формат (текст красного цвета) к ячейкам, значения в которых меньше нуля. Дополнительные сведения об условном форматировании см. в статье Добавление, изменение, поиск и удаление условного форматирования.

    Правило условного форматирования для отображения отрицательных чисел красным цветом

К началу страницы

Примеры вычисления процентов

В данном разделе описаны некоторые простые способы вычисления процентов.

Пример 1. Увеличение или уменьшение числа на заданное количество процентов

Сценарий    Если вы тратите на питание в среднем 25 долларов США в неделю и хотите сократить еженедельные расходы на питание на 25 %, сколько вы можете потратить? Или, если вы хотите увеличить недельный размер питания в 25 долларов США на 25 %, каков ваш новый недельный размер?

Если ячейка B2 — это расходы на питание, а C2 — процент, на который требуется сократить расходы, чтобы получить результат, введите в ячейку D2 формулу =B2*(1-C2).

Пример формулы для вычисления процентов

В этой формуле 1 используется для представления 100 %. Подобным образом, если нужно увеличить расходы на определенный процент, следует ввести в ячейку D2 формулу =B2*(1+C2).

Пример формулы для вычисления процентов

К началу страницы

Пример 2. Вычисление значения на основе процента

Сценарий    Если вы приобретаете компьютер за 800 рублей и у вас есть налог с продаж в размере 8,9 %, то сколько нужно платить за налог с продаж? В этом примере нужно найти 8,9 % от 800.

Если ячейка B2 — это цена, а C2 — налог с продаж, введите в ячейку D2 формулу =B2*C2, как показано ниже.

Пример формулы для вычисления процентов

В этой формуле 800 умножается на 0,089 (соответствующий процент в десятичной форме), что дает величину налога с продаж, который необходимо уплатить.

К началу страницы

Пример 3. Вычисление процента на основе двух значений

Сценарий    Например, если учащийся на тесте набрал 42 балла из 50, каков процент правильных ответов?

В данном случае ячейка B2 содержит количество набранных баллов, а ячейка C2 — общее количество баллов. Чтобы определить процент правильных ответов, введите в ячейку D2 формулу =B2/C2.

Пример формулы для вычисления процентов

В этой формуле число 42 делится на 50, чтобы найти процент правильных ответов. (В данном примере процентное значение в соответствии с форматом отображается без знаков после запятой.)

К началу страницы

Пример 4. Вычисление значения на основе другого значения и процента

Сценарий    Например, продажная цена футболки составляет 15 долларов США, что на 25 % меньше исходной цены. Какова исходная цена? В этом примере нужно найти 75 %, из которых число равно 15.

Если ячейка B2 — это отпускная цена, а в ячейке C2 содержится число 0,75 (т. е. 100 % за вычетом скидки в 25 % в десятичном формате), чтобы узнать первоначальную цену, введите в ячейку D2 формулу =B2/C2.

Пример формулы для вычисления процентов

В этой формуле отпускная цена делится на проценты, что дает первоначальную цену.

К началу страницы

Пример 5. Вычисление разницы между двумя числами и ее отображение в процентах

Сценарий    Например, заработная плата вашего отдела в ноябре составляет 2 342 долларов США, а в декабре — 2500 рублей. Как меняется процентная доля заработной платы за эти два месяца? Для этого используйте операторы вычитания (-) и деления (/) в одной формуле.

Если ячейка B2 — это прибыль за ноябрь, а C2 — за декабрь, чтобы найти разницу, используйте в ячейке D2 формулу =(C2-B2)/ (B2).

Пример формулы для вычисления процентов

Эта формула делит разницу между вторым и первым числами на значение первого числа, чтобы получить процентное изменение. (В показанном здесь примере разница отформатирована в процентах с двумя десятичных знаками.)

К началу страницы

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

Skip to content

Сумма по цвету и подсчёт по цвету в Excel

В этой статье вы узнаете, как посчитать ячейки по цвету и получить сумму по цвету ячеек в Excel. Эти решения работают как для окрашенных вручную, так и с условным форматированием.

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

Как все мы знаем, Microsoft Excel предоставляет множество формул для разных целей, и было бы логично предположить, что для подсчета ячеек по цвету есть и такие. Но, к сожалению, нет стандартной функции, которая позволяла бы суммировать по цветам или считать по цветам в Excel.

Помимо использования сторонних надстроек, есть только одно возможное решение — использование пользовательских функций. Если вы очень мало знаете об этой технологии или никогда раньше не слышали этот термин, не пугайтесь, вам не придется писать код самостоятельно. Здесь вы найдете готовое решение, и все, что вам нужно сделать, это скопировать / вставить его в свою книгу.

Функции и макросы, которые мы рассмотрим в этой статье, помогут нам сделать следующее:

  • Как посчитать по цвету и суммировать по цвету на листе Excel
  • Как суммировать по цвету и сосчитать по цвету во всей рабочей книге
  • Пользовательские функции для получения цвета ячейки, цвета шрифта и цветового кода
  • Как считать по цвету и суммировать ячейки, окрашенные с использованием условного форматирования
  • Самый быстрый способ подсчета и суммирования ячеек по цвету в Excel

Как посчитать по цвету и суммировать по цвету на листе Excel

Предположим, у вас есть таблица со списком заказов, в которой ячейки в столбце «Количество» окрашены в зависимости от их значения в колонке «Выполнение» и даты: ячейки с выполняемыми заказами сроком до 30 дней от текущей даты  — желтые,  уже выполненные — зеленые, а просроченные заказы — красные.

Теперь нам нужно автоматически подсчитать ячейки определенного цвета, т.е. посчитать количество красных, зеленых и желтых ячеек в таблице. Как я объяснил выше, прямого решения этой задачи при помощи стандартных формул Excel не существует. Но, к счастью, есть код VBA для Excel. Выполните 5 быстрых шагов ниже, и вы узнаете число и сумму ваших цветных ячеек всего за несколько минут.

  1. Откройте книгу Excel и нажмите Alt+F11, чтобы открыть редактор Visual Basic (VBE).
  2. Щелкните правой кнопкой мыши имя своей книги в разделе «Project–VBAProject» в правой части экрана, а затем выберите «Вставить» > «Модуль» в контекстном меню.

  1. Добавьте в вашу рабочую книгу следующий код:
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
  1. Сохраните свою книгу как «Книга Excel с поддержкой макросов (.xlsm)».

Если вы новичок и вам сложно работать с VBA, вы можете найти подробные пошаговые инструкции и несколько полезных советов в этом руководстве: Как вставить и запустить код VBA в Excel .

  1. Теперь, когда вся подготовительная работа сделана, выберите ячейку, в которой вы хотите получить результат, и введите в нее только что записанную нами пользовательскую функцию 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

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

Опишем процесс пошагово:

  1. Добавьте приведенный выше код на лист, как описано в первом параграфе статьи .
  2. Выберите ячейку с нужным цветом.
  3. Нажмите и удерживайте Ctrl.
  4. Выберите диапазон, в котором вы хотите подсчитать цветные ячейки и/или суммировать по цвету, если у вас есть числовые данные.
  5. Отпустите клавишу Ctrl.
  6. НажНажмите комбинацию  Alt+F8, чтобы открыть список макросов в вашей книге.
  7. Выберите макрос SumCountByConditionalFormat и нажмите «Выполнить» .

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

Сначала выбираем ячейку D5, поскольку хотим подсчитать ячейки красного цвета с просроченными заказами.

Затем дополнительно, удерживая Ctrl, выделяем диапазон ячеек в столбце D, по которым нужно выполнить подсчет ячеек определенного цвета.

Выполняем макрос, как показано на скриншоте ниже.

В результате вы увидите следующее сообщение с результатами:

Для этого примера мы выбрали столбец «Количество» и получили следующие цифры:

  1. Count — это количество ячеек определенного цвета, красного в нашем случае, который отмечает ячейки «Просрочен».
  2. Sum — это сумма значений всех красных ячеек в выбранной колонке, т.е. общее количество «Просроченных» заказов.
  3. Color — это шестнадцатеричный код цвета выбранной ячейки, в нашем случае D5.

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

Самый быстрый способ подсчета и суммирования ячеек по цвету в Excel

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

При этом не имеет значения, как установлены эти цвета – прямым форматированием ячейки либо при помощи условного форматирования.

Позвольте представить вам наш совершенно новый инструмент — «Счет и сумма по цвету» для Excel. Он имеет два варианта подсчета — «Один цвет» и «Все цвета», как видно на скриншоте ниже.

Подсчет и суммирование по одному цвету.

Вы нажимаете кнопку « Один цвет » на ленте, и в левой части рабочего листа открывается панель « Подсчет и сумма по цвету» . На панели вы выбираете:

  • Диапазон, в котором вы хотите подсчитать и суммировать ячейки
  • Любую ячейку с нужным цветом как образец
  • Вариант — цвет фона или шрифта

После этого нажмите « Рассчитать » и сразу же увидите результат в нижней части панели! Помимо подсчета и суммы, надстройка вычисляет среднее значение и находит максимальное и минимальное значения. Никаких макросов, никаких формул, никакой боли :)

Обратите внимание, что подсчет возможен как по цвету фона, так и по цвету шрифта.

Подсчет и суммирование ячеек по всем цветам в выбранном диапазоне

Опция «Все цвета» работает в основном так же, за исключением того, что вам не нужно выбирать цвет. В разделе «Result for ..» вы можете выбрать любой из параметров: Количество, Сумма, Среднее, Максимальное или Минимальное значение  и другие.

Если вы хотите скопировать результаты на свой рабочий лист, нажмите кнопку «Paste All» в нижней части панели .

В настоящее время надстройка доступна как часть Ultimate Suite for Excel . Это коллекция отличных инструментов, специально разработанных для решения самых утомительных, кропотливых и подверженных ошибкам задач в Excel.

В дополнение к надстройке «Подсчет и суммирование по цвету», Ultimate Suite включает более 70 инструментов, которые помогут вам объединить данные из разных листов, удалить дубликаты, сравнить листы на совпадения и различия и многое другое.

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

Функция СУММПРОИЗВ с примерами формул В статье объясняются основные и расширенные способы использования функции СУММПРОИЗВ в Excel. Вы найдете ряд примеров формул для сравнения массивов, условного суммирования и подсчета ячеек по нескольким условиям, расчета средневзвешенного значения…
Проверка данных с помощью регулярных выражений В этом руководстве показано, как выполнять проверку данных в Excel с помощью регулярных выражений и пользовательской функции RegexMatch. Когда дело доходит до ограничения пользовательского ввода на листах Excel, проверка данных очень полезна. Хотите…
Поиск и замена в Excel с помощью регулярных выражений В этом руководстве показано, как быстро добавить пользовательскую функцию в свои рабочие книги, чтобы вы могли использовать регулярные выражения для замены текстовых строк в Excel. Когда дело доходит до замены…
Как извлечь строку из текста при помощи регулярных выражений В этом руководстве вы узнаете, как использовать регулярные выражения в Excel для поиска и извлечения части текста, соответствующего заданному шаблону. Microsoft Excel предоставляет ряд функций для извлечения текста из ячеек. Эти функции…
4 способа отладки пользовательской функции Как правильно создавать пользовательские функции и где нужно размещать их код, мы подробно рассмотрели ранее в этой статье.  Чтобы решить проблемы при создании пользовательской функции, вам скорее всего придется выполнить…

Понравилась статья? Поделить с друзьями:
  • Вычисления в excel правило
  • Вычисления в excel по формулам сумма если
  • Вычисления в excel по формату ячейки
  • Вычисления в excel по строкам или столбцам
  • Вычисления в excel основные функции для вычислений