Всем привет, помогите с формулой, возможно VBA (см. Пример)
Задача. 1. Необходимо посчитать сумму значений ячеек в строке №3 соответствующие ячейкам строки №1 и цвету заливке ячейки (серый) 2. Необходимо посчитать сумму значений ячеек в строке №4 соответствующие ячейкам строки №1 и цвету заливке ячейки (оранжевый)
Прошу извинить, если глупая задача! Спасибо!
Всем привет, помогите с формулой, возможно VBA (см. Пример)
Задача. 1. Необходимо посчитать сумму значений ячеек в строке №3 соответствующие ячейкам строки №1 и цвету заливке ячейки (серый) 2. Необходимо посчитать сумму значений ячеек в строке №4 соответствующие ячейкам строки №1 и цвету заливке ячейки (оранжевый)
Function SumByColor2(SumRange As Range, Optional ColorRange As Range, Optional ColorSample As Range) As Double 'функция суммирует ячейки с определенным цветом 'SumRange - диапазон суммирования 'ColorRange - диапазон раскрашенных ячеек. 'ColorSample - ячейка, цвет которой принимается как образец для суммирования 'за основу взят http://www.planetaexcel.ru/techniques/9/162/
Dim Sum#, iCell& Application.Volatile True 'что бы функция пересчитывалась при изменении значений на листе Dim MyColor& If ColorSample Is Nothing Then MyColor = Application.Caller.Interior.Color Else MyColor = ColorSample.Interior.Color If SumRange.Cells.Count > 1000000 Then If vbCancel = MsgBox("Задан очень большой диапазон." & vbCrLf & "Подсчет может затянуться.", vbOKCancel) Then Exit Function End If
If ColorRange Is Nothing Then Set ColorRange = SumRange If SumRange.Cells.Count <> ColorRange.Cells.Count Then MsgBox "Диапазон суммирования и диапазон задающий цвета отличаются по размеру." & vbCrLf & "Укажите равные диапазоны.", vbOK, "Не правильная формула в ячейке " & Application.Caller.Address: Exit Function End If For iCell = 1 To SumRange.Cells.Count If ColorRange(iCell).Interior.Color = MyColor Then Sum = Sum + SumRange(iCell).Value End If Next iCell
SumByColor2 = Sum End Function
[/vba]
Бадя, [vba]
Код
Function SumByColor2(SumRange As Range, Optional ColorRange As Range, Optional ColorSample As Range) As Double 'функция суммирует ячейки с определенным цветом 'SumRange - диапазон суммирования 'ColorRange - диапазон раскрашенных ячеек. 'ColorSample - ячейка, цвет которой принимается как образец для суммирования 'за основу взят http://www.planetaexcel.ru/techniques/9/162/
Dim Sum#, iCell& Application.Volatile True 'что бы функция пересчитывалась при изменении значений на листе Dim MyColor& If ColorSample Is Nothing Then MyColor = Application.Caller.Interior.Color Else MyColor = ColorSample.Interior.Color If SumRange.Cells.Count > 1000000 Then If vbCancel = MsgBox("Задан очень большой диапазон." & vbCrLf & "Подсчет может затянуться.", vbOKCancel) Then Exit Function End If
If ColorRange Is Nothing Then Set ColorRange = SumRange If SumRange.Cells.Count <> ColorRange.Cells.Count Then MsgBox "Диапазон суммирования и диапазон задающий цвета отличаются по размеру." & vbCrLf & "Укажите равные диапазоны.", vbOK, "Не правильная формула в ячейке " & Application.Caller.Address: Exit Function End If For iCell = 1 To SumRange.Cells.Count If ColorRange(iCell).Interior.Color = MyColor Then Sum = Sum + SumRange(iCell).Value End If Next iCell
Если формулой, то нужно описание принципа покраски ячеек. Почему некоторые серые, а другие оранжевые? Если раскраска произвольна, то или макрос, или в диспетчер имен (Контрл F3) две формулы цв0 (находясь при этом в ячейке А3)
Макросов в файле нет, но они должны быть разрешены
Если формулой, то нужно описание принципа покраски ячеек. Почему некоторые серые, а другие оранжевые? Если раскраска произвольна, то или макрос, или в диспетчер имен (Контрл F3) две формулы цв0 (находясь при этом в ячейке А3)
boa, подскажите, что не так? выдаёт сбой (см. Вложение) и перезапускает Эксель, когда начинаешь выделять диапазон задающий цвет (выбираешь первую ячейку и всплывает сообщение, хотя диапазон еще не выбран)
boa, подскажите, что не так? выдаёт сбой (см. Вложение) и перезапускает Эксель, когда начинаешь выделять диапазон задающий цвет (выбираешь первую ячейку и всплывает сообщение, хотя диапазон еще не выбран)Бадя
Бадя, Правьте аргументы функции через строку формул или закомментируйте строки [vba]
Код
' If SumRange.Cells.Count <> ColorRange.Cells.Count Then ' MsgBox "Диапазон суммирования и диапазон задающий цвета отличаются по размеру." & vbCrLf & "Укажите равные диапазоны.", vbOK, "Не правильная формула в ячейке " & Application.Caller.Address: Exit Function ' End If
[/vba]
Бадя, Правьте аргументы функции через строку формул или закомментируйте строки [vba]
Код
' If SumRange.Cells.Count <> ColorRange.Cells.Count Then ' MsgBox "Диапазон суммирования и диапазон задающий цвета отличаются по размеру." & vbCrLf & "Укажите равные диапазоны.", vbOK, "Не правильная формула в ячейке " & Application.Caller.Address: Exit Function ' End If