Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Суммирование с условиями и цветом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Суммирование с условиями и цветом
user0 Дата: Четверг, 27.12.2012, 10:03 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Доброго времени суток,

Подскажите, пожалуйста, как просуммировать значения с несколькими условиями, в том числе по цвету. По отдельности-то у меня получается, через SUMIFS и ColorFunction, а вот как их объединить в одной формуле..

В примере необходимо просуммировать числа выделенные разным цветом для "а", при условии "x".
К сообщению приложен файл: 121227_color_co.xlsm (27.7 Kb)


Сообщение отредактировал user0 - Четверг, 27.12.2012, 10:05
 
Ответить
СообщениеДоброго времени суток,

Подскажите, пожалуйста, как просуммировать значения с несколькими условиями, в том числе по цвету. По отдельности-то у меня получается, через SUMIFS и ColorFunction, а вот как их объединить в одной формуле..

В примере необходимо просуммировать числа выделенные разным цветом для "а", при условии "x".

Автор - user0
Дата добавления - 27.12.2012 в 10:03
Staniiislav Дата: Четверг, 27.12.2012, 11:52 | Сообщение № 2
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

2010
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_условия As Range, _
Услови_A, Услови_x) As Variant
      For Each cll In Диапазон_суммирования
          If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
              If Cells(cll.Row, 1) = Услови_A And Cells(cll.Row, 2) = Услови_x Then
                  summa = summa + cll.Value
              End If
          End If
      Next

СУММ_ЦВЕТ = summa
End Function
[/vba]

можно так сделать, но на больших диапазонах будет тормозить


Единственный способ стать умнее, играть с более умным соперником

Сообщение отредактировал Staniiislav - Четверг, 27.12.2012, 11:56
 
Ответить
Сообщение[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_условия As Range, _
Услови_A, Услови_x) As Variant
      For Each cll In Диапазон_суммирования
          If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
              If Cells(cll.Row, 1) = Услови_A And Cells(cll.Row, 2) = Услови_x Then
                  summa = summa + cll.Value
              End If
          End If
      Next

СУММ_ЦВЕТ = summa
End Function
[/vba]

можно так сделать, но на больших диапазонах будет тормозить

Автор - Staniiislav
Дата добавления - 27.12.2012 в 11:52
user0 Дата: Пятница, 28.12.2012, 07:38 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Спасибо, отлично работает на примере, но..

Попробовал его на рабочем файле, и не считает, если немного передвинуть данные (см обновленный пример).. Полагаю это можно поправить, добавив возможность выбора диапазона для условий A, x. Подскажите, как это реализовать пожалуйста )

ps: тормоза не так страшны, у меня как раз диапазон на пару тысяч значений максимум
К сообщению приложен файл: 121228_color.xlsm (26.2 Kb)


Сообщение отредактировал user0 - Пятница, 28.12.2012, 08:31
 
Ответить
СообщениеСпасибо, отлично работает на примере, но..

Попробовал его на рабочем файле, и не считает, если немного передвинуть данные (см обновленный пример).. Полагаю это можно поправить, добавив возможность выбора диапазона для условий A, x. Подскажите, как это реализовать пожалуйста )

ps: тормоза не так страшны, у меня как раз диапазон на пару тысяч значений максимум

Автор - user0
Дата добавления - 28.12.2012 в 07:38
Staniiislav Дата: Пятница, 28.12.2012, 10:24 | Сообщение № 4
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

2010
изменил, для ячейки [vba]
Код
J26==СУММ_ЦВЕТ(J$17:J$22;$G26;"a";"F";"x";"G")
[/vba]
J$17:J$22 - диапазон суммирования
$G26 - цвет ячейки
"a" - условие для А (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)
"F" - буква столбца с условиями А
"x" - условие для X (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)
"G" - буква столбца с условиями X

[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_условия As Range, _
   Услови_A, Столбца_A As String, Услови_x, Столбца_X As String)
       For Each cll In Диапазон_суммирования
           If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
               If Cells(cll.Row, Столбца_A) = Услови_A And Cells(cll.Row, Столбца_X) = Услови_x Then
                   summa = summa + cll.Value
               End If
           End If
       Next

   СУММ_ЦВЕТ = summa
End Function

[/vba]
К сообщению приложен файл: 0942169.xlsm (25.3 Kb)


Единственный способ стать умнее, играть с более умным соперником

Сообщение отредактировал Staniiislav - Пятница, 28.12.2012, 10:27
 
Ответить
Сообщениеизменил, для ячейки [vba]
Код
J26==СУММ_ЦВЕТ(J$17:J$22;$G26;"a";"F";"x";"G")
[/vba]
J$17:J$22 - диапазон суммирования
$G26 - цвет ячейки
"a" - условие для А (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)
"F" - буква столбца с условиями А
"x" - условие для X (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)
"G" - буква столбца с условиями X

[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_условия As Range, _
   Услови_A, Столбца_A As String, Услови_x, Столбца_X As String)
       For Each cll In Диапазон_суммирования
           If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
               If Cells(cll.Row, Столбца_A) = Услови_A And Cells(cll.Row, Столбца_X) = Услови_x Then
                   summa = summa + cll.Value
               End If
           End If
       Next

   СУММ_ЦВЕТ = summa
End Function

[/vba]

