Возвращает значение ячейки на основе ее диапазона дат в Excel

#excel #excel-formula #date-range

#excel #excel-формула #диапазон дат

Вопрос:

У меня есть таблица с конкретными продуктами и датами, и я хочу получить значения затрат, соответствующие этой дате. Исходная таблица имеет диапазон дат, а не фактическое совпадение (это моя проблема). Вот задача: мы пытаемся заполнить столбец «Стоимость» на основе листа 2

ЛИСТ 1:

Продукт Дата Стоимость Цена
Первый 29/12/2021 результат 1 (тип формулы X) 100
Второй 05/01/2021 результат 2 (тип формулы X) 200

На другом листе указаны диапазоны дат с желаемыми результатами (цены продажи), например:

ЛИСТ 2:

Продукт Дата начала Конечная дата Стоимость
Первый 28/12/2020 03/01/2021 результат 1
Второй 04/01/2021 11/01/2021 результат 2

PS. У меня разные затраты на разные продукты за одну и ту же дату. Итак, нам нужно было также добавить параметр, который будет сопоставлять продукт с одного листа с продуктом другого.

Комментарии:

1. Возможно, используйте SUMIFS.

Ответ №1:

Если указанные диапазоны начинаются с A1 и заканчиваются на D3, то в Sheet1!C2 : =INDEX(Sheet2!D:D,MATCH(1,(B2>Sheet2!B:B)*(B2<Sheet2!C:C)*(A2=Sheet2!A:A),0))

Это формула массива для ввода с ctrl shift enter

Он индексирует столбец D листа 2 и выполняет поиск первого совпадения, в котором все указанные условия являются истинными (= 1 ). Каждое условие выдает 1 или 0 для каждой ячейки в диапазоне и умножает его на результат ячейки из следующего диапазона в той же строке. Если любое из условий равно false, оно умножается на 0, в результате чего получается 0. Если все условия выполнены, это приведет к 1 (1 1 1). В целом создается массив {0,0,1,0,…}, а функция сопоставления возвращает N-е вхождение первого 1, которое равно номеру строки условий, являющихся истинными.

Комментарии:

1. большое вам спасибо за ваш ответ. Это большая помощь. Но, не могли бы вы быть достаточно любезны, чтобы объяснить формулу, которую вы написали? Почему вы поместили «1» в формулу соответствия вместо A1 (это ячейка, которую мы искали) и почему в ней есть умножение? Если я использую эту точную формулу, я получаю одинаковую стоимость для каждого продукта, если дата 29/12/2020. но у меня разные затраты на разные продукты за одну и ту же дату.

2. Добавлено объяснение, а также третье условие для сопоставления продукта.

3. Может ли эта формула «=INDEX(Лист2! D: D,MATCH(1,(B2> Лист2! B: B) * (B2<Лист2! C: C) * (A2 = Лист2! A: A), 0))» быть преобразована в Python? Я получаю временной диапазон с помощью модуля datetimerange, но я не могу объединить его с индексной частью (действием поиска) формулы, которую я использовал в Excel.

4. Я думаю, лучший способ — открыть для этого отдельный вопрос.

Ответ №2:

Поскольку вы упомянули таблицы, я предполагаю, что вы имеете в виду реальную таблицу Excel, а не просто ячейки, отформатированные в виде таблицы.

  • Таблица листа 1 называется: tbl_ProductPrice
  • Таблица листа 2 называется: tbl_ProductCost

Формула столбца «Стоимость» на листе 1:

  =SUMIFS(tbl_ProductCost[Cost],[Date],">="amp;tbl_ProductCost[Start Date],[Date],"<="amp;tbl_ProductCost[End Date])
 

Объяснение

Первый параметр SUMIFS, столбец «Стоимость», — это то, что будет суммировано, если все критерии верны.

Сначала, если:

  • Второй параметр — это критерии даты для проверки.
  • Третий параметр — это то, что нужно проверить, больше или равно начальной дате.

Во-вторых, если:

  • Четвертый параметр снова является датой для второго оператора if
  • Пятый параметр проверяет, меньше или равно конечной дате.

Результаты:

введите описание изображения здесь

введите описание изображения здесь


Редактировать

Основываясь на вашем комментарии относительно нескольких записей продукта для разных диапазонов дат, я бы предпочел подход, основанный на сопоставлении индексов.

 =INDEX(tbl_ProductCost[Cost],MATCH(1,([@Product]=tbl_ProductCost[Product])*([@Date]>=tbl_ProductCost[Start Date])*([@Date]<=tbl_ProductCost[End Date]),0))
 

Введите формулу с Ctrl ShiftEnter, поскольку это формула массива.

Я также добавил соответствие продукта, поскольку вы указали несколько диапазонов дат для каждого типа продукта.

Результаты

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. спасибо, мой друг, но данные находятся на двух разных листах без преобразования в таблицы. Просто необработанные столбцы и строки. Я выбрал диапазон данных, преобразовал их в таблицу (переименовал таблицы в соответствии с вашей формулой), и я получаю только «#Value!» в столбце «стоимость»

2. См. Редактирование — вы получаете ошибку «#Value», потому что есть несколько совпадений. Я видел ваш комментарий к другому сообщению и лучше понимаю, что вам нужно сейчас. Попробуйте редактировать. К вашему СВЕДЕНИЮ, одна из прелестей таблиц заключается в том, что не имеет значения, на каком листе они находятся. Это похоже на использование именованных ссылок в книге.

3. Второе уравнение по сути такое же, как @P.b, но с использованием ссылок на таблицы и добавлением соответствия продукта.

4. спасибо — очень полезные ответы от вас обоих! Спасибо!