我希望有人能提供帮助,我已经坚持了好几天。
在我的Excel工作表中,我列出了要计算在函数中的错误列表(与excel不相关)。问题是某些类型的错误包含唯一的引用,这使得excel中的countifs函数不足。
我要搜索4个列范围和4个条件(ConigneeIdRange
,ConsigneeId
,ErrorMessageRange
,ErrorMessage
,DateRange1
,{{1 }},Date1
,DateRange2
)。对于大多数错误,countifs函数就足够了,因为在单元格(字符串)中没有唯一的引用,但是我有两种类型的错误消息,其中包含唯一的值(装运编号)。第一个包含字符串“ Unable”,第二个包含字符串中的“ modified”。
我有一个2000行的列表,想知道在特定月份内每行的某个单元格中发生了多少次错误。
也许循环可能是解决方案?我不知道如何在下面的代码中添加更多条件,以及如何在字符串中搜索这两种错误。
Date2
请参见下面的示例数据:
使用的公式:= COUNTIFS($ C $ 2:$ C $ 9,C2,$ B $ 2:$ B $ 9,IF(NOT(ISERROR(FIND(“ Modified”,B2))),“ 已修改< / em>“,IF(NOT(ISERROR(FIND(” Unable“,B2))),” Unable “,B2)),$ A $ 2:$ A $ 9,”> =“&DATE (2018,1,1),$ A $ 2:$ A $ 9,“ <=”&DATE(2018,1,31))
在上面的公式中,通配符在保存帖子后被删除,但它们在我使用的公式中。
您可以看到我没有得到理想的结果。有人可以帮助我创建一个产生期望结果的函数吗?
答案 0 :(得分:0)
如果我了解您的问题,则可以在COUNTIFS
中使用通配符,首先检查H2
是否包含文本“ Modified”或“ Unable”。如果是这样,COUNTIFS
的第四个参数将使用通配符,否则将仅为H2
。
=COUNTIFS(K2:K2000, K2, H2:H2000, IF(NOT(ISERROR(FIND("Modified",H2))),"*Modified*",IF(NOT(ISERROR(FIND("Unable",H2))),"*Unable*",H2)), B2:B2000, ">="&DATE(2018,1,1), B2:B2000,"<="&DATE(2018,1,31))
编辑1
此屏幕快照是我对您提供的数据/公式的理解,并对为什么您的结果与期望的结果不符进行了一些修订和注释。这是我正在使用的修订公式。
=COUNTIFS($C$2:$C$10,C2,$B$2:$B$10, IF(NOT(ISERROR(FIND("Modified",B2))),"Modified*",IF(NOT(ISERROR(FIND("Unable",B2))),"Unable*",B2)),$A$2:$A$10,">="&DATE(2018,1,1),$A$2:$A$10,"<="&DATE(2018,1,31))
C2:C10
运行的,但是您的公式仅引用了C2:C9
(?)COUNTIFS
在带有“ Unable”或“ Modified”的行上返回正确的结果COUNTIFS
的条件-即它们都在2018年1月之内。如果您只希望将计数显示在属于该行的行上一月份,您可以先测试该状况-也许使用类似的方法。修改后的公式:
=IF(AND(A2>=DATE(2018,1,1),A2<=DATE(2018,1,31)),COUNTIFS($C$2:$C$10,C2,$B$2:$B$10, IF(NOT(ISERROR(FIND("Modified",B2))),"Modified*",IF(NOT(ISERROR(FIND("Unable",B2))),"Unable*",B2)),$A$2:$A$10,">="&DATE(2018,1,1),$A$2:$A$10,"<="&DATE(2018,1,31)),0)
答案 1 :(得分:0)
我找到了解决问题的方法。
显式选项 函数CErrorCount(ConsigneeIdRange作为范围,ConsigneeId作为长,ErrorMessageRange作为范围,ErrorMessage作为字符串,_ Date1Range作为范围,Date1作为字符串,Date2Range作为范围,Date2作为字符串)作为整数
'计算日期之间的错误类型
If InStr(1, ErrorMessage, "Unable", 1) Then
CErrorCount = WorksheetFunction.CountIfs(ConsigneeIdRange, ConsigneeId, ErrorMessageRange, "*Unable*", Date1Range, Date1, Date2Range, Date2)
ElseIf InStr(1, ErrorMessage, "modified", 1) Then
CErrorCount = WorksheetFunction.CountIfs(ConsigneeIdRange, ConsigneeId, ErrorMessageRange, "*modified*", Date1Range, Date1, Date2Range, Date2)
Else
CErrorCount = WorksheetFunction.CountIfs(ConsigneeIdRange, ConsigneeId, ErrorMessageRange, ErrorMessage, Date1Range, Date1, Date2Range, Date2)
End If
结束功能