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

Вход

Регистрация

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

 

= Мир MS Excel/Подсчет суммы ячеек по цвету (редактирование функции) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подсчет суммы ячеек по цвету (редактирование функции) (Макросы Sub)
Подсчет суммы ячеек по цвету (редактирование функции)
Leojse Дата: Четверг, 17.10.2013, 21:49 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Добрый вечер.
Есть такая функция, которая подсчитывает сумму значений залитых ячеек по ячейке-образцу:
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range)
For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex Then
      summa = summa + cll.Value
End If
Next
СУММ_ЦВЕТ = summa
End Function
[/vba]
Формула - =СУММ_ЦВЕТ(F8:F1317;F348), где F8:F1317 - суммируемый диапазон, F348 - ячейка-образец
Подскажите, а можно ли как-то подредактировать функцию, чтобы сумма подсчитывалась по двум ячейкам-образцам (мне нужно получить сумму значений по двум цветам)? То есть, если при вводе второй ячейки-образца, то считался бы и второй цвет.


Сообщение отредактировал Leojse - Четверг, 17.10.2013, 21:53
 
Ответить
СообщениеДобрый вечер.
Есть такая функция, которая подсчитывает сумму значений залитых ячеек по ячейке-образцу:
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range)
For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex Then
      summa = summa + cll.Value
End If
Next
СУММ_ЦВЕТ = summa
End Function
[/vba]
Формула - =СУММ_ЦВЕТ(F8:F1317;F348), где F8:F1317 - суммируемый диапазон, F348 - ячейка-образец
Подскажите, а можно ли как-то подредактировать функцию, чтобы сумма подсчитывалась по двум ячейкам-образцам (мне нужно получить сумму значений по двум цветам)? То есть, если при вводе второй ячейки-образца, то считался бы и второй цвет.

Автор - Leojse
Дата добавления - 17.10.2013 в 21:49
Саня Дата: Четверг, 17.10.2013, 22:00 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Код
=СУММ_ЦВЕТ(F8:F1317;F348)+СУММ_ЦВЕТ(F8:F1317;F349)

шутка.

[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
Цвет_берется_из_ячейки2 As Range)
For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex or _
cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex Then
     summa = summa + cll.Value
End If
Next
СУММ_ЦВЕТ = summa
End Function
[/vba]

Код
=СУММ_ЦВЕТ(F8:F1317;F348;F349)
 
Ответить
Сообщение
Код
=СУММ_ЦВЕТ(F8:F1317;F348)+СУММ_ЦВЕТ(F8:F1317;F349)

шутка.

[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
Цвет_берется_из_ячейки2 As Range)
For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex or _
cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex Then
     summa = summa + cll.Value
End If
Next
СУММ_ЦВЕТ = summa
End Function
[/vba]

Код
=СУММ_ЦВЕТ(F8:F1317;F348;F349)

Автор - Саня
Дата добавления - 17.10.2013 в 22:00
Leojse Дата: Четверг, 17.10.2013, 22:04 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Саня, Спасибо! Вот как все просто)
 
Ответить
СообщениеСаня, Спасибо! Вот как все просто)

Автор - Leojse
Дата добавления - 17.10.2013 в 22:04
Leojse Дата: Четверг, 17.10.2013, 22:22 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
А можно еще вопрос? Получается, нужно всегда теперь вводить две ячейки-образца... Я наверно неправильно выразился в постах выше... Я хотел, что если нужно посчитать еще один цвет, то дополнительно указать еще одну ячейку-образец. Это никак не поправить? То есть, если не указана вторая ячейка-образец, суммируем по первой.
 
Ответить
СообщениеА можно еще вопрос? Получается, нужно всегда теперь вводить две ячейки-образца... Я наверно неправильно выразился в постах выше... Я хотел, что если нужно посчитать еще один цвет, то дополнительно указать еще одну ячейку-образец. Это никак не поправить? То есть, если не указана вторая ячейка-образец, суммируем по первой.

Автор - Leojse
Дата добавления - 17.10.2013 в 22:22
Саня Дата: Четверг, 17.10.2013, 22:55 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
optional Цвет_берется_из_ячейки2 As Range)

if not Цвет_берется_из_ячейки2  is nothing then

For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex or _
cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex Then
      summa = summa + cll.Value
End If
Next

else

For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex Then
      summa = summa + cll.Value
End If
Next

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

оба варианта рабочие:
Код
=СУММ_ЦВЕТ(F8:F1317;F348)

Код
=СУММ_ЦВЕТ(F8:F1317;F348;F349)
 
