![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Подскажите, какую функцию можно придумать (применить), чтобы решить следующую задачу?
Есть одномерный массив значений Для каждого текущего значения данного массива необходимо определить max(min) за предыдущее количество значений = n. Другими словами, если n=5, то для каждого элемента массива находится max(min) из предыдущих 5 элементов массива. (что-то вроде – максимум(А1:А100;А36;5) Где А1:А100 – весь используемый массив; А36 - начальное значение для определения максимума; 5-количество элементов массива до начального значения А36 (А36 включается), среди которых определяем максимальное значение В этом случае мы находим максимум среди предыдущих 5 значений массива начиная с А36. Получаем – максимум из А36,А35,А34,А33,А32. Спасибо |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
1. На VBA, или с поиощью формул (встроенных функций)?
2. Пользовательская функция устроит? 3. Зачем нужны границы ячеек массива? Задаем ячейку и определяем MIN и MAX пяти предыдущих ячеек в этом же столбце. Или что-то не так?
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Пользовательская функция устроит.
Начальная граница массива необходима для следующего варианта: Мы начинаем просматривать массив А1:А100 с первого элемента А1 , но условие (параметр) n может быть равен любому числу. Например, если n = 20 то для переменных начиная с А1 и заканчивая А19 – не будет достаточного количества аргументов =20 (для А1 – это будет 1 аргумент, для А2 – 2 аргумента и т.д.). И для того чтобы функция работала корректно необходимо предусмотреть вариант, когда значение n будет больше чем количество переменных до начала массива – в этом случае определение максимума/минимума должно производится от начала массива А1. Конечная граница массива необходима для завершения процесса вычисления – дойдя до конца массива А100, прекращаются все расчёты. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Посмотрите вложение. Что не так?
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 05.08.2009
Сообщений: 465
|
![]()
Можно использовать формулу:
=МАКС(СМЕЩ($A$1;B2-B3;;B3)), где В2 - это номер строки, где начальное значение для определения максимума; В3 - количество необходимых элементов массива
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
Последний раз редактировалось DV68; 18.11.2009 в 12:44. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
[QUOTE=SAS888;392216]Посмотрите вложение. Что не так?[/QUOT
Что то я никак не пойму принцип работы этих функций. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Эта функция корректно работает только начиная с номера элемента массива равному В3. Если В3=5 (10,20 и т.д.) то и считать начинает только с 5 (10,20 и т.д.) элемента, когда перед ним уже появилось 5 (10,20 и т.д.) элементов массива. Другими словами, если я задал В3=30, то для 25 элемента я не узнаю предыдущий максимум.
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
В функцию передаются 3 аргумента:
1. Диапазон ячеек (массив) 2. Адрес ячейки, начиная с которой нужно брать N значений назад. 3. Количество значений. Так, в примере в ячейке "B1" находится функция "=MaxVal(A1:A100;A10;5)" Т.е. будет найдено максимальное значение в диапазоне "A1:A100" от ячейки "A6" до ячейки "A10" (заданная ячейка "A10" и 5 значений перед ней). Если же, например, задать "=MaxVal(A12:A100;A15;5)", то будет получено максимальное значение из диапазона "A12:A15" (т.к. есть ограничение "снизу"). Аналогично для функции MinVal. По крайней мере, так я понял Ваш вопрос. А как нужно?
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 24.10.2009
Сообщений: 87
|
![]()
Я, наверное, неправильно объяснил: мне необходима функция, которая определяет максимумы/минимумы для каждого элемента массива за n предыдущих периодов. Другими словами:
- мы имеем массив А1:А100 и значение n-которое определяет количество предыдущих элементов массива, из которых мы находим максимум - нам нужно сформировать такой массив В1:В100 в котором, каждый элемент В1,В2,В3( и т.д.) был бы равен максимальному значению из предыдущих n значений массива А1:А100 Формула, предложенная DV68 работает, только начиная с номера элемента массива равному В3….. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 05.08.2009
Сообщений: 465
|
![]()
Так:
=МАКС(СМЕЩ($A$1;ЕСЛИ(СТРОКА()<=$C$1 ;0;СТРОКА()-$C$1);;ЕСЛИ(СТРОКА()<=$C$1;СТРОКА() ;$C$1))), где С1 = n?
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Неограниченное количество значений | Syltan | Общие вопросы C/C++ | 13 | 31.08.2009 16:04 |
как найти предыдущее зачение | demonic | Microsoft Office Access | 6 | 09.02.2009 17:37 |
количество цифр и количество символов до первой гласной буквы | 111111 | Общие вопросы C/C++ | 2 | 22.12.2008 12:15 |
запомнить предыдущее значение | StasSv | Microsoft Office Excel | 1 | 10.11.2008 08:47 |
Предыдущее активное окно | martinz | Win Api | 3 | 25.11.2007 15:02 |