Попробуйте:
Sub GetMax()
Dim rng As Range, lr As Long
With Sheet1 'Change accordingly
lr = .Cells(.Rows.Count, "A").End(xlUp).Row
Set rng = .Range("A1:B" & lr)
If Application.Aggregate(4, 6, rng.columns(2)) > 0 Then
Debug.Print "Max is higher than 0"
Else
Debug.Print "Max is not higher than 0"
End If
End With
End Sub
Если вы хотите использовать .Evaluate
, вы можете изменить эту строку: If Application.Aggregate(4, 6, rng.columns(2)) > 0 Then
, для этого: If .Evaluate("AGGREGATE(4,6," & rng.Columns(2).Address & ")") > 0 Then
Причина, по которой это работаетчто мы можем использовать MAX
в функции AGGREGATE
и сказать ей игнорировать значения ошибок.
Почему ваши попытки не увенчались успехом:
Причина, по которой ваша попытка с []
не удалась, заключается в том, что вы не можете использовать эти скобки для вычисления формулы с переменными. Вам нужно будет использовать Application.Evaluate
. Во-вторых, вам нужно будет кормить формулу реальным адресом. Я реализовал версию .Evaluate
в своем ответе выше.
Причина, по которой ваша попытка с AGGREGATE
вызвала ошибку, заключается в том, что вам нужно было опустить последний параметр в функции MAX
функции AGGREGATE
,Если вы попробуете это на листе, это также вызовет ошибку #VALUE
. Вам просто не нужно вводить порядковый номер, поскольку MAX
, как следует из названия, возвращает только одно значение.