将两个日期之间的数据从一个Excel表提取到另一个Excel表中?

时间:2018-12-03 17:21:29

标签: excel-tables

场景: 我在Excel中有两个具有公用列“ date”的命名表:

  1. “ MonthlySheet [日期]”
  2. “ WorkShiftAll [日期]”

让我们看一下样本数据集:

enter image description here

我正在尝试使用以下方法动态索引来自WorkShiftAll[date]的所有记录,这些记录位于两个定义为两个不同命名单元格的日期之间:PayPeriodStartDatePayPeriodEndDateMonthlySheet[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))))

其中C10MonthlySheet表中的第一个空白空间。 (SUMPRODUCT((WorkShiftAll[date]>=PayPeriodStartDate)*(WorkShiftAll[date]<=PayPeriodEndDate)))是我用来计算有多少记录满足我的条件(介于两个日期之间)的公式

问题: 由于数据集中已记录了十月份的两个记录,因此该记录重复了两次(第一条记录)!不是10月26日和10月29日星期五。

enter image description here

当我使用范围而不是用于处理INDEX的列时,它会起作用! 就像我用

INDEX(**WorkShifts!A2:A14**,SMALL(IF((WorkShiftAll[date]>=PayPeriodStartDate) ...  它可以正常工作,并在10月26日和29日出现两个记录。但是我需要动态范围,所以我想使用表。我应该将其转换为范围吗?还有别的办法吗?

1 个答案:

答案 0 :(得分:0)

答案是我们需要使用[#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))))