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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2011, 23:23   #1
Tanka097
Пользователь
 
Регистрация: 01.07.2011
Сообщений: 11
По умолчанию Формулы в Excel

Здравствуйте.

Подскажите, как правильно написать формулы для получения предыдущей цены и даты этой цены по данным приведенным в таблице (см. вложение).


Для подсчета предыдущей цены я использовала формулу:
=ЕСЛИ(J4<>H4;H4;ЕСЛИ(J4<>F4;F4;ЕСЛИ (J4<>D4;D4;ЕСЛИ(J4<>B4;B4;J4))))

формула рассчитывает цену правильно, но мне кажется, данная реализация не оптимальна.

Подскажите, как найти дату этой предыдущей найденной цены?
Можно было бы ее найти с помощью функций ПОИСКПОЗ и ИНДЕКС, но в данном случае необходимо, чтобы поиск шел справа налево.
Спасибо.
Вложения
Тип файла: rar Поиск предыдущей цены.rar (8.3 Кб, 21 просмотров)
Tanka097 вне форума Ответить с цитированием
Старый 01.07.2011, 23:56   #2
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Можно напридумывать типа
Код:
{=МИН(ЕСЛИ(J4<>ЕСЛИ($B$3:$K$3;B4:K4);ЕСЛИ($B$3:$K$3;B4:K4)))}
Но, по моему мнению, Ваша реализация с точки зрения скорости (а на большой таблице это имеет большое значение) оптимальна. Для даты Ваша же формула:
Код:
=ЕСЛИ(J4<>H4;J3;ЕСЛИ(J4<>F4;H3;ЕСЛИ(J4<>D4;F3;ЕСЛИ(J4<>B4;D3;J3))))
vikttur вне форума Ответить с цитированием
Старый 02.07.2011, 00:10   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а таблица будет еще вправо расти?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2011, 00:37   #4
Tanka097
Пользователь
 
Регистрация: 01.07.2011
Сообщений: 11
По умолчанию

Таблица расти не будет, но сейчас мне важно найти более оптимальную реализацию.

1. Может при поиске предыдущей цены использовать цикл?
2. Чтобы найти предыдущую дату, есть ли способы осуществить поиск позиции по значению справа налево?
Tanka097 вне форума Ответить с цитированием
Старый 02.07.2011, 00:51   #5
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Я Вам показал пример формулы массива, сродни циклу. Недостаток - тяжелая в расчетах. Зачем Вам циклы? Функция ЕСЛИ() тем хороша, что отрезает ненужные вычисления. Не нужно это недооценивать.
То же касается извлечения даты.
vikttur вне форума Ответить с цитированием
Старый 02.07.2011, 01:19   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Виктор, там не минимальная цена нужна, а ближайшая, которая отличается...
задал имя МС (Максимальный Столбец) - формулы сделались элементарными.
Вложения
Тип файла: rar КнигаH691.rar (4.0 Кб, 12 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2011, 01:54   #7
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Цитата:
Сообщение от IgorGO
Виктор, там не минимальная цена нужна, а ближайшая, которая отличается...
Почему же не минимальная цена? В строке цены расположены по убыванию, берем ближайшую, т.е. минимальную.
Цитата:
Сообщение от IgorGO
задал имя МС (Максимальный Столбец) - формулы сделались элементарными.
Формула уменьшилась, но имя добавило расчетов.
Автор просит оптимизации. Я пока утверждаю, что решение Tanka097 для данной таблицы оптимально.
vikttur вне форума Ответить с цитированием
Старый 02.07.2011, 10:32   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Почему же не минимальная цена?
потому что в исходных формулах рассматривается условие не "меньше", а "не равно". а то, что на приведенном фрагменте таблицы такой ценой оказывалась минимальная - полагаю совпадение.
короче и оптимальнее ее формулы не написать - это точно.
что автор вклаывает в понятие оптимизации - не ясно?
Цитата:
Таблица расти не будет, но сейчас мне важно найти более оптимальную реализацию.
я еще понимаю - росла бы таблица вправо и каждые два новых столбика формулу переписывать и размножать, а так - понятие оптимизации - довольно загадочно.

ЗЫ.
не имею чести быть представленным, но звезды мне подсказывают, что Вас зовут Таня.
ничего что мы с Виктором к Вам при Вас в третьем лице обращаемся?)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.07.2011, 13:50   #9
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Вариант:
Код:
=ЕСЛИ(СРЗНАЧ(H4;F4;D4;B4)=J4;J4;ПРОСМОТР(2;1/((B$3:H$3<K4)*{1;0;1;0;1;0;1;0});B4:H4))
Вложения
Тип файла: rar Поиск предыдущей цены_отв.rar (5.2 Кб, 39 просмотров)
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формулы в Excel Евгеньевич Microsoft Office Excel 9 05.09.2010 17:22
Формулы в Excel sasha198407 Microsoft Office Excel 6 07.05.2009 15:42
Формулы в Excel ROBERT033 Microsoft Office Excel 11 25.02.2009 12:37
Формулы Excel vvi23 Microsoft Office Excel 5 09.12.2008 20:58
формулы в excel, HELP Toxa БД в Delphi 0 03.05.2007 09:55