Ответить
Сообщение[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
optional Цвет_берется_из_ячейки2 As Range)

if not Цвет_берется_из_ячейки2  is nothing then

For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex or _
cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex Then
      summa = summa + cll.Value
End If
Next

else

For Each cll In Диапазон_суммирования.Cells
If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex Then
      summa = summa + cll.Value
End If
Next

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

оба варианта рабочие:
Код
=СУММ_ЦВЕТ(F8:F1317;F348)

Код
=СУММ_ЦВЕТ(F8:F1317;F348;F349)

Автор - Саня
Дата добавления - 17.10.2013 в 22:55
Leojse Дата: Четверг, 17.10.2013, 23:05 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Саня, Спасибо еще раз, как раз то, чо нужно!
 
Ответить
СообщениеСаня, Спасибо еще раз, как раз то, чо нужно!

Автор - Leojse
Дата добавления - 17.10.2013 в 23:05
Leojse Дата: Среда, 23.10.2013, 12:32 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Добрый день.
Подскажите, а возможно ли, чтобы функция суммировала только видимые ячейки?
 
Ответить
СообщениеДобрый день.
Подскажите, а возможно ли, чтобы функция суммировала только видимые ячейки?

Автор - Leojse
Дата добавления - 23.10.2013 в 12:32
SkyPro Дата: Среда, 23.10.2013, 12:59 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
Optional Цвет_берется_из_ячейки2 As Range)
If Not Цвет_берется_из_ячейки2 Is Nothing Then
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex And cll.EntireRow.Hidden = False Or _
         cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex _
         And cll.EntireRow.Hidden = False Then
             summa = summa + cll.Value
         End If
     Next
Else
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex _
         And cll.EntireRow.Hidden = False Then
             summa = summa + cll.Value
         End If
     Next
End If
СУММ_ЦВЕТ = summa
End Function
[/vba]
Пробуйте


skypro1111@gmail.com
 
Ответить
Сообщение[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
Optional Цвет_берется_из_ячейки2 As Range)
If Not Цвет_берется_из_ячейки2 Is Nothing Then
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex And cll.EntireRow.Hidden = False Or _
         cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex _
         And cll.EntireRow.Hidden = False Then
             summa = summa + cll.Value
         End If
     Next
Else
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex _
         And cll.EntireRow.Hidden = False Then
             summa = summa + cll.Value
         End If
     Next
End If
СУММ_ЦВЕТ = summa
End Function
[/vba]
Пробуйте

Автор - SkyPro
Дата добавления - 23.10.2013 в 12:59
Саня Дата: Среда, 23.10.2013, 13:05 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
[vba]
Код
Function bCellIsHidden(rngCell As Range) As Boolean
     bCellIsHidden = rngCell.EntireRow.Hidden Or _
                     rngCell.EntireColumn.Hidden
End Function
[/vba]

[vba]
Код
And Not bCellIsHidden(cll) Then
[/vba]
 
Ответить
Сообщение[vba]
Код
Function bCellIsHidden(rngCell As Range) As Boolean
     bCellIsHidden = rngCell.EntireRow.Hidden Or _
                     rngCell.EntireColumn.Hidden
End Function
[/vba]

[vba]
Код
And Not bCellIsHidden(cll) Then
[/vba]

Автор - Саня
Дата добавления - 23.10.2013 в 13:05
SkyPro Дата: Среда, 23.10.2013, 13:23 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Да, что-то я не подумал о скрытых столбцах :)


skypro1111@gmail.com
 
Ответить
СообщениеДа, что-то я не подумал о скрытых столбцах :)

Автор - SkyPro
Дата добавления - 23.10.2013 в 13:23
Leojse Дата: Среда, 23.10.2013, 17:31 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Саня, SkyPro, Огромнейшее спасибо!
Воспользовался кодом SkyPro.
Теперь мне просто интересно... А как надо было воспользоваться кодом Сани?
 
Ответить
СообщениеСаня, SkyPro, Огромнейшее спасибо!
Воспользовался кодом SkyPro.
Теперь мне просто интересно... А как надо было воспользоваться кодом Сани?

Автор - Leojse
Дата добавления - 23.10.2013 в 17:31
SkyPro Дата: Среда, 23.10.2013, 18:04 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Мой код не сработает, если скрыты столбцы.

А вот код Сани в сборе :)
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
Optional Цвет_берется_из_ячейки2 As Range)
If Not Цвет_берется_из_ячейки2 Is Nothing Then
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex _
         And Not bCellIsHidden(cll) Or _
         cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex _
         And Not bCellIsHidden(cll) Then
             summa = summa + cll.Value
         End If
     Next
