0

场景: 我在 Excel 中有两个命名表,公共列“日期”:

  1. “月票[日期]”
  2. “WorkShiftAll[日期]”

让我们看一下示例数据集:

在此处输入图像描述

我正在尝试动态索引来自定义为两个不同命名单元格的两个日期之间的所有记录:WorkShiftAll[date]PayPeriodStartDate使用此公式(Shift+Ctrl+Enter):PayPeriodEndDateMonthlySheet[date]

=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 月份的两条记录成功列出,因为它记录在数据集中,但是,它重复了 SMALL(第一条记录)两次!不是 10 月 26 日和 10 月 29 日星期五。

在此处输入图像描述

当我使用范围而不是列来寻址索引时,它可以工作!就像我使用:

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

4

1 回答 1

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))))
于 2018-12-03T17:47:59.663 回答