Страницы: 1
RSS
выбор максимального по модулю числа
 
Доброй ночи...помогите написать макрос, который бы выбирал максимальное по модулю число....
например есть числа
12
-36
0
26
-333
910
Должен выбрать -333
Заранее спасибо!
 
А 910 не в счёт?
 
Зачем макрос?
=МАКС(ЕСЛИ(ABS(A1:A10)=МАКС(ABS(A1:A10));A1:A10))
Формула массива.
 
пардон...сам и ошибся, конечно в счет....
 
vikttur, не работает...желательно как можно проще, поэтому макросом
 
Забыл скобку. Исправил в сообщении выше. Уже работает.
Не забывайте: формула вводится сочетанием трех клавиш.
Ctrl+Shift+Enter

Как проще - в файле.
 
Вариант (макрос - максимум и минимум).
 
без массивного ввода
Код
=ЕСЛИ(МАКС(A1:A10)>-МИН(A1:A10);МАКС(A1:A10);МИН(A1:A10))
 
Еще проще:
=МАКС(A1:A9;-МИН(A1:A9))
или так:
=МАКС(A1:A9;ABS(МИН(A1:A9)))
Изменено: Radioalex - 16.10.2013 10:42:59
 
Мотя, макрос определил максимальное число, но он должен быть в виде как и стандартные функции мин и макс....=max(число1;число2;число3;.....) и отображать знак (если максимальное по модулю -123, то и должен выдать -123, а не просто 123)
 
желательно такой же макрос и на min
 
smelovvvv!
Если речь идет о моем опусе, см. измененный вариант (мах и min).
Изменено: Мотя - 16.10.2013 16:53:42
 
работает как надо, только можно его как-нибудь переделать, чтобы было так =max(число1;число2;число3;.....)
данные вводились как и в стандартной функции МАКС...через ;
 
Цитата
в стандартной функции МАКС...через ;
Макрос - учебный пример - рассчитан на чтение произвольной матрицы.
Чем Вас не устраивает замечательный функциональный арсенал EXCEL? :D
 
Формулой массива:
Код
=ИНДЕКС(массив;ПОИСКПОЗ(МАКС(ABS(массив));массив;0))

Были варианты и легче, но все же.
массив должен быть вектором с единственным столбцом.
Изменено: Все_просто - 16.10.2013 11:50:36
С уважением,
Федор/Все_просто
 
Цитата
Чем Вас не устраивает замечательный функциональный арсенал EXCEL?
стандартный МАКС дает максимум не по модулю....
 
smelovvvv!
Вам уже предложили массу формульных вариантов. :D
Вы их смотрели-пробовали?!
 
Мотя! я рассмотрел все предложенные варианты. из формульных самое оптимальное предложил vikttur, но там данные нужно вводить, как массив....а у меня данные могут содержаться в разных ячейках...я же не спроста написал, что данные должны вводиться, как в стандартном МАКС...т.е. как массив или через ";"
 
А чем вариант Моти не устраивает?
 
Не устраивает только ввод данных. мне не нужна кнопка. нужно чтобы макрос вызывался, как и стандартные функции, и данные перечислялись, так как ячейки с данными разбросаны по таблице.
 
Тогда переделайте в функцию - всё необходимое у Вас есть. Про макросы/функции можно почитать в разделе "Приемы".
 
Цитата
нужно чтобы макрос вызывался, как и стандартные функции, и данные перечислялись, так как ячейки с данными разбросаны по таблице.
Код
Function MaxOfAbs(ParamArray Numbers())
    Dim Item1, Item2
    Dim X As Double, XMax As Double, Y As Double
    On Error GoTo L1
    For Each Item1 In Numbers
        Item1 = Item1
        If IsArray(Item1) Then
            For Each Item2 In Item1
                X = Abs(Item2)
                If X > XMax Then
                    XMax = X
                    Y = Item2
                End If
            Next
        Else
            X = Abs(Item1)
            If X > XMax Then
                XMax = X
                Y = Item1
            End If
        End If
    Next
    MaxOfAbs = Y
    Exit Function
L1:
    Err.Clear
    MaxOfAbs = CVErr(xlErrValue)
End Function
Изменено: С.М. - 16.10.2013 14:07:49
 
С.М., это абсолютно то что нужно!!!! спасибо большое!
Страницы: 1
Читают тему
Наверх