我有 5 列带有颜色选项。我需要计算所有选项中有多少与黑色不同。我的意思是,当 5 列中的一列中有与黑色不同的东西时,它们就被认为是颜色。如果不是,则被视为黑色。
即,如果“红色”出现在 5 列之一中,则为颜色。我尝试在
Countifs
内添加 OR,并使用查询,但它不起作用。我发现的唯一方法是使用带有 if 条件的新列,但我需要将其嵌入到计数或查询公式中(我无法在主数据表中添加任何新列)。
[我还不能嵌入图片,所以有一个截图。]
=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<>"") ...
尝试:
=INDEX(IF(TRIM(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)))="",,
IF(REGEXMATCH(FLATTEN(QUERY(TRANSPOSE(L2:P),,9^9)), "(?i)black"), "BLACK", "COLOR")))
或:
=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")))), ))
=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)''"))
你可以在 I2 say 中这样做
=countif(byrow(L2:P,lambda(r,countifs(r,"<>Black",r,"<>"))),">"&0)
在J2
=countif(byrow(L2:P,lambda(r,counta(r))),">"&0)-I2
如果您需要将公式放在不同的工作表中,例如,请添加工作表参考
=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中。