Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Интервальный просмотр по двум параметрам
 
Инспирировано статьей ВПР (VLOOKUP) с интервальным просмотром

Цена на товар не является статической и со временем меняется. Необходимо найти возможность получить цену товара, которая была актуальной на момент его продажи.

Предлагается решение задачи (реализовано в Excel 2010)




Создаем две таблицы: Прайс и Журнал. В прайсе указываем цены на два товара Товар1 и Товар2, которые изменяются с течением времени.
В таблице Журнал ведем журнал продаж.

формулу для цены в таблице Журнал для удобства я разбил на две части. Первая часть вычисляет ближайшую меньшую дату из таблицы Прайс для выбранного товара:

Код
БлижМенДата=НАИБОЛЬШИЙ(Прайс[Дата]*(Прайс[Дата]<=Журнал[@Дата])*(Прайс[Товар]=Журнал[@Товар]);1) 
Эту часть формулы записываем в Диспетчер имен (раздел Формулы).

Далее в таблицу Журнал в столбец Цена вводит следующую формулу:

Код
{=ВПР(БлижМенДата&[@Товар];ВЫБОР({1;2};Прайс[Дата]&Прайс[Товар];Прайс[Цена]);2;0)}
Это формула массива, поэтому вводим ее при помощи Ctrl+Shift+Enter

В результате, находим цену для каждого товара, которая действовала на момент его продажи.

Решение реализовано таким образом, что не зависит от сортировки таблицы Прайс.
Изменено: Cepro - 23 Ноя 2014 20:48:26
 
И? Если желаете поделиться с другими - почему не в файле? Вдруг можно проще или по-другому - рассматривать картинку, а потом создавать отдельный файл... сделать снимок, чтобы показать свою картинку?
 
Цитата
vikttur пишет: почему не в файле?
Как не файле? Приложил же!
(Только не с первого раза - слегка запутался в интерфейсе)
 
много букав если чесно не понял че надо даже посмотрев пример
Лень двигатель прогресса, доказано!!!
 
Уже вижу.
Когда писал сообщение, Вы еще путались в интерфейсе :)
 
Без использования именованного диапазона:
=ПРОСМОТР(2;1/(($A$3:$A$10<=E3)*($B$3:$B$10=F3));$C$3:$C$10)
 
Здорово! Отличное решение.
Перевел в диапазоны:
Код
=ПРОСМОТР(2;1/((Прайс[Дата]<=[@Дата])*(Прайс[Товар]=[@Товар]));Прайс[Цена]) 
Если не трудно, разъясните как работает, пожалуйста. Справка по функции ПРОСМОТР не помогает ((
("Ищет значение в ... массиве. Включен для ... обратной совместимости" ;)
 
1/(($A$3:$A$10<=E3)*($B$3:$B$10=F3)) - массив из единиц и ошибок (деление на ноль).
Просим функцию найти наибольшее число, которого точно не будет в диапазоне поиска - двойку. Функция найдет позицию последнего числового значения, игнорируя ошибки, и покажет то, что мы просим показать - значение диапазона $C$3:$C$10, которое находится на найденной позиции.

Вычитал в заглавном сообщении:
Цитата
Решение реализовано таким образом, что не зависит от сортировки таблицы Прайс.
Для этого случая сложнее (формула массива):
Код
=ИНДЕКС(Прайс[Цена];ПОИСКПОЗ(МАКС(ЕСЛИ(Прайс[Товар]=[@Товар];ЕСЛИ(Прайс[Дата]<=[@Дата];Прайс[Дата])));ЕСЛИ(Прайс[Товар]=[@Товар];ЕСЛИ(Прайс[Дата]<=[@Дата];Прайс[Дата]));)) 
 
Да, с функцией ПРОСМОТР пришел к тому же выводу... )
Проверил универсальный вариант - ОК.

Но мой вариант, по-моему, нагляднее  ;)
Изменено: Cepro - 23 Ноя 2014 22:27:07
 
Вы читайте, читайте. Сообщение Выше.
 
Да, форум - не чат ))
Не успел я отредактировать сообщение, как вы уже ответили на первый вариант ))

Спасибо!
 
Цитата
...вариант... нагляднее
Выведите найденный диапазон в имя:
=ИНДЕКС(Прайс[Цена];ПОИСКПОЗ(МАКС(диапазон;диапазон;))
 
Да, отлично получилось!
Обновил файл - сделал два варианта:
Страницы: 1
Читают тему (гостей: 1)
Наверх