Функция МАКС() не учитывающая знак чисел?

Программирование на Visual Basic for Applications
Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Функция МАКС() не учитывающая знак чисел?

Сообщение Wasup! » 13.12.2005 (Вт) 17:57

Какой функцией можно получить максимальное значение, из перечня ячеек, не учитывая знак исходных чисел?

т.е. для чисел 1 5 -8 значение такой функции будет -8

Конечно можно добавить дополнительный столбец с абсолютными значениями чисел и стандартной функцией макс( ) найти максимум, но этот вариант не подходит.

Если делать свою функцию, то как в нее передавать диапазон ячеек, и как потом этот диапазон обходить?

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 13.12.2005 (Вт) 18:04

Function MyFunction(MyRange as Range) as Double
Dim I, myAVG as Double
For Each I In MyRange.Cells
myAVG=myAVG+I.Value
Next I
MyFunction=myAVG/myRange.Cells.Count
Exit Function
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

sergeyvg
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 16.08.2005 (Вт) 9:27

Сообщение sergeyvg » 14.12.2005 (Ср) 11:12

=МАКС(ABS(A1:A4))
но ввести эту функцию нажав CTRL+SHIFT+ENTER

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.12.2005 (Ср) 11:39

Угу.
И выведет она тебе для этих трёх чисел 8. А должна -8.

Если формулой, то =ЕСЛИ(ABS(МИН( ))>ABS(МАКС( )),МИН(),МАКС( ))
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 14.12.2005 (Ср) 13:02

Ой, блин, что я написал...

Правильный код:
Function MyMAX(MyRange as Range) as Double
Dim I
For Each I In MyRange.Cells
If MyMAX<ABS(I.Value) Then MyMAX=I.Value
Next I
Exit Function
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 14.12.2005 (Ср) 15:42

Мне кажется, что лучше так

Код: Выделить всё
Function fAbsMax(vRange As Range) As Double

Dim vCell
Dim vAbsMax     As Double
Dim vMax        As Double

    For Each vCell In vRange
        If IsNumeric(vCell) = True Then
            If vAbsMax < Abs(vCell) Then
                vAbsMax = Abs(vCell)
                vMax = vCell
            End If
        End If
    Next vCell
fAbsMax = vMax
End Function


А что будет работать быстрее: такая функция или
=ЕСЛИ(ABS(МИН( ))>ABS(МАКС( )),МИН(),МАКС( ))
?

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 14.12.2005 (Ср) 17:19

Wasup!, если значение Cell не Numeric, то автоматически Cell.Value будет равно 0. ИМХО, лишняя проверка :)
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 15.12.2005 (Чт) 13:40

А помоему нет, если ячейка содержит строку, то Cell.Value будет содержать строку. И при попытке присвоить vMax = vCell возникнет ошибка несответствия типов.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 15.12.2005 (Чт) 18:12

Wasup!, ты уверен? :) Проверь... Но AFFAIN Value всегда и во всех объектах хранит именно цифру.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList