Добрый день! Помогите решить задачу пожалуйста? Есть заданная дата, нужно в таблице с данными найти соответствующее этой дате значение, удовлетворяющее определенному условию. Если же в заданную дату этого значения нет, то тогда использовать значение соответствующее ближайшей дате от заданной.
Вот здесь пример: https://docs.google.com/spreads....t#gid=0 Необходимо найти цену заказа товара ('Заказы (исх.)'!H:H) на вкладке "Заказы (исх.)", соответствующую заданной дате в строке "2:2" на вкладке "Лист1" и если выполняется условие B3='Заказы (исх.)'!N:N Если же в заданную дату это условие не выполняется (B3='Заказы (исх.)'!N:N), то нужно найти ближайшую дату, где оно выполняется, и взять значение оттуда.
Добрый день! Помогите решить задачу пожалуйста? Есть заданная дата, нужно в таблице с данными найти соответствующее этой дате значение, удовлетворяющее определенному условию. Если же в заданную дату этого значения нет, то тогда использовать значение соответствующее ближайшей дате от заданной.
Вот здесь пример: https://docs.google.com/spreads....t#gid=0 Необходимо найти цену заказа товара ('Заказы (исх.)'!H:H) на вкладке "Заказы (исх.)", соответствующую заданной дате в строке "2:2" на вкладке "Лист1" и если выполняется условие B3='Заказы (исх.)'!N:N Если же в заданную дату это условие не выполняется (B3='Заказы (исх.)'!N:N), то нужно найти ближайшую дату, где оно выполняется, и взять значение оттуда.dminicab
Сообщение отредактировал dminicab - Четверг, 27.10.2022, 23:07
Насколько я понял, при наличии нескольких времен внутри одной даты Вас интересует значение цены, соответствующее максимальному (т.е. наиболее позднему) из этих времен. Фактически это означает поиск цены для последней секунды "текущих" суток, т.е. для момента времени Дата + 23:59:59. При отсутствии в таблице записи, точно соответствующей этому моменту времени, берется ближайшее меньшее время, например, Дата + 22:00. Т.е. поведение алгоритма соответствует поведению функции ВПР (VLOOKUP) c четвертым параметром, равным 1.
С учетом вышесказанного формулу предлагаю такую (для ячейки Q3): [vba]
[/vba]Функция FILTER здесь отбирает строки с датами не раньше недели (это я так решил) до "текущей" даты (Q$2-7) и все строки "текущих" суток (Q$2+1), не включая крайние моменты времени этого восьмидневного интервала (0; 0). Мой диапазон "7 дней в прошлое" можно сократить до приемлемого меньшего количества дней - главное, чтобы до момента времени Дата + 23:59:59 функция FILTER гарантированно возвращала хотя бы одну строку, иначе возникнет ошибка. Задайте это кол-во дней сами, основываясь на собственном опыте.
Если же вдруг всё наоборот и интересует самое ранее время внутри текущих суток (в идеале на момент времени Дата + 00:00:00), то формуле можно придать следующий вид (с подстраховкой - обработкой возможного отсутствия строк с текущей датой в принципе): [vba]
[/vba]Как видно, первая формула стала второй ("ошибочной") частью второй формулы ("найти хоть что-то в прошлом"), а первая часть второй формулы при этом ищет (если найдёт) самое ранее время внутри текущих суток.
Если же интересует цена на какое-то специфическое время внутри текущих суток, например, в полдень 12:00, то в первой части второй формулы условие для дат нужно записать одним из способов ниже: [vba]
[/vba] [p.s.]Есть важное замечание - см. ниже моё сообщение №9[/p.s.] Вместо 'Заказы (исх.)'!$H:$H надо {'Заказы (исх.)'!$B:$B\ 'Заказы (исх.)'!$H:$H - 'Заказы (исх.)'!$I:$I} и вместо INDEX(...; 1) надо INDEX(...; 1; 2)
Насколько я понял, при наличии нескольких времен внутри одной даты Вас интересует значение цены, соответствующее максимальному (т.е. наиболее позднему) из этих времен. Фактически это означает поиск цены для последней секунды "текущих" суток, т.е. для момента времени Дата + 23:59:59. При отсутствии в таблице записи, точно соответствующей этому моменту времени, берется ближайшее меньшее время, например, Дата + 22:00. Т.е. поведение алгоритма соответствует поведению функции ВПР (VLOOKUP) c четвертым параметром, равным 1.
С учетом вышесказанного формулу предлагаю такую (для ячейки Q3): [vba]
[/vba]Функция FILTER здесь отбирает строки с датами не раньше недели (это я так решил) до "текущей" даты (Q$2-7) и все строки "текущих" суток (Q$2+1), не включая крайние моменты времени этого восьмидневного интервала (0; 0). Мой диапазон "7 дней в прошлое" можно сократить до приемлемого меньшего количества дней - главное, чтобы до момента времени Дата + 23:59:59 функция FILTER гарантированно возвращала хотя бы одну строку, иначе возникнет ошибка. Задайте это кол-во дней сами, основываясь на собственном опыте.
Если же вдруг всё наоборот и интересует самое ранее время внутри текущих суток (в идеале на момент времени Дата + 00:00:00), то формуле можно придать следующий вид (с подстраховкой - обработкой возможного отсутствия строк с текущей датой в принципе): [vba]
[/vba]Как видно, первая формула стала второй ("ошибочной") частью второй формулы ("найти хоть что-то в прошлом"), а первая часть второй формулы при этом ищет (если найдёт) самое ранее время внутри текущих суток.
Если же интересует цена на какое-то специфическое время внутри текущих суток, например, в полдень 12:00, то в первой части второй формулы условие для дат нужно записать одним из способов ниже: [vba]
[/vba] [p.s.]Есть важное замечание - см. ниже моё сообщение №9[/p.s.] Вместо 'Заказы (исх.)'!$H:$H надо {'Заказы (исх.)'!$B:$B\ 'Заказы (исх.)'!$H:$H - 'Заказы (исх.)'!$I:$I} и вместо INDEX(...; 1) надо INDEX(...; 1; 2)Gustav
Насколько я понял, при наличии нескольких времен внутри одной даты Вас интересует значение цены, соответствующее максимальному (т.е. наиболее позднему) из этих времен.
Не совсем :angel:
По времени мне не нужно. Мне нужно, чтобы функция возвращала цену " 'Заказы (исх.)'!$H:$H ", в заданную дату " Q$2 ". С условием соответствия " 'Заказы (исх.)'!$N:$N = --$B3 ". Если же функция не находит цену в заданную дату, нужно, чтобы она (функция) брала цену с ближайшей даты до заданной " 2:Q$2 ". Т.е. если в заданную дату в таблице " 'Заказы (исх.) " значение цены отсутствует, нужно чтобы она (функция) искала цену в ближайшую дату до заданной даты, и возвращала цену за ту дату, в которой она (цена) есть.
А вообще мне нужно, чтобы возвращалась цена (" 'Заказы (исх.)'!$H:$H ") минус скидка (" 'Заказы (исх.)'!$I:$I "). Но я в принципе потом смогу это сам высчитать.
Насколько я понял, при наличии нескольких времен внутри одной даты Вас интересует значение цены, соответствующее максимальному (т.е. наиболее позднему) из этих времен.
Не совсем :angel:
По времени мне не нужно. Мне нужно, чтобы функция возвращала цену " 'Заказы (исх.)'!$H:$H ", в заданную дату " Q$2 ". С условием соответствия " 'Заказы (исх.)'!$N:$N = --$B3 ". Если же функция не находит цену в заданную дату, нужно, чтобы она (функция) брала цену с ближайшей даты до заданной " 2:Q$2 ". Т.е. если в заданную дату в таблице " 'Заказы (исх.) " значение цены отсутствует, нужно чтобы она (функция) искала цену в ближайшую дату до заданной даты, и возвращала цену за ту дату, в которой она (цена) есть.
А вообще мне нужно, чтобы возвращалась цена (" 'Заказы (исх.)'!$H:$H ") минус скидка (" 'Заказы (исх.)'!$I:$I "). Но я в принципе потом смогу это сам высчитать.dminicab
Мне нужно, чтобы функция возвращала цену " 'Заказы (исх.)'!$H:$H ", в заданную дату " Q$2 ". С условием соответствия " 'Заказы (исх.)'!$N:$N = --$B3 ". Если же функция не находит цену в заданную дату
А если находит НЕСКОЛЬКО цен в заданной дате? Какую брать? Самую раннюю из них? А если самая ранняя имеет время 19:00, то брать её или всё же последнюю цену ДО текущей даты? Т.е. фактически всегда искать цену на момент времени 00:00 текущей даты (т.е. даты без "хвоста" времени), так?
Если так, то всё, что нужно сделать - убрать в моей самой первой формуле "+1" в третьем параметре функции ISBETWEEN, а пятый заменить на "1": [vba]
[/vba] [p.s.]Есть важное замечание - см. ниже моё сообщение №9[/p.s.] Вместо 'Заказы (исх.)'!$H:$H надо {'Заказы (исх.)'!$B:$B\ 'Заказы (исх.)'!$H:$H - 'Заказы (исх.)'!$I:$I} и вместо INDEX(...; 1) надо INDEX(...; 1; 2)
Мне нужно, чтобы функция возвращала цену " 'Заказы (исх.)'!$H:$H ", в заданную дату " Q$2 ". С условием соответствия " 'Заказы (исх.)'!$N:$N = --$B3 ". Если же функция не находит цену в заданную дату
А если находит НЕСКОЛЬКО цен в заданной дате? Какую брать? Самую раннюю из них? А если самая ранняя имеет время 19:00, то брать её или всё же последнюю цену ДО текущей даты? Т.е. фактически всегда искать цену на момент времени 00:00 текущей даты (т.е. даты без "хвоста" времени), так?
Если так, то всё, что нужно сделать - убрать в моей самой первой формуле "+1" в третьем параметре функции ISBETWEEN, а пятый заменить на "1": [vba]
[/vba] [p.s.]Есть важное замечание - см. ниже моё сообщение №9[/p.s.] Вместо 'Заказы (исх.)'!$H:$H надо {'Заказы (исх.)'!$B:$B\ 'Заказы (исх.)'!$H:$H - 'Заказы (исх.)'!$I:$I} и вместо INDEX(...; 1) надо INDEX(...; 1; 2)Gustav
ОЙ-ОЙ-ОЙ! Только щас заметил - сортирую-то я не даты, а цены!! Как-то удалил столбец дат в процессе манипуляций... Скорее-скорее всё исправляем! И с учетом вот этого:
ОЙ-ОЙ-ОЙ! Только щас заметил - сортирую-то я не даты, а цены!! Как-то удалил столбец дат в процессе манипуляций... Скорее-скорее всё исправляем! И с учетом вот этого:
Я подставил указанную формулу, и она почему-то не возвращает корректное значение. Формула возвращает значение "16490" или "16990", фактическое же значение в таблице "11920" С чем это может быть связано?
Я подставил указанную формулу, и она почему-то не возвращает корректное значение. Формула возвращает значение "16490" или "16990", фактическое же значение в таблице "11920" С чем это может быть связано?dminicab
А и правда с чем? Может быть, с тем, что Вы в своем сообщении №10 цитируете мое №8, не прочитав более позднее моё №9 ? Так читайте его скорее - там всё написано и исправлено, даже с учётом Ваших последних пожеланий про скидку.
А и правда с чем? Может быть, с тем, что Вы в своем сообщении №10 цитируете мое №8, не прочитав более позднее моё №9 ? Так читайте его скорее - там всё написано и исправлено, даже с учётом Ваших последних пожеланий про скидку.Gustav
А и правда с чем? Может быть, с тем, что Вы в своем сообщении №10 цитируете мое №8, не прочитав более позднее моё №9 ? Так читайте его скорее - там всё написано и исправлено, даже с учётом Ваших последних пожеланий про скидку.
Увидел, спасибо! Но все равно возвращает не корректные данные(
Я ее немного подправил с учетом того, что скидка в столбце " 'Заказы (исх.)'!$I:$I " указана в процентах.
Но и все равно функция дает результат "5947", а проверка показывает, что результат должен быть "4581,5". Причем при одних и тех же вводных, она почему-то 12.10 дает результат "5772", а в остальные даты "5947". Может быть я что-то не так делаю?
А и правда с чем? Может быть, с тем, что Вы в своем сообщении №10 цитируете мое №8, не прочитав более позднее моё №9 ? Так читайте его скорее - там всё написано и исправлено, даже с учётом Ваших последних пожеланий про скидку.
Увидел, спасибо! Но все равно возвращает не корректные данные(
Я ее немного подправил с учетом того, что скидка в столбце " 'Заказы (исх.)'!$I:$I " указана в процентах.
Но и все равно функция дает результат "5947", а проверка показывает, что результат должен быть "4581,5". Причем при одних и тех же вводных, она почему-то 12.10 дает результат "5772", а в остальные даты "5947". Может быть я что-то не так делаю?dminicab
проверка показывает, что результат должен быть "4581,5"
Это для какой даты и для какого артикула такой результат получается? Я посчитал "сумму - скидку" для всей таблицы "Заказы (исх.)" - ни одна ее строка не возвращает такого значения. Ближайшее к этому значению снизу - "4558", а потом сразу идёт значение "4598", которое уже больше указанного Вами.
И у Вас моя формула, предназначенная для ячейки Q3 (о чем написано в сообщении №6), т.е. для даты 10.10, была введена без корректировки адресов в условии по датам в ячейку S3, т.е. для даты 12.10. Т.е. у Вас сейчас в таблице напротив даты 12.10 стоит формула, считающая для даты 10.10.
На картинке - все записи для трех артикулов за период с 08.10 по 17.10 (отсортированы по убыванию даты/времени). Ну, и где что неправильно?
проверка показывает, что результат должен быть "4581,5"
Это для какой даты и для какого артикула такой результат получается? Я посчитал "сумму - скидку" для всей таблицы "Заказы (исх.)" - ни одна ее строка не возвращает такого значения. Ближайшее к этому значению снизу - "4558", а потом сразу идёт значение "4598", которое уже больше указанного Вами.
И у Вас моя формула, предназначенная для ячейки Q3 (о чем написано в сообщении №6), т.е. для даты 10.10, была введена без корректировки адресов в условии по датам в ячейку S3, т.е. для даты 12.10. Т.е. у Вас сейчас в таблице напротив даты 12.10 стоит формула, считающая для даты 10.10.
На картинке - все записи для трех артикулов за период с 08.10 по 17.10 (отсортированы по убыванию даты/времени). Ну, и где что неправильно?
Это для какой даты и для какого артикула такой результат получается?
Ну вот к примеру дата: 12.08.22 (в прошлом примере ошибся с датой), артикул: 39786769 Я беру общую цену " 'Заказы (исх.)'!$H6 " = 11920 и вычитаю из нее скидку " 'Заказы (исх.)'!$I6 " = 65%, которая в денежном выражении будет составлять => 11920*65% = 7338,5. И затем размер этой скидки я вычитаю из общей цены, чтобы получить фактическую рыночную цену 11920-7338,5 = 4581,5 Как-то так у меня получается
И тут для расчетов даты нужно использовать столбец " 'Заказы (исх.)'!$C:$C ", а не " 'Заказы (исх.)'!$B:$B "
Все, разобрался. Вернулся к первоначально использованным датам (октябрь). Да цену вычисляются корректно, только вот почему-то у меня не происходит изменение цены в нужную дату. Например артикул "39786769". У него до 10.10 цена 5772, а потом с 11.10 вырастает до 5947. Но у меня почему-то этот рост не с 11.10, а с 13.10
Это для какой даты и для какого артикула такой результат получается?
Ну вот к примеру дата: 12.08.22 (в прошлом примере ошибся с датой), артикул: 39786769 Я беру общую цену " 'Заказы (исх.)'!$H6 " = 11920 и вычитаю из нее скидку " 'Заказы (исх.)'!$I6 " = 65%, которая в денежном выражении будет составлять => 11920*65% = 7338,5. И затем размер этой скидки я вычитаю из общей цены, чтобы получить фактическую рыночную цену 11920-7338,5 = 4581,5 Как-то так у меня получается
И тут для расчетов даты нужно использовать столбец " 'Заказы (исх.)'!$C:$C ", а не " 'Заказы (исх.)'!$B:$B "
Все, разобрался. Вернулся к первоначально использованным датам (октябрь). Да цену вычисляются корректно, только вот почему-то у меня не происходит изменение цены в нужную дату. Например артикул "39786769". У него до 10.10 цена 5772, а потом с 11.10 вырастает до 5947. Но у меня почему-то этот рост не с 11.10, а с 13.10dminicab
Сообщение отредактировал dminicab - Воскресенье, 30.10.2022, 11:09
И тут для расчетов даты нужно использовать столбец " 'Заказы (исх.)'!$C:$C ", а не " 'Заказы (исх.)'!$B:$B "
А вот об этом Вы бы еще через год сказали. Знаете, что-то я устал этому топику помогать, пойду, пожалуй. Материала уже и так предостаточно выдано.Gustav
Все, разобрался. Вернулся к первоначально использованным датам (октябрь). Да цену вычисляются корректно, только вот почему-то у меня не происходит изменение цены в нужную дату. Например артикул "39786769". У него до 10.10 цена 5772, а потом с 11.10 вырастает до 5947. Но у меня почему-то этот рост не с 11.10, а с 13.10
Все, разобрался. Вернулся к первоначально использованным датам (октябрь). Да цену вычисляются корректно, только вот почему-то у меня не происходит изменение цены в нужную дату. Например артикул "39786769". У него до 10.10 цена 5772, а потом с 11.10 вырастает до 5947. Но у меня почему-то этот рост не с 11.10, а с 13.10
только вот почему-то у меня не происходит изменение цены в нужную дату. Например артикул "39786769". У него до 10.10 цена 5772, а потом с 11.10 вырастает до 5947. Но у меня почему-то этот рост не с 11.10, а с 13.10
И у Вас моя формула, предназначенная для ячейки Q3 (о чем написано в сообщении №6), т.е. для даты 10.10, была введена без корректировки адресов в условии по датам в ячейку S3, т.е. для даты 12.10. Т.е. у Вас сейчас в таблице напротив даты 12.10 стоит формула, считающая для даты 10.10.
только вот почему-то у меня не происходит изменение цены в нужную дату. Например артикул "39786769". У него до 10.10 цена 5772, а потом с 11.10 вырастает до 5947. Но у меня почему-то этот рост не с 11.10, а с 13.10
И у Вас моя формула, предназначенная для ячейки Q3 (о чем написано в сообщении №6), т.е. для даты 10.10, была введена без корректировки адресов в условии по датам в ячейку S3, т.е. для даты 12.10. Т.е. у Вас сейчас в таблице напротив даты 12.10 стоит формула, считающая для даты 10.10.