Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.12.2008, 22:17   #1
meteor
Новичок
Джуниор
 
Регистрация: 05.12.2008
Сообщений: 2
Вопрос максимум

оочень простая на первый взляд задача: есть масив данных в экселе нужно найти максимальное значение с конца на n-значение

например, есть данные

4
6
7
8
9
10

нужно найти максимально отсающее от самого максимального на 3 числа. т.е. правильный ответ 8

вот моё творение

Function maxX(rng As Range, cut As Byte) As Single
Dim q As Object, w1 As Single, w2 As Single, w3 As Single, w4 As Single, i As Byte
w3 = 1E+19
For i = 1 To cut

For Each q In rng

w1 = q.Value

If w1 > w2 And w1 < w3 Then w2 = w1

' If w3 = w4 And w1 = w3 Then w2 = w1 'Debug.Print w1, " ", w2, " ", w3, " ", w4

w4 = w1

Next
w3 = w2
w2 = 0
w4 = 0

Next i
maxX = w3
End Function

моя проблема: если в массиве нет повторящихся чисел, то всё работает отлично, но если есть повторящиеся то начинаются проблемы, а имено

берём старый пример

4
6
7
8
9
9

теперь моя фунция выдаёт нет 8, а 7 что для решения моей проблемы является не приемлимым....

источник ошибки я нашёл и сам он строке w1 < w3, нужно ещё добовлять or w3=w4 (по моему мнению), но тогда алгоритм спотыкацца в другом месте.... и дальше что делать я не знаю
meteor вне форума
Старый 05.12.2008, 22:47   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

без макросов:
есть функция НАИБОЛЬШИЙ. посмотрите справку по ней, там все написано.
или одной строкой в ВБА:
L3 = worksheetfuntion.large(range, 3) вместо range укажите свой диапазон
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 06.12.2008, 13:08   #3
meteor
Новичок
Джуниор
 
Регистрация: 05.12.2008
Сообщений: 2
Радость

да... блин всё оказалось проще чем я думал спасиб.. буду учить стандартные функции
meteor вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отсортировать массив под данный отрезок и как минимум и максимум из него найти SIEGER Паскаль, Turbo Pascal, PascalABC.NET 1 20.11.2008 08:58