为了简单起见,我尝试将两个可变日期之间的差异划分为几个时间范围类别。我将提供一些示例数据:
A B C D
1 Account# Name Start Date End Date
2 24621 Customer1 11/17/21 11/17/2021
3 24621 Customer2 09/17/21 11/17/2021
4 24621 Customer3 06/17/21 11/17/2021
5 24621 Customer4 03/17/21 11/17/2021
6 24521 Customer5 11/17/20 11/17/2021
7 24321 Customer5 10/17/20 11/17/2021
然后,我想将开始日期和结束日期之间的差异统计到以下类别中(因为它们会出现在单独的表格中):
Total Time Period
1 < 1 Month
1 < 3 Months
1 < 6 Months
1 < 1 Year
2 >= 1 Year
我尝试过使用=SUMIFS(C2:C7, D2:D7, (D2-C2)<=31)
和,=COUNTIF(C2:C7, (D2-C2)<=31)
但两个返回值都是 0。减去日期会返回正确的天数,所以我觉得我应该能够计算出 0 到 31、32 到 93 等之间的值,而不需要添加辅助列来运行计数公式。
我还曾经=SUMPRODUCT(--(C:C<>D:D))-1
计算过列出相同或不同日期的单元格的数量 - 我怀疑它是否适用于这个问题,但是我今天已经摆弄这些公式几个小时了,但没有任何进展。
编辑:用于故障排除帮助的额外信息。不得不对数据进行一些清理,但我相信所有需要的信息都在这里。右下角是我正在使用的公式;正如您所看到的,该公式适用于前 17 行,但将其应用于超过 18 行的任何内容似乎都会破坏它。我相当确定所有内容都正确转录,但我不熟悉这些公式(除了 Count),所以不确定是否有限制或我在某处有拼写错误。
答案1
您可以使用以下公式:
=XLOOKUP(DATEDIF(C2,D2,"M"),{0,3,6,12},{"< 1 Month","1-3 Months","3-6 Months","6 Months - 1 Year"},"> 1 Year",1)
DATEDIF 计算日期之间的月份。XLOOKUP 在第一个数组中查找每个月份或下一个最大项(由最后一个参数指示),然后从第二个数组返回相应位置。如果找不到日期之间的月份(即大于 12),则返回 XLOOKUP 中第四个参数指定的默认值。
编辑:
顺便说一下,您可能希望将第三个范围的定义更改为 4-6 个月。
编辑2:
阅读您编辑的帖子,您可以执行以下操作:
输入统计表的行标题,然后使用以下公式:
=COUNT(FILTER($A$2:$A$7,XLOOKUP(DATEDIF($C$2:$C$7,$D$2:$D$7,"M"),{0,3,6,12},{"< 1 Month","1-3 Months","4-6 Months","7 Months - 1 Year"},"> 1 Year",1)=$A12))
在此公式中,我们筛选 A 列(实际上可以是任何列),查找原始 XLOOKUP 公式(调整为使用 DATEDIF 中的范围)返回相邻单元格中的值的行。然后,我们计算筛选后的行数,以获得符合该条件的行数。
编辑3:
关于 A2:A18 的问题,问题出现的原因是第 18 行的开始日期(2021 年 11 月 7 日)晚于结束日期(2021 年 6 月 22 日)。
因此,DATEDIF 函数返回 #NUM!错误(见下面的单元格 G18)。因此,XLOOKUP 也返回 #NUM!错误(见下面的单元格 I18)。FILTER 也返回 #NUM!错误(单元格 L2)。出现零值是因为 COUNT 只计算数字。它不能计算文本或错误。因此它返回零(单元格 L6)。您将看到,如果您将其更改为使用 COUNTA 而不是 COUNT,它将返回 1,因为它计算了 1 个错误。
为了解决这个问题,您可以:
- 确保每一行的开始日期都晚于结束日期,或者
- 通过将 DATEDIF 包装在 IFERROR 调用中,让公式忽略错误行。
像这样:
IFERROR(DATEDIF(E2,F2,"M"),-1)
我们说的是,如果 DATEDIF 返回错误,则返回 -1 而不是错误。然后我们可以向 XLOOKUP 数组添加一个元素来处理 -1。
像这样:
XLOOKUP(G2,{-1,0,3,6,12},{"Error","< 1 Month","1-3 Months","3-6 Months","6 Months - 1 Year"},"> 1 Year",1)
如您所见,通过进行这些更改,第 18 行的 DATEDIF 返回值为 -1,XLOOKUP 的返回值为“Error”。
您的完整公式将是:
=COUNT(FILTER($A$2:$A$7,XLOOKUP(IFERROR(DATEDIF($C$2:$C$7,$D$2:$D$7,"M"),-1),{-1,0,3,6,12},{"Error","< 1 Month","1-3 Months","4-6 Months","7 Months - 1 Year"},"> 1 Year",1)=$A12))