#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. спасибо — очень полезные ответы от вас обоих! Спасибо!