Извлечь данные между двумя датами из таблицы Excel в другую таблицу Excel?

Сценарий: у меня есть две именованные таблицы в Excel с общим столбцом "дата":

  1. "Ежемесячный лист [дата]"
  2. "РабочаяСменаВсе[дата]"

давайте взглянем на пример набора данных:

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

Я пытаюсь динамически индексировать все записи из WorkShiftAll[date], которые находятся между двумя датами, определенными в двух ячейках с разными именами: PayPeriodStartDate и PayPeriodEndDate в MonthlySheet[date], используя эту формулу (Shift+Ctrl+Enter):

=IF(ROWS(C$10:C10)>(SUMPRODUCT((WorkShiftAll[date]>=PayPeriodStartDate)*(WorkShiftAll[date]<=PayPeriodEndDate))),"",INDEX(workShiftsDateRange,SMALL(IF((WorkShiftAll[date]>=PayPeriodStartDate)*(WorkShiftAll[date]<=PayPeriodEndDate),ROW(WorkShiftAll[date])-ROW(WorkShiftAll[date])+1),ROWS(C$10:C10))))

где C10 — первое пустое место в таблице MonthlySheet. И (SUMPRODUCT((WorkShiftAll[date]>=PayPeriodStartDate)*(WorkShiftAll[date]<=PayPeriodEndDate))) — это формула, которую я использовал для подсчета количества записей, соответствующих моим критериям (находящихся между двумя датами).

ПРОБЛЕМА: Две записи успешно перечислены для октября, поскольку они записаны в наборе данных, однако МАЛЕНЬКАЯ (первая запись) повторяется дважды! не пятница 26 октября и 29 октября.

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

Когда я использую диапазон вместо столбца для адресации ИНДЕКС, это работает!! например, если я использую:

INDEX(**WorkShifts!A2:A14**,SMALL(IF((WorkShiftAll[date]>=PayPeriodStartDate)... Работает и появляются две записи, 26 и 29 октября. Но мне нужно, чтобы мой диапазон был динамическим, поэтому я хочу использовать таблицу. Должен ли я преобразовать его в диапазон? а другого выхода нет?


person Saffa Seraj    schedule 03.12.2018    source источник


Ответы (1)


Ответ заключается в том, что нам нужно использовать [#Headers] для вычитания первой-предыдущей строки каждой текущей вычисляемой строки, когда источником данных является таблица, а не определенный диапазон, где номер строки является постоянным:

ROW(WorkShiftAll[date])-ROW(WorkShiftAll[#Headers])),ROWS(C$10:C10))))

Таким образом, полная разрешающая формула будет выглядеть так:

=IF(ROWS(C$10:C10)>(SUMPRODUCT((WorkShiftAll[date]>=PayPeriodStartDate)*(WorkShiftAll[date]<=PayPeriodEndDate))),"",INDEX(workShiftsDateRange,SMALL(IF((WorkShiftAll[date]>=PayPeriodStartDate)*(WorkShiftAll[date]<=PayPeriodEndDate),ROW(WorkShiftAll[date])-ROW(WorkShiftAll[#Headers])),ROWS(C$10:C10))))
person Saffa Seraj    schedule 03.12.2018