Извлечь данные между двумя датами из таблицы Excel в другую таблицу Excel? - PullRequest
0 голосов
/ 03 декабря 2018

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

  1. "MonthlySheet [дата]"
  2. "WorkShiftAll [date] "

Давайте рассмотрим пример набора данных:

enter image description here

Я пытаюсь проиндексироватьдинамически все записи из 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 октября.

enter image description here

Когда я использую диапазон вместо столбца для адресации INDEX, он работает !!например, если я использую:

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

1 Ответ

0 голосов
/ 03 декабря 2018

Ответ заключается в том, что нам нужно использовать [#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))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...