Вопрос по VBA в Excel

 
Есть значения в ячейках с A1 по A20, как на VBA найти максимальное значение, второе максимальное значение? В книгах по Excel только самые простые примеры есть. Может просто можно переменную задать со свойством максимум из диапазона и второй максимум из диапазона.
 
можно и без VBA
Файлы:
 
ForexTools:
можно и без VBA

У меня таблица реал тайм обновляется, на VBA только все работает, нашел формулу;

maxval = Application.WorksheetFunction.Max(Range("F:F"))

но хотелось бы и второй и третий максимум легко находить, может знаешь как это сделать?

maxval = Application.WorksheetFunction.Max2(Range("F:F"))???
 

ну так а в чем проблема?

формулы у меня написаны на любое к-во максимумов ;)

У меня таблица реал тайм обновляется, на VBA только все работает

после обновления в VBA дописать Calculate и лист пересчитает формулы с новыми данными

но можно и тупо перебирать в цикле Cells(R,C).Value по всему диапазону и запоминать нужные значения

 
eugene771:

У меня таблица реал тайм обновляется, на VBA только все работает, нашел формулу;

maxval = Application.WorksheetFunction.Max(Range("F:F"))

но хотелось бы и второй и третий максимум легко находить, может знаешь как это сделать?

maxval = Application.WorksheetFunction.Max2(Range("F:F"))???



Sub Функция()
    Максимальный 9
End Sub


Sub Максимальный(ПослМакс As Double)
    Dim Диапазон As Object
    Dim МаксЧисло As Double
    ' Поиск максимального числа в выделенном диапазоне
    МаксЧисло = -1000 ' гарантированно минимальное число
    For Each Диапазон In Selection
        If Диапазон.Value > МаксЧисло And Диапазон.Value <> ПослМакс Then
            МаксЧисло = Диапазон.Value
        End If
    Next Диапазон
End Sub

Как вариант на скорую руку

Функция Максимальный() ищет максимальное число в выделенном диапазоне, но максимальное число не больше ПослМакс. Функция Функция() вызывает функцию Максимальный(), а в качестве параметра указывает последнее найденное максимальное число. Так можно последовательно находить все "последние" максимальные

 

k=1 '2,3,4...

Application.WorksheetFunction.Large(Range("F:F"),k)


НАИБОЛЬШИЙ

Возвращает k-ое по величине значение из множества данных.

Эта функция позволяет выбрать значение по его относительному местоположению.

Например, функцию НАИБОЛЬШИЙ можно использовать для определения наилучшего, второго или третьего результатов тестирования в баллах.

 
можно сводной табличкой
Файлы:
 
ForexTools:

ну так а в чем проблема?

формулы у меня написаны на любое к-во максимумов ;)

после обновления в VBA дописать Calculate и лист пересчитает формулы с новыми данными

но можно и тупо перебирать в цикле Cells(R,C).Value по всему диапазону и запоминать нужные значения


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

 
:)))))))))))))))))))))))))))
 
TheVilkas:

k=1 '2,3,4...

Application.WorksheetFunction.Large(Range("F:F"),k)


НАИБОЛЬШИЙ

Возвращает k-ое по величине значение из множества данных.

Эта функция позволяет выбрать значение по его относительному местоположению.

Например, функцию НАИБОЛЬШИЙ можно использовать для определения наилучшего, второго или третьего результатов тестирования в баллах.

Спасибо большое, именно то что нужно, и всем спасибо, приведенный код с циклами также сохраню.
 
eugene771:

извини, для наибольших Large, а для наименьшего что будет?
Application.WorksheetFunction.Small
Причина обращения: