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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 10:51   #1
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию max за предыдущее количество значений

Подскажите, какую функцию можно придумать (применить), чтобы решить следующую задачу?
Есть одномерный массив значений
Для каждого текущего значения данного массива необходимо определить 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.
Спасибо
PARTOS вне форума Ответить с цитированием
Старый 18.11.2009, 11:07   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1. На VBA, или с поиощью формул (встроенных функций)?
2. Пользовательская функция устроит?
3. Зачем нужны границы ячеек массива? Задаем ячейку и определяем MIN и MAX пяти предыдущих ячеек в этом же столбце. Или что-то не так?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2009, 11:33   #3
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Пользовательская функция устроит.
Начальная граница массива необходима для следующего варианта:
Мы начинаем просматривать массив А1:А100 с первого элемента А1 , но условие (параметр) n может быть равен любому числу. Например, если n = 20 то для переменных начиная с А1 и заканчивая А19 – не будет достаточного количества аргументов =20 (для А1 – это будет 1 аргумент, для А2 – 2 аргумента и т.д.). И для того чтобы функция работала корректно необходимо предусмотреть вариант, когда значение n будет больше чем количество переменных до начала массива – в этом случае определение максимума/минимума должно производится от начала массива А1.
Конечная граница массива необходима для завершения процесса вычисления – дойдя до конца массива А100, прекращаются все расчёты.
PARTOS вне форума Ответить с цитированием
Старый 18.11.2009, 12:08   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Что не так?
Вложения
Тип файла: rar Книга1.rar (8.2 Кб, 12 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2009, 12:39   #5
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Можно использовать формулу:
=МАКС(СМЕЩ($A$1;B2-B3;;B3)), где
В2 - это номер строки, где начальное значение для определения максимума;
В3 - количество необходимых элементов массива
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн

Последний раз редактировалось DV68; 18.11.2009 в 12:44.
DV68 вне форума Ответить с цитированием
Старый 18.11.2009, 13:43   #6
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

[QUOTE=SAS888;392216]Посмотрите вложение. Что не так?[/QUOT
Что то я никак не пойму принцип работы этих функций.
PARTOS вне форума Ответить с цитированием
Старый 18.11.2009, 13:53   #7
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Цитата:
Сообщение от DV68 Посмотреть сообщение
Можно использовать формулу:
=МАКС(СМЕЩ($A$1;B2-B3;;B3)), где
В2 - это номер строки, где начальное значение для определения максимума;
В3 - количество необходимых элементов массива
Эта функция корректно работает только начиная с номера элемента массива равному В3. Если В3=5 (10,20 и т.д.) то и считать начинает только с 5 (10,20 и т.д.) элемента, когда перед ним уже появилось 5 (10,20 и т.д.) элементов массива. Другими словами, если я задал В3=30, то для 25 элемента я не узнаю предыдущий максимум.
PARTOS вне форума Ответить с цитированием
Старый 18.11.2009, 13:54   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 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.
По крайней мере, так я понял Ваш вопрос. А как нужно?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.11.2009, 14:27   #9
PARTOS
Пользователь
 
Регистрация: 24.10.2009
Сообщений: 87
По умолчанию

Я, наверное, неправильно объяснил: мне необходима функция, которая определяет максимумы/минимумы для каждого элемента массива за n предыдущих периодов. Другими словами:
- мы имеем массив А1:А100 и значение n-которое определяет количество предыдущих элементов массива, из которых мы находим максимум
- нам нужно сформировать такой массив В1:В100 в котором, каждый элемент В1,В2,В3( и т.д.) был бы равен максимальному значению из предыдущих n значений массива А1:А100

Формула, предложенная DV68 работает, только начиная с номера элемента массива равному В3…..
PARTOS вне форума Ответить с цитированием
Старый 18.11.2009, 16:40   #10
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Так:
=МАКС(СМЕЩ($A$1;ЕСЛИ(СТРОКА()<=$C$1 ;0;СТРОКА()-$C$1);;ЕСЛИ(СТРОКА()<=$C$1;СТРОКА() ;$C$1))), где С1 = n?
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неограниченное количество значений 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