Else
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex _
         And Not bCellIsHidden(cll) Then
             summa = summa + cll.Value
         End If
     Next
End If
СУММ_ЦВЕТ = summa
End Function

Function bCellIsHidden(rngCell As Range) As Boolean
     bCellIsHidden = rngCell.EntireRow.Hidden Or _
                     rngCell.EntireColumn.Hidden
End Function
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Среда, 23.10.2013, 18:05
 
Ответить
СообщениеМой код не сработает, если скрыты столбцы.

А вот код Сани в сборе :)
[vba]
Код
Function СУММ_ЦВЕТ(Диапазон_суммирования As Range, Цвет_берется_из_ячейки As Range, _
Optional Цвет_берется_из_ячейки2 As Range)
If Not Цвет_берется_из_ячейки2 Is Nothing Then
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex _
         And Not bCellIsHidden(cll) Or _
         cll.Interior.ColorIndex = Цвет_берется_из_ячейки2.Interior.ColorIndex _
         And Not bCellIsHidden(cll) Then
             summa = summa + cll.Value
         End If
     Next
Else
     For Each cll In Диапазон_суммирования.Cells
         If cll.Interior.ColorIndex = Цвет_берется_из_ячейки.Interior.ColorIndex _
         And Not bCellIsHidden(cll) Then
             summa = summa + cll.Value
         End If
     Next
End If
СУММ_ЦВЕТ = summa
End Function

Function bCellIsHidden(rngCell As Range) As Boolean
     bCellIsHidden = rngCell.EntireRow.Hidden Or _
                     rngCell.EntireColumn.Hidden
End Function
[/vba]

Автор - SkyPro
Дата добавления - 23.10.2013 в 18:04
Leojse Дата: Среда, 23.10.2013, 21:16 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Просто ради интереса попробовал код Сани, который в сборе)
Выдает ошибку на первой строчке [vba]
Код
And Not bCellIsHidden(cll) Or _
[/vba], выделяя при этом cll. Ошибка - Compile error: ByRef argument type mismatch. Так что пользуюсь Вашим кодом, SkyPro, но и Сане огромное спасибо)
 
Ответить
СообщениеПросто ради интереса попробовал код Сани, который в сборе)
Выдает ошибку на первой строчке [vba]
Код
And Not bCellIsHidden(cll) Or _
[/vba], выделяя при этом cll. Ошибка - Compile error: ByRef argument type mismatch. Так что пользуюсь Вашим кодом, SkyPro, но и Сане огромное спасибо)

Автор - Leojse
Дата добавления - 23.10.2013 в 21:16
Саня Дата: Среда, 23.10.2013, 21:21 | Сообщение № 14
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
И Вам огромное спасибо, заходите еще... :D

перед
[vba]
Код
If Not Цвет_берется_из_ячейки2 Is Nothing Then
[/vba]

[vba]
Код
dim cll as range
[/vba]
 
Ответить
СообщениеИ Вам огромное спасибо, заходите еще... :D

перед
[vba]
Код
If Not Цвет_берется_из_ячейки2 Is Nothing Then
[/vba]

[vba]
Код
dim cll as range
[/vba]

Автор - Саня
Дата добавления - 23.10.2013 в 21:21
Leojse Дата: Среда, 23.10.2013, 21:27 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 148
Репутация: 1 ±
Замечаний: 0% ±

2010/2013
Спасибо, все работает)
 
Ответить
СообщениеСпасибо, все работает)

Автор - Leojse
Дата добавления - 23.10.2013 в 21:27
bumnik Дата: Среда, 29.04.2015, 18:23 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 185
Репутация: 0 ±
Замечаний: 40% ±

Excel 2007,2010
Здравствуйте! Можно ли данной функцией суммировать диапазон цифр + цифры только вот с таким символом ( ' ) (например: от 1 до 12 + 1', 2', 3', 4', 5', 6' и т.д.)
[moder]Читайте правила форума, создавайте свою тему![/moder]


Сообщение отредактировал Manyasha - Среда, 29.04.2015, 18:27
 
Ответить
СообщениеЗдравствуйте! Можно ли данной функцией суммировать диапазон цифр + цифры только вот с таким символом ( ' ) (например: от 1 до 12 + 1', 2', 3', 4', 5', 6' и т.д.)
[moder]Читайте правила форума, создавайте свою тему![/moder]

Автор - bumnik
Дата добавления - 29.04.2015 в 18:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Подсчет суммы ячеек по цвету (редактирование функции) (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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