Автор - Staniiislav
Дата добавления - 28.12.2012 в 10:24
user0 Дата: Пятница, 28.12.2012, 11:29 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 152
Репутация: 8 ±
Замечаний: 0% ±

Excel 2013, 2016
Спасибо огромное, в таком виде работает как часы
 
Ответить
СообщениеСпасибо огромное, в таком виде работает как часы

Автор - user0
Дата добавления - 28.12.2012 в 11:29
AlexM Дата: Пятница, 28.12.2012, 11:48 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Еще вариант.
[vba]
Код
Function СУММ_ЦВЕТ_2(Диапазон_суммирования As Range, Диапазон_условий As Range, Цвет_условия As Range, _
Услови_A, Услови_x) As Variant
For Each cll In Диапазон_суммирования
      If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
           If Cells(cll.Row, Диапазон_условий.Column) = Услови_A And Cells(cll.Row, Диапазон_условий.Column + 1) = Услови_x Then
                summa = summa + cll.Value
           End If
      End If
Next
СУММ_ЦВЕТ_2 = summa
End Function
[/vba]
См. файл
К сообщению приложен файл: 121228_color_ne.xls (45.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Пятница, 28.12.2012, 11:51
 
Ответить
СообщениеЕще вариант.
[vba]
Код
Function СУММ_ЦВЕТ_2(Диапазон_суммирования As Range, Диапазон_условий As Range, Цвет_условия As Range, _
Услови_A, Услови_x) As Variant
For Each cll In Диапазон_суммирования
      If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
           If Cells(cll.Row, Диапазон_условий.Column) = Услови_A And Cells(cll.Row, Диапазон_условий.Column + 1) = Услови_x Then
                summa = summa + cll.Value
           End If
      End If
Next
СУММ_ЦВЕТ_2 = summa
End Function
[/vba]
См. файл

Автор - AlexM
Дата добавления - 28.12.2012 в 11:48
Staniiislav Дата: Пятница, 28.12.2012, 11:58 | Сообщение № 7
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

2010
даже правильнее наверное будет так:
с исправлением от AlexM

[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Диапазон_условий As Range, Цвет_условия As Range, _
   Услови_A, Услови_x) As Double
   Dim cll As Range, summa
   Application.Volatile True
       For Each cll In Диапазон_суммирования
           If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
               If Cells(cll.Row, Диапазон_условий.Column) = Услови_A And _
               Cells(cll.Row, Диапазон_условий.Column + 1) = Услови_x Then
                   summa = summa + cll.Value
               End If
           End If
       Next

   СУММ_ЦВЕТ = summa
End Function
[/vba]

для ячейки J26:
[vba]
Код
=СУММ_ЦВЕТ(J$17:J$22;$F$17:$G$22;$G26;"a";"x")
[/vba]
где,
J$17:J$22 - диапазон суммирования
$F$17:$G$22 - диапазон уловий
$G26 - цвет ячейки
"a" - условие для А (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)
"x" - условие для X (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)

добавлено позже:


не забывайте про регистр (маленькая или большая буква в условиях А,Х), а также про язык ввода (рус. или англ.)
К сообщению приложен файл: 4817267.xlsm (26.4 Kb)


Единственный способ стать умнее, играть с более умным соперником

Сообщение отредактировал Staniiislav - Пятница, 28.12.2012, 15:36
 
Ответить
Сообщениедаже правильнее наверное будет так:
с исправлением от AlexM

[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Диапазон_условий As Range, Цвет_условия As Range, _
   Услови_A, Услови_x) As Double
   Dim cll As Range, summa
   Application.Volatile True
       For Each cll In Диапазон_суммирования
           If cll.Interior.ColorIndex = Цвет_условия.Interior.ColorIndex Then
               If Cells(cll.Row, Диапазон_условий.Column) = Услови_A And _
               Cells(cll.Row, Диапазон_условий.Column + 1) = Услови_x Then
                   summa = summa + cll.Value
               End If
           End If
       Next

   СУММ_ЦВЕТ = summa
End Function
[/vba]

для ячейки J26:
[vba]
Код
=СУММ_ЦВЕТ(J$17:J$22;$F$17:$G$22;$G26;"a";"x")
[/vba]
где,
J$17:J$22 - диапазон суммирования
$F$17:$G$22 - диапазон уловий
$G26 - цвет ячейки
"a" - условие для А (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)
"x" - условие для X (можно ссылаться на ячейку с этим условием, можно вводить в формулу в кавычках, как в примере)

добавлено позже:


не забывайте про регистр (маленькая или большая буква в условиях А,Х), а также про язык ввода (рус. или англ.)

Автор - Staniiislav
Дата добавления - 28.12.2012 в 11:58
Staniiislav Дата: Пятница, 28.12.2012, 12:03 | Сообщение № 8
Группа: Проверенные
Ранг: Новичок
Сообщений: 28
Репутация: 3 ±
Замечаний: 0% ±

2010
Цитата (AlexM)
Еще вариант.


да, так будет интереснее, сейчас у себя подправлю) спасибо!

Подправил в сообщении №7


Единственный способ стать умнее, играть с более умным соперником

Сообщение отредактировал Staniiislav - Пятница, 28.12.2012, 12:11
 
Ответить
Сообщение
Цитата (AlexM)
Еще вариант.


да, так будет интереснее, сейчас у себя подправлю) спасибо!

Подправил в сообщении №7

Автор - Staniiislav
Дата добавления - 28.12.2012 в 12:03
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!