VBA: функция, сравнивающая SUMIFS в разных столбцах диапазона и возвращающая значения Min или Max в соответствии с логическим значением
Я пытаюсь получить суффиксы с двумя параметрами на важном наборе столбцов (количество столбцов не изменится, данные будут), а затем вернуть максимальное или минимальное
Function min_or_max(B As Boolean, table As Range, col1 As Range, c1 As Cell, col2 As Range, c2 As Cell)
Dim column As Range
'If B = False Then
min_or_max = 0
For Each column In Range.Columns
If ActiveSheet.WorksheetFunction.SumIfs(Range.column, col1, c1, col2, c2) > min_or_max Then
min_or_max = ActiveSheet.WorksheetFunction.SumIfs(Range.column, col1, c1, col2, c2)
End If
Next column
'Elsif B = True
'min_or_max = 10000000
'For Each column In Range.Columns
'If ActiveSheet.WorksheetFunction.SumIfs(Range.Columns(i), col1, c1, col2, c2) < min_or_max Then
'min_or_max = ActiveSheet.WorksheetFunction.SumIfs(Range.Columns(i), col1, c1, col2, c2)
'End If
'Next column
End Function
Даже до того, как я делю мин или макс, я не могу заставить SUMIFS работать. Это из-за плохой записи аргументов? (Я надеюсь, что ясно!)
Большое спасибо тому, кто может мне помочь! ФПИ
2 ответа
Решение
Проблема в WorksheetFunction
это не объект рабочего листа, а объект приложения.
Итак, вы хотели бы использовать Application.Worksheetfunction
Эта строка:
ЕслиActiveSheet.WorksheetFunction.SumIfs (Range.column, col1, c1, col2, c2)> min_or_max тогда
Должен выглядеть так:
If Application.WorksheetFunction.SumIfs(Range.column, col1, c1, col2, c2) > min_or_max Then
Сейчас я использую очень простое и МЕДЛЕННОЕ решение:
Function max_table(table As range, col1 As range, c1 As range, col2 As range, c2 As range)
Dim i, j As Integer
Dim prov As Integer
max_table = 0
For i = 1 To table.Columns.Count
prov = 0
For j = 1 To table.Rows.Count
If col1(j).Value = c1.Value And col2(j).Value = c2.Value Then
prov = prov + table.Cells(j, i).Value
End If
Next j
If max_table < prov Then
max_table = prov
End If
Next i
End Function