IF + AND +日期范围公式

时间:2019-03-28 10:51:04

标签: excel date if-statement

我在创建公式时遇到问题,因此我想请您帮忙。

Excel工作表有15万行,我想用这个公式来节省时间。

我有一个“日期”,“名称”和“状态”,我需要在其他单元格中看到“名称”是连续GOOD或OK的4倍或更多倍

输入示例: https://imgur.com/aRALd9S

我认为IF + AND + DATE范围就足够了,但我不知道如何将其组合在一起。

非常感谢您的建议!

这是我到目前为止的内容:https://imgur.com/Y5WAov5

= COUNTIFS($ D $ 2:$ D $ 15; D2; $ C $ 2:$ C $ 15;“ OK”; $ D $ 2:$ D $ 15; D2; $ E $ 2:$ E $ 15;“> =” &E2; $ E $ 2:$ E $ 15;“ <=”&E2 + 7)+(COUNTIFS($ D $ 2:$ D $ 15; D2; $ C $ 2:$ C $ 15;“ GOOD”))

有了这个,我就能计算出我有多少次名字了,这是确定的还是良好的,并且在一个星期的范围内,但是我仍然不知道我必须改变什么,我会停下来计数是否为假

1 个答案:

答案 0 :(得分:0)

这是您可以尝试的方法。您可以使用一个数组公式在一个公式中完成此操作,但是对于15万行,尝试避免使用数组公式并在必要时使用辅助列似乎要好得多。

如果该行包含FALSE,则第一助手列仅包含该人的ID:

=IF(H2=FALSE,I2,"")

第二个帮助者列包含同一个人从当前行到下一个FALSE的偏移量:

=IFERROR(MATCH(I2,K2:K$15,0)-1,16-ROW())

因此,现在您基本上可以使用相同的COUNTIFS公式,但用INDEX替换每个范围,该INDEX指定应计数的行数:

=IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$15,L2),I2,H2:INDEX(H2:H$15,L2),"GOOD",J2:INDEX(J2:J$15,L2),">="&J2,J2:INDEX(J2:J$15,L2),"<="&J2+7))+
    IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$15,L2),I2,H2:INDEX(H2:H$15,L2),"OK",J2:INDEX(J2:J$15,L2),">="&J2,J2:INDEX(J2:J$15,L2),"<="&J2+7))

enter image description here

注释1

第二个等式中的16是为了考虑到在当前行之后没有更多行标记为FALSE的情况,因此MATCH失败。这使Countifs可以计算从当前行到数据末尾的所有内容。

注释2 -扩展到更大范围的数据

您应该可以将图16替换为countA(I:I),即数据的大小加上标题。

为索引使用更大范围应该没有问题。

    =IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$150000,L2),I2,H2:INDEX(H2:H$150000,L2),"GOOD",J2:INDEX(J2:J$150000,L2),">="&J2,J2:INDEX(J2:J$150000,L2),"<="&J2+7))+
 IF(H2=FALSE,0,COUNTIFS(I2:INDEX(I2:I$150000,L2),I2,H2:INDEX(H2:H$150000,L2),"OK",J2:INDEX(J2:J$150000,L2),">="&J2,J2:INDEX(J2:J$150000,L2),"<="&J2+7))

,但是将MATCH中的搜索范围增加到第二个公式中的150K行确实会在重复150K次后严重影响性能。我目前唯一能想到的解决方案是,看看是否可以在从出现任何名称到到下次出现该名称的距离(在其旁边为FALSE)设置最大值。