Добрый вечер. Есть такая функция, которая подсчитывает сумму значений залитых ячеек по ячейке-образцу: [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 - ячейка-образец Подскажите, а можно ли как-то подредактировать функцию, чтобы сумма подсчитывалась по двум ячейкам-образцам (мне нужно получить сумму значений по двум цветам)? То есть, если при вводе второй ячейки-образца, то считался бы и второй цвет.
Добрый вечер. Есть такая функция, которая подсчитывает сумму значений залитых ячеек по ячейке-образцу: [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
Сообщение отредактировал Leojse - Четверг, 17.10.2013, 21:53
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
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
А можно еще вопрос? Получается, нужно всегда теперь вводить две ячейки-образца... Я наверно неправильно выразился в постах выше... Я хотел, что если нужно посчитать еще один цвет, то дополнительно указать еще одну ячейку-образец. Это никак не поправить? То есть, если не указана вторая ячейка-образец, суммируем по первой.
А можно еще вопрос? Получается, нужно всегда теперь вводить две ячейки-образца... Я наверно неправильно выразился в постах выше... Я хотел, что если нужно посчитать еще один цвет, то дополнительно указать еще одну ячейку-образец. Это никак не поправить? То есть, если не указана вторая ячейка-образец, суммируем по первой.Leojse
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
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] Пробуйте
[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
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]
Мой код не сработает, если скрыты столбцы.
А вот код Сани в сборе [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]
Код
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
Здравствуйте! Можно ли данной функцией суммировать диапазон цифр + цифры только вот с таким символом ( ' ) (например: от 1 до 12 + 1', 2', 3', 4', 5', 6' и т.д.) [moder]Читайте правила форума, создавайте свою тему![/moder]
Здравствуйте! Можно ли данной функцией суммировать диапазон цифр + цифры только вот с таким символом ( ' ) (например: от 1 до 12 + 1', 2', 3', 4', 5', 6' и т.д.) [moder]Читайте правила форума, создавайте свою тему![/moder]bumnik
Сообщение отредактировал Manyasha - Среда, 29.04.2015, 18:27