我在创建公式时遇到问题,因此我想请您帮忙。
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”))
有了这个,我就能计算出我有多少次名字了,这是确定的还是良好的,并且在一个星期的范围内,但是我仍然不知道我必须改变什么,我会停下来计数是否为假
答案 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))
注释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)设置最大值。