在一张表中,我有一组日期(在 A 列中)。每个日期条目都使用不同的变量值记录一次执行:
第 1 页:
05/03/2021
05/03/2021
05/03/2021
05/04/2021
05/04/2021
05/05/2021
05/05/2021
05/05/2021
05/06/2021
05/06/2021
05/07/2021
在另一张表中,我有 2 个命名单元格:from_date 和 to_date(用于报告范围)
第 2 页:
from_date = 05/03/2021
to_date = 05/07/2021
在 Sheet 2 中,我想要统计日期范围内执行 1、2、3、4 次等的所有次数。
例如,如果某项执行在 4 个不同的日期发生 3 次,则每天执行 3 次,总执行次数为 12 次。
预期输出:
| Executions | Total |
| Per Day | Executions |
|------------|------------|
| 1 | 1 |
| 2 | 4 |
| 3 | 6 |
| 4 | 0 |
答案1
这是一个有趣的问题,并且有很多方法可以做到这一点,所以我很有兴趣看看其他的答案。
方法 1 - 根据您的屏幕截图,可能不是您想要的格式
这是一个需要 Excel 2019 或 Excel 365 的公式。我将以下公式放入工作表中的单元格 A2 中:
=LET( xdates, Sheet2!A:A,
fdates, FILTER( xdates, (xdates >= from_date)*(xdates <= to_date) ),
udates, UNIQUE( fdates ),
frq, FREQUENCY( fdates, udates ),
bins, SORT( UNIQUE( FILTER( frq, frq > 0 ) ) ),
ffrq, FREQUENCY( frq, bins ),
IFERROR( INDEX( bins, SEQUENCE( ROWS( bins ) ), {1,2} ), FILTER( ffrq, ffrq > 0 ) ) )
我放在哪里日期,您将其放入包含执行日期的列中。这将生成一个动态数组,其中左列包含每日执行频率,右列包含总执行次数。
此公式首先根据您的日期和日期过滤日期日期。然后创建一个唯一日期列表(更新) 从过滤结果中抽取。然后计算 fdates 与 udates 的频率频率并制作一个频率排序列表,称为垃圾箱然后计算这些区间的频率频率韋爾。
最后,通过在左列中使用 SEQUENCE 创建带有 bin 的索引来组装结果,以根据 bin 的数量动态调整表中的行数SEQUENCE( ROWS( bins ) )
。它使用数组创建第二列,{1,2}
该列将强制第二列出现错误 - 这是 IFERROR 介入并用FILTER( ffrq, ffrq > 0 )
已被过滤以排除最终零频率行的 ffrq 替换错误的地方。
方法 2 - 这看起来更像是你的截图
这里有一个替代方案 - 如果您希望每天的执行次数从 1 迭代到最大频率,而不跳过任何出现次数为零的频率,您可以改用这个:
=LET( xdates, Sheet2!A:A,
fdates, FILTER( xdates, (xdates >= from_date)*(xdates <= to_date) ),
udates, UNIQUE( fdates ),
frq, FREQUENCY( fdates, udates ),
mxfrq, MAX( frq ),
bins, SEQUENCE( mxfrq ),
ffrq, FREQUENCY( frq, bins ) - ( bins = 1 ),
IFERROR( INDEX( bins, bins, {1,2} ), INDEX( ffrq, bins ) ) )
注意:我发现此版本在每天 1 次的计数中添加了 1,因此我通过删除额外的计数来更正 ffrq。
方法 3 - 每日静态执行次数
此版本无法发现每天的执行情况。它依赖于您将它们放入 A 列(在此示例中):
=LET( xdates, Sheet2!A2:A30,
xPerDay, A2:A6,
fdates, FILTER( xdates, (xdates >= from_date)*(xdates <= to_date) ),
INDEX( FREQUENCY( COUNTIF( xdates, UNIQUE( fdates ) ), xPerDay), xPerDay, ) )
这大大简化了公式。就像之前将执行日期加载到日期(本例中为 Sheet2!A2:A30)。但这也将“每日执行次数”数组作为输入每日(在此示例中为 A2:A6)。
如果要延长“每日执行次数”,则需要延长 xPerDay。您可以在单元格 A2 中将“每日执行次数”设置为 =SEQUENCE( n ),并将 xPerDay 更改为 A2#,这样您就可以更轻松地更改“每日执行次数”的静态列表,而无需编辑 B2 中的公式。