сумма по столбцу с условиями: яблоки или груши поставили или оплатили цвет грубо говоря внутри формулы СУММЕСЛИМН вставить ИЛИ и зависимость от цвета
имею это
Код
Function СЧЁТЕСЛИМН_ЦВЕТ(диапазон_сумм As Range, _
диапазон_усл1 As Range, усл1 As Variant, _
диапазон_усл2 As Range, усл2 As Variant, _
образец_цв As Range)
Application.Calculation = xlCalculationAutomatic
Application.Volatile True
Sum = 0
For Each cl In диапазон_сумм
If Cells(cl.Row, диапазон_усл1.Column) = усл1 And _
Cells(cl.Row, диапазон_усл2.Column) = усл2 And _
cl.Interior.ColorIndex = образец_цв.Interior.ColorIndex And _
cl.Interior.Pattern = образец_цв.Interior.Pattern Then Sum = Sum + 1
Next
СЧЁТЕСЛИМН_ЦВЕТ = Sum
End Function
Почему должно быть 4? Проверьте ещё раз свои условия Может вы имели ввиду: если ячейка, с образцом цвета, закрашена, то считать по закрашенные ячейки этим цветом, иначе считать по другим условиям. Тогда попробуйте так:
Код
Function СЧЁТЕСЛИМН_ЦВЕТ(диапазон_сумм As Range, диапазон_усл1 As Range, усл1 As Variant, диапазон_усл2 As Range, усл2 As Variant, образец_цв As Range)
Application.Calculation = xlCalculationAutomatic
Application.Volatile True
Sum = 0
For Each cl In диапазон_сумм
If образец_цв.Interior.ColorIndex <> -4142 Then
If cl.Interior.ColorIndex = образец_цв.Interior.ColorIndex Then Sum = Sum + 1
ElseIf Cells(cl.Row, диапазон_усл1.Column) = усл1 And Cells(cl.Row, диапазон_усл2.Column) = усл2 Then
Sum = Sum + 1
End If
Next
СЧЁТЕСЛИМН_ЦВЕТ = Sum
End Function
Msi2102 написал: Так в первом Вашем сообщении функция так и считает.
не совсем так. она считает только: 1- по цвету 2-учитывает только одно значение (только яблоки или груши) 3-учитывает только одно значение (только поставили или оплатили)
пример цвет+яблоки+поставили цвет+яблоки+оплатили цвет+груши+оплатили цвет+груши+поставили вот спасибо, извините за ранние неточности
Все равно не до конца понял, что Вы хотите, попробуйте так:
Код
Function СЧЁТЕСЛИМН_ЦВЕТ(диапазон_сумм As Range, _
диапазон_усл1 As Range, усл1 As Variant, _
диапазон_усл2 As Range, усл2 As Variant, _
образец_цв As Range)
Application.Calculation = xlCalculationAutomatic
Application.Volatile True
usl_1 = Split(усл1, ",")
usl_2 = Split(усл2, ",")
Sum = 0
For n = LBound(usl_1) To UBound(usl_1)
For m = LBound(usl_2) To UBound(usl_2)
For Each cl In диапазон_сумм
If Trim(Cells(cl.Row, диапазон_усл1.Column)) = Trim(usl_1(n)) And _
Trim(Cells(cl.Row, диапазон_усл2.Column)) = Trim(usl_2(m)) And _
cl.Interior.ColorIndex = образец_цв.Interior.ColorIndex And _
cl.Interior.Pattern = образец_цв.Interior.Pattern Then Sum = Sum + 1
Next
Next
Next
СЧЁТЕСЛИМН_ЦВЕТ = Sum
End Function