VBA: получите Min и Max от выбора диапазона при игнорировании NA

Как это сделать, не устанавливая диапазон в excel? В идеале это будет храниться внутри (и временно) в VBA только ради расчета. Очевидно, что текущий код не будет работать, поскольку FormulaArray применяется только к объектам диапазона.

Dim lower As Double lower.FormulaArray = "=RoundDown(Min(If(Not(ISNA(objSelection)), objSelection)), 0)" Dim upper As Double upper.FormulaArray = "=RoundUp(Max(If(Not(ISNA(objSelection)), objSelection)), 0)" 

Если вы хотите разрешить формулы прямо к переменной двойного типа, используйте объект приложения Excel для прямого вызова функций ROUNDDOWN , ROUNDUP и AGGREGATE .

 Dim lower As Double, upper As Double, objSelection As Range Set objSelection = Selection 'trim any full row or column selections down to the used range Set objSelection = Intersect(objSelection.Parent.UsedRange, objSelection) lower = Application.RoundDown(Application.Aggregate(15, 6, objSelection, 1), 0) upper = Application.RoundUp(Application.Aggregate(14, 6, objSelection, 1), 0) Debug.Print lower Debug.Print upper 

Вы удалили бы часть vba из кавычек и объединили строки вместе с & :

 Dim lower As Double lower = ActiveSheet.Evaluate("=RoundDown(Min(If(ISNUMBER(" & Selection.Address & "), " & Selection.Address & ")), 0)") Dim upper As Double upper = ActiveSheet.Evaluate("=RoundUp(Max(If(ISNUMBER(" & Selection.Address & "), " & Selection.Address & ")), 0)") 
Давайте будем гением компьютера.