Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы
Старый 05.12.2008, 23: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, 23:47   #2
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,300
По умолчанию

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS