具有 OR 标准和范围的计数

问题描述 投票:0回答:3

我有 5 列带有颜色选项。我需要计算所有选项中有多少与黑色不同。我的意思是,当 5 列中的一列中有与黑色不同的东西时,它们就被认为是颜色。如果不是,则被视为黑色。

即,如果“红色”出现在 5 列之一中,则为颜色。我尝试在

Countifs
内添加 OR,并使用查询,但它不起作用。我发现的唯一方法是使用带有 if 条件的新列,但我需要将其嵌入到计数或查询公式中(我无法在主数据表中添加任何新列)。

[我还不能嵌入图片,所以有一个截图。]1

=if(OR(if(AND(L2<>"Black";L2<>"");"COLOR";"")="COLOR";
   if(AND(M2<>"Black";M2<>"");"COLOR";"")="COLOR";
   if(AND(N2<>"Black";N2<>"");"COLOR";"")="COLOR";
   if(AND(O2<>"Black";O2<>"");"COLOR";"")="COLOR";
   if(AND(P2<>"Black";P2<>"");"COLOR";"")="COLOR");"COLOR";"BLACK")

我使用该公式作为界面,我可以计算其中有多少是彩色或黑色。它有效,但我需要结果而不添加任何额外的列。

我知道

countifs
中“逗号”之后的任何陈述都是“AND”,因此任何范围和条件都是限制性的,需要完成所有条件。我需要他们作为“OR”工作,但我没有找到办法。我需要类似的东西:

=countifs(AND(L:L,<>"Black"L:L<>"") *OR*  AND(M:M,<>"Black"M:M<>"") *OR* AND(N:N,<>"Black"N:N<>"") ...
google-sheets google-sheets-formula
3个回答
1
投票

尝试:

=INDEX(IF(TRIM(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)))="",,
 IF(REGEXMATCH(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)), "(?i)black"), "BLACK", "COLOR")))

enter image description here

enter image description here

或:

=INDEX(IF(LEN(L2:L&M2:M&N2:N&O2:O&P2:P), UPPER(MAP(L2:L, M2:M, N2:N, O2:O, P2:P, 
 LAMBDA(L,M,N,O,P, IFS(L="BLACK",L,M="BLACK",M,N="BLACK",N,O="BLACK",O,P="BLACK",P,TRUE,"COLOR")))), ))

enter image description here


更新:

=INDEX(QUERY(IF(TRIM(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)))="",,
 IF(REGEXMATCH(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)), "(?i)\bblack\b"), "BLACK", "COLOR")), 
 "select Col1,count(Col1) where Col1 is not null group by Col1 label count(Col1)''"))

enter image description here


1
投票

你可以在 I2 say 中这样做

=countif(byrow(L2:P,lambda(r,countifs(r,"<>Black",r,"<>"))),">"&0)

在J2

=countif(byrow(L2:P,lambda(r,counta(r))),">"&0)-I2

enter image description here

如果您需要将公式放在不同的工作表中,例如,请添加工作表参考

=countif(byrow(Sheet6!L2:P,lambda(r,countifs(r,"<>Black",r,"<>"))),">0")

=countif(byrow(Sheet6!L2:P,lambda(r,counta(r))),">0")-A2

如果在单独一张纸的 A2 和 B2 中。

注意

如果您的数据库变得很大并且 Byrow/Lambda 出现问题,您可以恢复到更传统的 Mmult:

=ArrayFormula(countif(mmult(n((L2:P<>"Black")*(L2:P<>"")),sequence(5,1,1,0)),">0"))

=ArrayFormula(countif(mmult(n(L2:P<>""),sequence(5,1,1,0)),">0"))-C2

假设之前的公式在C2中。


0
投票

使用这个公式

=ARRAYFORMULA(LAMBDA(u, {UNIQUE(u),COUNTIF(u, "="&UNIQUE(u))})
             (LAMBDA(t, IFS(t=FALSE,"Color",t=TRUE,"Black"))
             (REGEXMATCH(trim(LAMBDA(f, FILTER(f,f<>""))(FLATTEN(L2:P))), "(?i)black"))))

enter image description here

演示

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.