场景: 我在Excel中有两个具有公用列“ date”的命名表:
让我们看一下样本数据集:
我正在尝试使用以下方法动态索引来自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)))
是我用来计算有多少记录满足我的条件(介于两个日期之间)的公式
问题: 由于数据集中已记录了十月份的两个记录,因此该记录重复了两次(第一条记录)!不是10月26日和10月29日星期五。
当我使用范围而不是用于处理INDEX的列时,它会起作用! 就像我用
INDEX(**WorkShifts!A2:A14**,SMALL(IF((WorkShiftAll[date]>=PayPeriodStartDate)
...
它可以正常工作,并在10月26日和29日出现两个记录。但是我需要动态范围,所以我想使用表。我应该将其转换为范围吗?还有别的办法吗?
答案 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))))