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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2010, 10:37   #1
getikalex
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 73
По умолчанию подстчет прироста значения после последнего замера

Умные люди, подскажите как организовать.
Имеется простая таблица замеряемых объектов., :
Объект----дата замера----показатель---- предыдущее значение – прирост
Первые три столбца – вводятся, последние два – надо подставлять и рассчитывать
Мне надо, чтобы для каждой даты замера подыскивалось из списка предыдущее (по дате) значение показателя, и можно было вычислить прирост показателя за время, прошедшее с последнего замера.
Пока строки отсортированы (на первом листе примера) это еще полбеды.
Но беда еще в том, что строки могут быть неотсортированы (на втором листе примера)
Мне надо найти решение в неотсортированном варианте.
Вложения
Тип файла: rar подсчет изменения .rar (4.7 Кб, 15 просмотров)

Последний раз редактировалось getikalex; 23.09.2010 в 10:39.
getikalex вне форума Ответить с цитированием
Старый 23.09.2010, 15:03   #2
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Можно так (формула массива):
Код:
=ПРОСМОТР(МАКС(ЕСЛИ($B$2:$B$16=B2;ЕСЛИ($C$2:$C$16<C2;$C$2:$C$16)));
ЕСЛИ($B$2:$B$16=B2;ЕСЛИ($C$2:$C$16<C2;$C$2:$C$16));$D$2:$D$16)
но две строчки вызывают сомнения, я их выделил красным.
Вложения
Тип файла: rar подсчет изменения_ответ.rar (5.3 Кб, 14 просмотров)
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 23.09.2010, 15:27   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

getikalex забыл указать нюанс,что за один день может быть несколько замеров.
Внесены они могут быть в любое время.
Я уже сталкивался с такими данными в его предыдущей теме.

getikalex вам надо немного модеренизировать тот макрос,и проблема решится
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 23.09.2010, 16:29   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Через ИНДЕКС и ПОИСКПОЗ
Код:
=ИНДЕКС(ЕСЛИ($B$2:$B$16=B2;ЕСЛИ($C$2:$C$16<C2;$D$2:$D$16));ПОИСКПОЗ(МАКС(ЕСЛИ($B$2:$B$16=B2;ЕСЛИ($C$2:$C$16<C2;$C$2:$C$16)));ЕСЛИ($B$2:$B$16=B2;ЕСЛИ($C$2:$C$16<C2;$C$2:$C$16));0))
есть за один день два показателя.
За счет этого у меня с DV68 не совпало значение. Дока пишет, что ПРОСМОТР годится только для сортированных массивов.
ПОИСКПОЗ с точным совпадением остановился на первой дате, которая равна критерию поиска, а ПРОСМОТР искал первую, которая будет больше, чтобы забрать предыдущее значение...
Вложения
Тип файла: rar Книга407.rar (8.1 Кб, 19 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.09.2010, 17:52   #5
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Массив для ИНДЕКСа можно просто $D$2:$D$16.
А ПРОСМОТРу, по-моему, все равно, сортирован массив или нет, если вводить как формулу массива.
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 23.09.2010, 18:20   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

"для ИНДЕКСа можно просто $D$2:$D$16" - согласен и короче и быстрее

для ПРОСМОТРА в этом случае оказалось все-равно, потому что все даты больше текущей заменены на ЛОЖЬ, а так бы ПРОСМОТР нарвался на первую дату больше текущей, и выдал бы значение по предыдущей строке

ПРОСМОТР(4;{1;2;5;3;4}) выдаст 2 как результат, согласно описанного выше алгоритма работы
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.09.2010, 18:30   #7
DV68
Форумчанин
 
Регистрация: 05.08.2009
Сообщений: 465
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
...а так бы ПРОСМОТР нарвался на первую дату больше текущей, и выдал бы значение по предыдущей строке

ПРОСМОТР(4;{1;2;5;3;4}) выдаст 2 как результат, согласно описанного выше алгоритма работы
Да, действительно, спасибо.
"Все следует делать настолько простым, насколько это возможно, но не проще." Альберт Эйнштейн
DV68 вне форума Ответить с цитированием
Старый 23.09.2010, 18:58   #8
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Код:
=ИНДЕКС($D$2:$D$16;ПОИСКПОЗ(1;($C$2:$C$16=МАКС(($B$2:$B$16=B2)*($C$2:$C$16<C2)*$C$2:$C$16))*($B$2:$B$16=B2);0);)
ZORRO2005 вне форума Ответить с цитированием
Старый 23.09.2010, 21:17   #9
getikalex
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 73
По умолчанию

В конечном итоге предложенные варианты выдают ошибочное значение в "красных" строках .
Можно этого избежать ?

PS. Да, задачку я сходу недооценил... А решение хотя бы для отсортированного варианта без красных строк может кто-то подсказать ?

PPS. 2 doober. Макросы редактировать - дело непростое, но это еще не все. Надо знать алгоритм, как именно добиться результата. Пока еще этот алгоритм не нашел...

Последний раз редактировалось getikalex; 23.09.2010 в 22:48.
getikalex вне форума Ответить с цитированием
Старый 23.09.2010, 23:12   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а можно полюбопытствовать, как Вами получены предыдущие значения в этих самых красных строках? и чем отличаются красные строки (кроме цвета заливки) от отстальных, не красных?

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

вопросы прежние:
1.каков алгоритм определения предыдущего показателя для красной строки?
2.как отличить красную строку от обычной?
3.какое значение считать предыдущим, если есть несколько измерений за один день?

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано предложение. Между словами предложения один пробел, а после последнего слова точка. Vadim123456 Помощь студентам 0 01.05.2010 23:28
сумму элементов массива, расположенных после последнего элемента, равного нулю. R@Ziel Помощь студентам 2 17.12.2009 23:44
консоль закрывается сразу после выполнения последнего действия F4RR3LL Общие вопросы C/C++ 2 14.09.2008 20:43
Указание последнего в строке значения прерывистого ряда значений. Baloo007 Microsoft Office Excel 10 06.08.2008 15:20
Автоматическая подстановка последнего значения d_yure Microsoft Office Excel 9 28.12.2007 08:30